前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker运行命令示例

Docker运行命令示例

作者头像
入门笔记
发布2022-06-02 19:04:33
1.1K0
发布2022-06-02 19:04:33
举报
文章被收录于专栏:入门小站入门小站

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

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

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

Docker运行命令

docker run命令采用以下形式:

代码语言:javascript
复制
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

从中创建容器的镜像名称是docker run命令的唯一必需参数。如果本地系统上不存在该映像,则将其从注册表中拉出。

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

从版本1.13开始,Docker CLI进行了重组,并且所有命令都被分组在与之交互的对象下。

由于run命令与容器交互,因此它现在是docker container的子命令。新命令的语法如下:

代码语言:javascript
复制
docker container run [OPTIONS] IMAGE [COMMAND] [ARG...]

仍支持旧的1.13以前的语法。在后台,docker run命令是docker container run的别名。鼓励用户使用新的命令语法。

所有docker container run选项的列表可在 Docker文档页面上找到。

在前台中运行容器

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

代码语言:javascript
复制
docker container run nginx

Nginx进程的输出将显示在你的终端上。由于没有与Web服务器的连接,因此终端为空。

要停止容器,请按CTRL+C终止正在运行的Nginx进程。

以分离(后台)模式运行容器

要在退出终端会话时保持容器运行,请以分离模式启动容器。这类似于在后台运行 Linux进程。

使用-d选项启动独立的容器:

代码语言:javascript
复制
docker container run -d nginx
代码语言:javascript
复制
050e72d8567a3ec1e66370350b0069ab5219614f9701f63fcf02e8c8689f04fa

根进程终止后,分离的容器将停止。

你可以使用 docker container ls 命令列出正在运行的容器。

要将终端连接到分离的容器根进程,请使用 docker container attach令。

在退出后移除容器

默认情况下,当容器退出时,其文件系统将保留在主机系统上。

--rm选项告诉docker run命令在容器自动退出时将其删除:

代码语言:javascript
复制
docker container run --rm nginx

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

设置容器名称

在Docker中,每个容器都通过UUID和名称来标识。默认情况下,如果未显式设置,则容器名称由Docker守护程序自动生成。

使用--name选项为容器分配自定义名称:

代码语言:javascript
复制
docker container run -d --name my_nginx nginx

容器名称必须唯一。如果你尝试使用相同的名称启动另一个容器,则会收到类似以下错误:

代码语言:javascript
复制
docker: Error response from daemon: Conflict. The container name "/my_nginx" is already in use by container "..c". You have to remove (or rename) that container to be able to reuse that name.

运行

代码语言:javascript
复制
docker container ls -a

列出所有容器,然后查看它们的名称:

docker container ls

代码语言:javascript
复制
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选项,如下所示:

代码语言:javascript
复制
-p host_ip:host_port:container_port/protocol
  • 如果未指定host_ip,则默认为0.0.0.0
  • 如果未指定protocol,则默认为TCP。
  • 发布多个端口,请使用多个-p选项。

要将容器中的TCP端口80(nginx)映射到主机localhost接口上的端口8080,请运行:

代码语言:javascript
复制
docker container run --name web_server -d -p 8080:80 nginx

你可以通过在浏览器中打开

代码语言:javascript
复制
http://localhost:8080

或在Docker主机上运行以下 curl 命令来验证端口是否已发布:

代码语言:javascript
复制
curl -I http://localhost:8080

输出将如下所示:

代码语言:javascript
复制
HTTP/1 200 OK
Server: nginx/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卷是使数据持久化并在多个容器之间共享的首选方法。

要创建和管理卷,请使用-p选项,如下所示:

代码语言:javascript
复制
-v host_src:container_dest:options
  • host_src可以是主机或命名卷上文件或目录的绝对路径。
  • container_dest是容器上文件或目录的绝对路径。
  • 选项可以是rw(读写)和ro(只读)。如果未指定选项,则默认为rw

为解释它的工作原理,让我们在主机上创建目录 ,并在其中放置index.html文件:

代码语言:javascript
复制
mkdir public_html
echo "入门小站" > public_html/index.html

接下来,将public_html目录安装到容器的/usr/share/nginx/html中:

代码语言:javascript
复制
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 http://localhost:8080

代码语言:javascript
复制
入门小站

交互式运行容器

处理bash之类的交互过程时,请使用-i-t选项启动容器。

-it选项告诉Docker将标准输入保留在终端上并分配一个伪tty:

代码语言:javascript
复制
docker container run -it nginx /bin/bash

容器的Bash外壳将连接到终端,命令提示符将更改:

代码语言:javascript
复制
root@1da70f1937f5:/#

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

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

结论

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

docker container run命令用于创建和运行Docker容器。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-02-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 入门小站 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Docker运行命令
  • 在前台中运行容器
  • 以分离(后台)模式运行容器
  • 在退出后移除容器
  • 设置容器名称
  • 发布容器端口
  • 共享数据(安装量)
  • 交互式运行容器
  • 结论
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档