Docker运行命令示例
Docker是一个平台,使您可以将应用程序开发,测试和部署为可在几乎任何地方运行的可移植,自给自足的容器。
的 docker run
命令从给定图像创建容器,然后使用给定命令启动容器。 这是开始使用Docker时应熟悉的第一批命令之一。
在本文中,我们将使用官方的Nginx图像来展示运行Docker容器的各种方法。
Docker运行命令#
的 docker run
命令采用以下形式:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
从中创建容器的图像名称是该容器唯一需要的参数。 docker run
命令。 如果本地系统上不存在该映像,则将其从注册表中拉出。
如果未指定命令,则在Dockerfile的 CMD
要么 ENTRYPOINT
运行容器时执行指令。
从版本1.13开始,Docker CLI进行了重组。 所有命令都被分组在与它们交互的对象下。
自从 run
命令与容器交互,它是的子命令 docker container
。 新命令的语法如下:
docker container run [OPTIONS] IMAGE [COMMAND] [ARG...]
仍支持旧的1.13之前的语法。 在引擎盖下 docker run
命令是…的别名 docker container run
。 鼓励用户使用新的命令语法。
全部清单 docker container run
选项可以在Docker文档页面上找到。
在前景中运行容器
默认情况下,如果没有为 docker run
命令,根进程在前台启动。 这意味着来自根进程的标准输入,输出和错误将附加到终端会话。
docker container run nginx
Nginx进程的输出将显示在您的终端上。 由于没有与Web服务器的连接,因此终端为空。
要停止容器,请按以下键终止正在运行的Nginx进程 CTRL+C
。
在分离模式下运行容器
要在退出终端会话时保持容器运行,请以分离模式启动它。 这类似于在后台运行Linux进程。
使用 -d
启动独立容器的选项:
docker container run -d nginx
050e72d8567a3ec1e66370350b0069ab5219614f9701f63fcf02e8c8689f04fa
当根进程终止时,分离的容器将停止。
您可以使用列出正在运行的容器 docker container ls
命令。
要将终端连接到分离的容器根进程,请使用 docker container attach
命令。
退出#后取出容器
默认情况下,当容器退出时,其文件系统将保留在主机系统上。
的 --rm
选项告诉 docker run
在容器自动退出时删除容器的命令:
docker container run --rm nginx
Nginx映像可能不是容器退出后清理容器文件系统的最佳示例。 此选项通常用于执行短期任务(例如测试或数据库备份)的前台容器。
设置容器名称
在Docker中,每个容器均由其标识 UUID
和名字。 默认情况下,如果未显式设置,则容器名称由Docker守护程序自动生成。
使用 --name
为容器分配自定义名称的选项:
docker container run -d --name my_nginx nginx
容器名称必须唯一。 如果您尝试使用相同的名称启动另一个容器,则会收到类似于以下的错误:
docker: Error response from daemon: Conflict. The container name "/my_nginx" is already in use by container "9...c". You have to remove (or rename) that container to be able to reuse that name.
跑 docker container ls -a
列出所有容器,并查看其名称:
docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9d695c1f5ef4 nginx "nginx -g 'daemon of…" 36 seconds ago Up 35 seconds 80/tcp my_nginx
有意义的名称对于在Docker网络中或运行Docker CLI命令时引用容器很有用。
发布容器端口
默认情况下,如果未发布任何端口,则只能从容器内部访问容器中运行的进程。
发布端口意味着将容器端口映射到主机端口,以便这些端口可用于Docker外部的服务。
要发布端口,请使用 -p
选项如下:
-p host_ip:host_port:container_port/protocol
- 如果不
host_ip
指定,默认为0.0.0.0
。 - 如果不
protocol
指定,默认为TCP。 - 要发布多个端口,请使用多个
-p
选项。
要将容器中的TCP端口80(nginx)映射到主机localhost接口上的端口8080,请运行:
docker container run --name web_server -d -p 8080:80 nginx
您可以通过以下方式验证端口是否已发布 http://localhost:8080
在您的浏览器中或运行以下命令 curl
Docker主机上的命令:
curl -I http://localhost:8080
输出将如下所示:
HTTP/1.1 200 OK
Server: nginx/1.17.6
Date: Tue, 26 Nov 2019 22:55:59 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 19 Nov 2019 12:50:08 GMT
Connection: keep-alive
ETag: "5dd3e500-264"
Accept-Ranges: bytes
共享数据(安装量)#
停止容器后,将删除该容器生成的所有数据。 Docker Volumes是使数据持久化并在多个容器之间共享的首选方法。
要创建和管理卷,请使用 -p
选项如下:
-v host_src:container_dest:options
- 的
host_src
可以是主机或命名卷上文件或目录的绝对路径。 - 的
container_dest
是容器上文件或目录的绝对路径。 - 选项可以是
rw
(读写)和ro
(只读)。 如果未指定任何选项,则默认为rw
。
为了解释它是如何工作的,让我们在主机上创建一个目录并放置一个 index.html
文件在其中:
mkdir public_html
echo "Testing Docker Volumes" > public_html/index.html
接下来,安装 public_html
目录到 /usr/share/nginx/html
在容器中:
docker run --name web_server -d -p 8080:80 -v $(pwd)/public_html:/usr/share/nginx/html nginx
而不是指定到的绝对路径 public_html
目录,我们正在使用 $(pwd)
命令,显示当前工作目录。
现在,如果您输入 http://localhost:8080
在浏览器中,您应该看到 index.html
文件。 您也可以使用 curl
:
curl http://localhost:8080
Testing Docker Volumes
交互式运行容器#
在处理诸如 bash
, 使用 -i
和 -t
启动容器的选项。
的 -it
options告诉Docker将标准输入保留在终端上并分配一个伪tty:
docker container run -it nginx /bin/bash
容器的Bash Shell将附加到终端,命令提示符将更改:
[email protected]:/#
现在,您可以与容器的外壳进行交互并在其中运行任何命令。
在此示例中,我们提供了一个命令(/bin/bash
)作为 docker run
执行的命令,而不是Dockerfile中指定的命令。
结论#
Docker是打包和部署应用程序的标准,并且是CI / CD,自动化和DevOps的重要组成部分。
的 docker container run
该命令用于创建和运行Docker容器。
如有任何疑问,请在下面发表评论。
码头工人