myfreax

docker run运行命令教程

Docker是一个平台,可让您将应用程序开发,测试和部署为可在几乎任何地方运行的可移植的自给自足的容器

7 min read
By myfreax
docker run运行命令教程

Docker是一个平台,可让您将应用程序开发,测试和部署为可在几乎任何地方运行的可移植的自给自足的容器。

docker run命令从指定的镜像创建一个容器,并使用指定的参数启动该容器。这是开始使用Docker时应熟悉的第一个命令之一。

在教程中,我们将使用官方的Nginx镜像来展示运行Docker容器的各种方法。

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]这是docker run命令采用基本语法形式。

docker run命令的唯一必需参数是创建容器的镜像的名称。如果本地系统上不存在该镜像,则将从Docker Hub合并拉取镜像。

如果未指定任何命令,则在运行容器时将运行Dockerfile的CMDENTRYPOINT指令中指定的命令。

从版本1.13开始,Docker CLI进行重构,并且所有子命令都被分组在与之交互的对象下。由于run命令与容器交互,因此它现在是docker container的子命令。

docker container run [OPTIONS] IMAGE [COMMAND] [ARG...]这是新命令的语法用于从镜像创建容器。

Docker仍支持旧的1.13以前的语法。在后台docker run命令是docker container run的别名。鼓励用户使用新的命令语法。所有docker container run选项的列表可在 Docker文档页面上找到。

在前台中运行容器

默认情况下,当docker run命令未提供任何选项时,docker的容器进程将在前台启动。这意味着来自docker 容器进程的标准输入,输出和错误将附加到终端会话。

docker container run nginx命令将从Nginx创建容器,Nginx进程的输出将显示在您的终端上。由于没有与Web服务器的连接,因此终端为空。

在前台创建docker容器非常适合调试应用和创建dockerfile,因为你可看到容器的所有输出。

如需要要停止容器,请按CTRL+C终止docker容器的Nginx进程。

后台运行容器

要在退出终端会话时保持容器运行,请以后台模式启动容器。这类似于在后台运行 Linux进程。你可使用docker的-d选项创建可在后台运行的容器。

docker container run -d nginx命令将从Nginx镜像创建容器,它将在后台运行Nginx容器的进程。容器内部的Nginx进程终止后,后台运行容器也将会停止。

您可以使用docker container ls命令列出正在运行的容器。要将终端连接到正在的容器,你可以使用docker container attach命令。

退出后删除容器

默认情况下,当容器退出时,其文件系统将保留在主机系统上。--rm选项指示docker run命令在容器自动退出时将其删除。

docker container run --rm nginx命令将从Nginx镜像创建容器,在容器退出后,将会docker将会该容器生成的所有文件。

Nginx镜像可能不是清理容器文件系统的最佳示例。此选项通常用于执行短期任务的前台容器。例如测试或数据库备份。

容器名称

在Docker中,每个容器都通过UUID和名称来标识。默认情况下,如果未显式设置,则容器名称由Docker服务自动生成。你可使用docker的--name选项为容器分配自定义名称。

docker container run -d --name my_nginx nginx命令将从Nginx镜像创建容器,并指定名称是my_nginx。你可以为容器命名为一个有意义的名字。

容器名称必须唯一。如果您尝试使用相同的名称启动另一个容器,则会看类似的错误docker: Error response from daemon: Conflict. The container name,to be able to reuse that name。

可运行docker container ls -a列出所有容器,然后查看它们的名称。有意义的名称对于在Docker网络中或运行Docker CLI命令时引用容器很有用。

映射容器端口

默认情况下,如果映射任何端口,则只能从容器内部访问容器中运行的进程。

映射容器端口意味着将容器端口映射到主机端口,以便这些端口可用于Docker内部的服务。可使用docker的-p选项指定映射的端口。

-p host_ip:host_port:container_port/protocol这是-p选项基本形式。如果未指定host_ip,则默认为0.0.0.0

如果未指定protocol,则默认为TCP。可同时使用多个-p选项映射多个端口。

docker container run --name web_server -d -p 8080:80 nginx命令将从Nginx镜像创建容器,将容器中的TCP端口80映射到主机的端口8080。

您可以通过在浏览器中打开http://localhost:8080或在主机运行curl命令curl -I http://localhost:8080来验证端口是否映射成功。

映射目录

当容器停止时,该容器生成的所有数据都将被删除。Docker卷是使数据持久化并在多个容器之间共享的首选方法。要创建和管理卷,请使用-v选项。

-v host_src:container_dest:options这是-v选项基本形式。host_src可以是主机或卷或目录的绝对路径。

container_dest是容器内部文件或目录的绝对路径。选项可以是rw读写和ro只读。如果未指定选项,则默认为rw

为解释它的工作原理,让我们在主机上创建目录运行命令mkdir -p public_html,并在其中放置index.html文件,echo "Testing Docker Volumes" > public_html/index.html

docker run --name web_server -d -p 8080:80 -v $(pwd)/public_html:/usr/share/nginx/html nginx命令将从Nginx镜像创建容器,并将public_html目录映射到容器的/usr/share/nginx/html目录。

我们使用$(pwd)命令代替指定public_html目录的绝对路径,pwd命令显示当前工作目录

现在,如果在浏览器中键入http://localhost:8080,则应该看到index.html文件的内容。您也可以使用curl命令curl http://localhost:8080打开。

交互式运行容器

有时候你可能需要动态修改容器内部的环境变量,或者配置文件,处理bash之类的交互时,请使用docker的-i-t选项启动容器。

-it选项指示Docker将标准输入保留在终端上并分配一个伪tty。容器的Bash将连接到终端,命令提示符将更改,类似于这样root@1da70f1937f5:/#

现在,您可以与容器的shell进行交互并在其中运行任何命令。

在此示例中,我们提供了命令/bin/bash作为执行的docker run命令的参数,而不是Dockerfile中指定的命令。

Docker是打包和部署应用程序的标准,并且是CI/CD,自动化和DevOps的重要组成部分。

docker container run命令用于创建和运行Docker容器。如有任何疑问,请在下面发表评论。