前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker系列教程05-容器常用命令

Docker系列教程05-容器常用命令

作者头像
用户1516716
发布2018-04-03 15:03:02
9200
发布2018-04-03 15:03:02
举报
文章被收录于专栏:A周立SpringCloud

本节我们来讨论Docker容器的常用命令。

新建并启动容器[重要]

使用以下 docker run 命令即可新建并启动一个容器。该命令是我们最常用的命令了,它有很多选项,下面笔者列举一些常用的选项。

① -d选项:表示后台运行

② -P选项:随机端口映射

③ -p选项:指定端口映射,有以下四种格式。

ip:hostPort:containerPort

ip::containerPort

hostPort:containerPort

containerPort

④ --network选项:指定网络模式,该选项有以下可选参数:

--network=bridge: 默认选项,表示连接到默认的网桥。

--network=host:容器使用宿主机的网络。

--network=container:NAMEorID:告诉Docker让新建的容器使用已有容器的网络配置。

--network=none:不配置该容器的网络,用户可自定义网络配置。

示例1:

代码语言:javascript
复制
docker run java /bin/echo 'Hello World'

这样终端会打印Hello World的字样,跟在本地直接执行 /bin/echo'Hello World' 一样。

示例2:

代码语言:javascript
复制
docker run -d -p 91:80 nginx

这样就能启动一个Nginx容器。在本例中,我们为docker run添加了两个参数,含义如下:

代码语言:javascript
复制
-d                           # 后台运行
-p 宿主机端口:容器端口         # 开放容器端口到宿主机端口

访问http://Docker宿主机IP:91/ ,将会看到如图12-3的界面:

图12-3 Nginx首页

TIPS

需要注意的是,使用docker run命令创建容器时,会先检查本地是否存在指定镜像。如果本地不存在该名称的镜像,Docker就会自动从Docker Hub下载镜像并启动一个Docker容器。

列出容器[重要]

使用 docker ps 命令即可列出运行中的容器。执行该命令后,可看到类似于如下的表格。

代码语言:javascript
复制
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                         NAMES
784fd3b294d7        nginx               "nginx -g 'daemon off"   20 minutes ago      Up 2 seconds        443/tcp, 0.0.0.0:91->80/tcp   backstabbing_archimedes

如需列出所有容器(包括已停止的容器),可使用-a参数。

该表格包含了七列,含义如下:

① CONTAINER_ID:表示容器ID。

② IMAGE:表示镜像名称。

③ COMMAND:表示启动容器时运行的命令。

④ CREATED:表示容器的创建时间。

⑤ STATUS:表示容器运行的状态。Up表示运行中,Exited表示已停止。

⑥ PORTS:表示容器对外的端口号。

⑦ NAMES:表示容器名称。该名称默认由Docker自动生成,也可使用docker run命令的--name选项自行指定。

命令格式:

代码语言:javascript
复制
docker ps [OPTIONS]

参数:

Name, shorthand

Default

Description

--all,-a

false

列出所有容器,包括未运行的容器,默认只展示运行的容器

--filter,-f

根据条件过滤显示内容

--format

通过Go语言模板文件展示镜像

--last,-n

-1

显示最近创建n个容器(包含所有状态)

--latest,-l

false

显示最近创建的容器(包含所有状态)

--no-trunc

false

不截断输出

--quiet,-q

false

静默模式,只展示容器的编号

--size,-s

false

显示总文件大小

示例:

代码语言:javascript
复制
docker ps -n 5
docker ps -a -q

停止容器[重要]

使用 docker stop 命令,即可停止容器。

命令格式:

代码语言:javascript
复制
docker stop [OPTIONS] CONTAINER [CONTAINER...]

参数:

Name, shorthand

Default

Description

--time,-t

10

强制杀死容器前等待的时间,单位是秒

示例:

代码语言:javascript
复制
docker stop 784fd3b294d7

其中 784fd3b294d7 是容器ID,当然也可使用 docker stop容器名称 来停止指定容器。

强制停止容器[重要]

可使用 docker kill 命令停止一个或更多运行着的容器。

命令格式:

代码语言:javascript
复制
docker kill [OPTIONS] CONTAINER [CONTAINER...]

参数:

Name, shorthand

Default

Description

--signal,-s

KILL

向容器发送一个信号

例如:

代码语言:javascript
复制
docker kill 784fd3b294d7

启动已停止的容器[重要]

使用 docker run 命令,即可新建并启动一个容器。对于已停止的容器,可使用 docker start 命令来启动。

命令格式:

代码语言:javascript
复制
docker start [OPTIONS] CONTAINER [CONTAINER...]

参数:

Name, shorthand

Default

Description

--attach,-a

false

连接STDOUT/STDERR并转发信号

--checkpoint

从该检查点还原

--checkpoint-dir

使用自定义的检查点存储目录

--detach-keys

覆盖断开容器的关键顺序

--interactive,-i

false

连接容器的STDIN

例如:

代码语言:javascript
复制
docker start 784fd3b294d7

重启容器[重要]

可使用 docker restart 命令来重启容器。该命令实际上是先执行了 docker stop 命令,然后执行了 docker start 命令。

命令格式:

代码语言:javascript
复制
docker restart [OPTIONS] CONTAINER [CONTAINER...]

参数:

Name, shorthand

Default

Description

--time,-t

10

关闭容器前等待的时间,单位是秒

进入容器[重要]

某场景下,我们可能需要进入运行中的容器。

① 使用 docker attach 命令进入容器。

例如:

代码语言:javascript
复制
docker attach 784fd3b294d7

很多场景下,使用 docker attach 命令并不方便。当多个窗口同时attach到同一个容器时,所有窗口都会同步显示。同理,如果某个窗口发生阻塞,其他窗口也无法执行操作。

② 使用 nsenter 进入容器

nsenter工具包含在util-linux 2.23或更高版本中。为了连接到容器,我们需要找到容器第一个进程的PID,可通过以下命令获取:

代码语言:javascript
复制
docker inspect --format "{{.State.Pid}}" $CONTAINER_ID

获得PID后,就可使用nsenter命令进入容器了:

代码语言:javascript
复制
nsenter --target "$PID" --mount --uts --ipc --net --pid

下面给出一个完整的例子:

代码语言:javascript
复制
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                         NAMES
784fd3b294d7        nginx               "nginx -g 'daemon off"   55 minutes ago      Up 3 minutes        443/tcp, 0.0.0.0:91->80/tcp   backstabbing_archimedes
[root@localhost ~]# docker inspect --format "{{.State.Pid}}" 784fd3b294d7
95492
[root@localhost ~]# nsenter --target 95492 --mount --uts --ipc --net --pid
root@784fd3b294d7:/#

读者也可将以上两条命令封装成一个Shell,从而简化进入容器的过程。

③ docker exec

代码语言:javascript
复制
docker exec -it 容器id /bin/bash

删除容器[重要]

使用 docker rm 命令即可删除指定容器。

命令格式

代码语言:javascript
复制
docker rm [OPTIONS] CONTAINER [CONTAINER...]

参数:

Name, shorthand

Default

Description

--force,-f

false

通过SIGKILL信号强制删除正在运行中的容器

--link,-l

false

删除容器间的网络连接

--volumes,-v

false

删除与容器关联的卷

例1:删除指定容器。

代码语言:javascript
复制
docker rm 784fd3b294d7

该命令只能删除已停止的容器,如需删除正在运行的容器,可使用-f参数。

例2:删除所有的容器。

代码语言:javascript
复制
docker rm -f $(docker ps -a -q)

导出容器

将容器导出成一个压缩包文件。

命令格式:

代码语言:javascript
复制
docker export [OPTIONS] CONTAINER

参数:

Name, shorthand

Default

Description

--output,-o

将内容写到文件而非STDOUT

示例:

代码语言:javascript
复制
docker export red_panda > latest.tar
docker export --output="latest.tar" red_panda

导入容器

使用 dockerimport 命令即可从归档文件导入内容并创建镜像。

命令格式:

代码语言:javascript
复制
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

参数:

Name, shorthand

Default

Description

--change,-c

将Dockerfile指令应用到创建的镜像

--message,-m

为导入的镜像设置提交信息

示例:

代码语言:javascript
复制
docker import nginx2.tar nginx

拓展阅读

  • Docker的网络:https://docs.docker.com/engine/userguide/networking/
  • Docker命令:https://docs.docker.com/engine/reference/commandline/docker/
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-03-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 A周立SpringCloud 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 新建并启动容器[重要]
  • 列出容器[重要]
  • 停止容器[重要]
  • 强制停止容器[重要]
  • 启动已停止的容器[重要]
  • 重启容器[重要]
  • 进入容器[重要]
  • 删除容器[重要]
  • 导出容器
  • 导入容器
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档