前言
Docker 是目前最流行的容器引擎之一,其轻量快速、可移植性好等特点受到广泛的认可。Docker 容器的便携性允许开发者将应用及其依赖打包到一个可移植的容器中,并可通过 Docker Hub 等平台进行分享和存储。本文将介绍 Docker 的组合命令:build、run、attach,从而深入理解 Docker 容器的构建和运行过程。
Docker 镜像和容器
在深入 Docker 组合命令前,先简单介绍 Docker 镜像和容器的概念。
Docker 镜像是一个只读的模板,其中包含了操作系统、应用程序及其依赖。Docker 容器是 Docker 镜像运行时的实例,它可以运行、停止、删除,也可以与其他容器组合使用形成应用系统。
在这里,我们可以粗略地将 Docker 镜像看作是一个从零开始构建的虚拟操作系统,而 Docker 容器就是基于这个操作系统的一系列应用程序和依赖的运行实例。
Docker build 命令
Docker build 的作用是根据 Dockerfile 构建出一个 Docker 镜像。Dockerfile 是一个文本文件,其中包含了一系列指令,用于构建 Docker 镜像。下面是一个简单的 Dockerfile 示例:
FROM ubuntu:latest RUN apt-get update && apt-get install -y nginx CMD ["/usr/sbin/nginx", "-g", "daemon off;"]
Dockerfile 中的 FROM 指令表示使用 ubuntu:latest 镜像作为基础镜像,RUN 指令用于执行系统命令,这里用于安装 nginx,CMD 指令则表示容器启动后执行的命令。
在 Dockerfile 所在目录下执行以下命令:
$ docker build -t mynginx .
其中,-t 参数用于给 Docker 镜像命名为 mynginx,句点 . 表示使用当前目录下的 Dockerfile 文件进行构建。
构建完成后,我们可以通过以下命令查看已有的 Docker 镜像:
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE mynginx latest bf7e35a1a0a7 20 minutes ago 123MB ubuntu latest 7e0aa2d69a15 2 weeks ago 72.9MB
这里我们可以看到已经成功构建了一个名为 mynginx 的 Docker 镜像。
Docker run 命令
Docker run 命令用于根据 Docker 镜像创建并运行一个 Docker 容器。
通过以下命令运行刚才构建的 mynginx 镜像:
$ docker run -d -p 8080:80 --name mynginx mynginx
其中,-d 参数表示在后台运行容器,-p 参数表示将容器内的 80 端口映射到主机的 8080 端口,--name 参数表示容器的名称。
运行完成后,我们可以通过以下命令查看当前运行的 Docker 容器:
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 20a64e7a24aa mynginx "/usr/sbin/nginx -g …" 25 seconds ago Up 24 seconds 0.0.0.0:8080->80/tcp mynginx
这里我们可以看到创建了一个名为 mynginx 的 Docker 容器。
Docker attach 命令
Docker attach 命令用于进入正在运行的 Docker 容器并查看容器内的终端输出。在前面的示例中,我们通过 -d 参数将容器放在了后台运行状态。此时,我们需要通过 attach 命令进入容器内部查看容器的运行情况。
通过以下命令进入刚才创建的 mynginx 容器:
$ docker attach mynginx
如果容器运行正常,我们可以在容器内查看到 nginx 的运行情况。在容器内按下 Ctrl+C 即可退出 attach 模式。
总结
通过本文的介绍,我们深入学习了 Docker 组合命令:docker build、run、attach 的用法和特点。我们了解了 Docker 镜像和容器的概念,通过构建镜像和运行容器的示例代码,更加深入地了解了 Docker 容器的构建和运行过程。
通过 Docker 简洁、高效的容器技术,我们可以更加便捷地管理应用程序及其依赖,提高开发效率和运行效率。希望本文的内容对于前端开发者们掌握 Docker 高级技术有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/651d1eaa95b1f8cacd4a34ce