https://mp.weixin.qq.com/s?__biz=MzI4ODQ3NjE2OA==&mid=2247483890&idx=1&sn=2721f08624e6de33b3ae56be2b117006&chksm=ec3c9c95db4b1583529fc6542093367a97ffe6173c030d896f9ae9c5451db03ce879bdc6cfb1&scene=0&key=ce207f8008531ca887da8b19de76917f24b997afa14541abdaae289b68fb156f0d132c95d1d25ce4a58f522ee7362855474f6b981969896f05cdefaac47a05265af23cd619b2532ade2f615bc319096c&ascene=1&uin=MjgwMTEwNDQxNg%3D%3D&devicetype=Windows-QQBrowser&version=6103000b&lang=zh_CN&pass_ticket=MgvQRUu0nmoO%2BI9Uw2bH%2B4Wm%2Fkqz84N69GSIo%2F0hr5IfWaJBp8C9kN09S7gI99VP

原创 2018-03-08 周立 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:

  1. docker run java /bin/echo 'Hello World'

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

示例2:

  1. docker run -d -p 91:80 nginx

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

  1. -d                           # 后台运行

  2. -p 宿主机端口:容器端口         # 开放容器端口到宿主机端口

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

图12-3 Nginx首页

TIPS

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

列出容器[重要]

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

  1. CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                         NAMES

  2. 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选项自行指定。

命令格式:

  1. 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 显示总文件大小

示例:

  1. docker ps -n 5

  2. docker ps -a -q

停止容器[重要]

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

命令格式:

  1. docker stop [OPTIONS] CONTAINER [CONTAINER...]

参数:

Name, shorthand Default Description
--time,-t 10 强制杀死容器前等待的时间,单位是秒

示例:

  1. docker stop 784fd3b294d7

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

强制停止容器[重要]

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

命令格式:

  1. docker kill [OPTIONS] CONTAINER [CONTAINER...]

参数:

Name, shorthand Default Description
--signal,-s KILL 向容器发送一个信号

例如:

  1. docker kill 784fd3b294d7

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

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

命令格式:

  1. docker start [OPTIONS] CONTAINER [CONTAINER...]

参数:

Name, shorthand Default Description
--attach,-a false 连接STDOUT/STDERR并转发信号
--checkpoint   从该检查点还原
--checkpoint-dir   使用自定义的检查点存储目录
--detach-keys   覆盖断开容器的关键顺序
--interactive,-i false 连接容器的STDIN

例如:

  1. docker start 784fd3b294d7

重启容器[重要]

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

命令格式:

  1. docker restart [OPTIONS] CONTAINER [CONTAINER...]

参数:

Name, shorthand Default Description
--time,-t 10 关闭容器前等待的时间,单位是秒

进入容器[重要]

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

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

例如:

  1. docker attach 784fd3b294d7

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

② 使用 nsenter 进入容器

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

  1. docker inspect --format "{{.State.Pid}}" $CONTAINER_ID

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

  1. nsenter --target "$PID" --mount --uts --ipc --net --pid

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

  1. [root@localhost ~]# docker ps

  2. CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                         NAMES

  3. 784fd3b294d7        nginx               "nginx -g 'daemon off"   55 minutes ago      Up 3 minutes        443/tcp, 0.0.0.0:91->80/tcp   backstabbing_archimedes

  4. [root@localhost ~]# docker inspect --format "{{.State.Pid}}" 784fd3b294d7

  5. 95492

  6. [root@localhost ~]# nsenter --target 95492 --mount --uts --ipc --net --pid

  7. root@784fd3b294d7:/#

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

③ docker exec

  1. docker exec -it 容器id /bin/bash

删除容器[重要]

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

命令格式

  1. docker rm [OPTIONS] CONTAINER [CONTAINER...]

参数:

Name, shorthand Default Description
--force,-f false 通过SIGKILL信号强制删除正在运行中的容器
--link,-l false 删除容器间的网络连接
--volumes,-v false 删除与容器关联的卷

例1:删除指定容器。

  1. docker rm 784fd3b294d7

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

例2:删除所有的容器。

  1. docker rm -f $(docker ps -a -q)

导出容器

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

命令格式:

  1. docker export [OPTIONS] CONTAINER

参数:

Name, shorthand Default Description
--output,-o   将内容写到文件而非STDOUT

示例:

  1. docker export red_panda > latest.tar

  2. docker export --output="latest.tar" red_panda

导入容器

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

命令格式:

  1. docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

参数:

Name, shorthand Default Description
--change,-c   将Dockerfile指令应用到创建的镜像
--message,-m   为导入的镜像设置提交信息

示例:

  1. docker import nginx2.tar nginx

拓展阅读

  • Docker的网络:https://docs.docker.com/engine/userguide/networking/

  • Docker命令:https://docs.docker.com/engine/reference/commandline/docker/

Docker系列教程05 容器常用命令的更多相关文章

  1. Docker系列(7)- 常用命令(3) | 容器命令

    容器命令 说明: 有了镜像才可以创建容器:下载一个centos镜像进行练习,相当于在Linux里面再见一个Linux虚拟机 [root@localhost ~]# docker pull centos ...

  2. docker(三) 镜像和容器常用命令

    一.镜像操作 1.搜索镜像 可以直接在Docker Hub 直接搜索镜像,当然也可以使用命令来搜索. docker search 名称 docker search tomcat 2.拉取镜像 dock ...

  3. Docker系列(10)- 常用命令小结

    #橙色前面笔记已记录,黑色后面笔记将完善#勤加练习!!!attach Attach to a running container # 当前 shell 下 attach 连接指定运行镜像 build ...

  4. Docker系列(5)- 常用命令(1) | 帮助命令

    帮助命令 [root@localhost ~]# docker version #显示docker的版本信息 [root@localhost ~]# docker info #显示docker的系统信 ...

  5. Docker系列(6)- 常用命令(2) | 镜像命令

    准备工作 知道查看官方文档,官方文档描述的很详细,并且每一种类型.每一个命令的选项都有例子 会使用docker --help查看 镜像命令 docker images 查看所有本地主机上的镜像 [ro ...

  6. Docker入门教程(二)命令

    Docker入门教程(二)命令 [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第二篇,介绍了Docker的基本命令以及命令的用法和功能. 在Docker ...

  7. Spring 系列教程之容器的功能

    Spring 系列教程之容器的功能 经过前面几章的分析,相信大家已经对 Spring 中的容器功能有了简单的了解,在前面的章节中我们一直以 BeanFacotry 接口以及它的默认实现类 XmlBea ...

  8. docker学习笔记二:常用命令

    docker学习笔记二:常用命令 查看docker常用命令 docker --help 返回结果如下: 其中常用的命令如下: 1.image相关操作 展示所有的image: 删除image: rmi ...

  9. docker-管理容器常用命令

    1. docker-管理容器常用命令 2. docker管理容器常用命令 1)  docker ps 显示当前正在运行的容器 [root@test-1 ~]# docker ps CONTAINER ...

随机推荐

  1. 编写自己的composer项目

    编写自己的composer项目   composer的出现给php开发带来极大的便利, 配合phpunit的测试工具, 也可以更好的规范php开发. 尽管这些标准不是官方提供的, 但现在大部分的php ...

  2. Tomcat 目录结构以及基本配置

    1 Tomcat 目录层次结构 ① bin:存放启动和关闭tomcat 的脚本文件② conf: 存放配置文件 server.xml:该文件用于配置和server 相关的信息,比如tomcat 启动端 ...

  3. Windows 下面 redis 发布为服务的官方方法

    除了 NSSM 之外 另外一种方式 感觉还是很好用的 redis-server --service-install redis.windows.conf --loglevel verbose 感觉也可 ...

  4. Oracle查询数据库编码

    select userenv('language') from dual

  5. (自用 )npm --save和--save-dev区别

    https://blog.csdn.net/playboyanta123/article/details/78349034(原文) 目前大多数基于vue的项目都是用vue-cli 创建的.当创建项目完 ...

  6. Day 4-6 xml处理

    xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不过,古时候,在json还没诞生的黑暗年代,大家只能选择用xml呀,至今很多传统公司如金融行业的很多系统的 ...

  7. 部署wp 的时候遭遇的google字体问题

    国内WP CDN问题昨天下午到今天中午 总算解决了WORDPRESS 在 谷歌字体被枪毙之后带来的一系列问题..在天朝想当个 安静的美男子设计师也是那么烦恼的事情捏! 解决办法将所有的带fonts.g ...

  8. python数据结构与算法学习自修第二天【时间复杂度与大O表示法】

    #!/usr/bin/env python #! _*_ coding:UTF-8 _*_ from Queue import Queue import time que = Queue() time ...

  9. qtp自动化测试-条件语句 if select case

    1 if 语句 if  condition  then end if If condition Then   [statements] [ElseIf condition-n Then   [else ...

  10. delphi中 dataset容易出错的地方

    最近写delphi项目,用到的数据集中的dataset,一直修改exception啊,写下过程. 在对数据集进行任何操作之前,首先要打开数据集.要打开数据集,可以把Active属性设为True,例如: ...