在本文中,我们将使用官方的Nginx image来演示运行Docker容器的各种方法。Docker是一个平台,使您可以将应用程序开发、测试和部署为可在几乎任何地方运行的可移植的自给自足容器。docker run命令从给定映像创建容器,并使用给定命令启动容器,这是开始使用Docker时应熟悉的第一批命令之一。安装Docker参考:在Debian 10 Linux系统上安装最新稳定版和使用Docker的方法。
Docker Run命令 docker run命令采用以下形式: $ docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 从中创建容器的映像的名称是docker run命令唯一需要的参数,如果本地系统上不存在该映像,则将其从注册表中拉出。 如果未指定命令,则在运行容器时将执行Dockerfile的CMD或ENTRYPOINT指令中指定的命令。 从版本1.13开始,Docker CLI已经进行了重组,并且所有命令都被分组在与之交互的对象下。 由于run命令与容器交互,因此它现在是docker容器的子命令,新命令的语法如下: $ docker container run [OPTIONS] IMAGE [COMMAND] [ARG...] 仍支持旧的1.13之前的语法,在后台,docker run命令是docker容器运行的别名,鼓励用户使用新的命令语法。
在Foreground中运行容器 默认情况下,如果不为docker run命令提供任何选项,则根进程在前台启动,这意味着来自根进程的标准输入,输出和错误将附加到终端会话: $ docker container run nginx Nginx进程的输出将显示在您的终端上,由于没有与Web服务器的连接,因此终端为空。 要停止容器,请按CTRL+C终止正在运行的Nginx进程。
以分离模式运行容器 要在退出终端会话时保持容器运行,请以分离模式启动它,这类似于在后台运行Linux进程。 使用-d选项启动一个分离的容器: $ docker container run -d nginx 050e72d8567a3ec1e66370350b0069ab5219614f9701f63fcf02e8c8689f04fa 当根进程终止时,分离的容器将停止。 您可以使用docker container ls命令列出正在运行的容器。 要将终端附加到分离的容器根进程,请使用docker container attach命令。
退出后取出容器 默认情况下,当容器退出时,其文件系统将保留在主机系统上。 --rm选项使docker run命令在容器自动退出时将其删除: $ docker container run --rm nginx 在容器退出后,Nginx image可能不是清理容器文件系统的最佳示例,此选项通常用于执行短期任务(例如测试或数据库备份)的前台容器。
设置容器名称 在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
有意义的名称对于在Docker网络中或运行Docker CLI命令时引用容器很有用。
发布Container Ports 默认情况下,如果未发布任何端口,则只能从容器内部访问容器中运行的进程。 发布端口意味着将容器端口映射到主机端口,以便这些端口可用于Docker外部的服务。 要发布端口,请使用-p选项,如下所示: -p host_ip:host_port:container_port/protocol 如果未指定host_ip,则默认为0.0.0.0。 如果未指定协议,则默认为TCP。 要发布多个端口,请使用多个-p选项。 要将容器中的TCP 80端口(nginx)映射到主机localhost接口上的8080端口,请运行: $ docker container run --name web_server -d -p 8080:80 nginx 您可以通过在浏览器中打开http://localhost:8080或在Docker主机上运行以下curl命令来验证端口是否已发布: $ curl -I http://localhost:8080 参考:在Debian 10 Linux系统上安装和使用Curl的方法。 输出如下所示: 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 我们没有使用$(pwd)命令来指定public_html目录的绝对路径,而是显示当前工作目录。 现在,如果在浏览器中输入http://localhost:8080,则应该看到index.html文件的内容,您还可以使用curl: $ curl http://localhost:8080 Testing Docker Volumes
交互式运行容器 处理bash之类的交互式过程时,请使用-i和-t选项启动容器。 -it选项使Docker将标准输入保留在终端上并分配一个伪tty: $ docker container run -it nginx /bin/bash 容器的Bash Shell将附加到终端,命令提示符将更改: root@1da70f1937f5:/# 现在,您可以与容器的shell进行交互并在其中运行任何命令。 在此示例中,我们提供了一个命令(/bin/bash)作为执行的docker run命令的参数,而不是Dockerfile中指定的命令。
结论 Docker是打包和部署应用程序的标准,并且是CI/CD、自动化和DevOps的重要组成部分。 docker container run命令用于创建和运行Docker容器。
相关主题 |