在这篇文章中,我们将学习 8 个基本的 Docker 容器命令,它们操控着 Docker 容器的基本活动,例如运行run、列举list、停止stop、查看历史纪录logs、删除delete 等等。

利用这 8 个命令可以学习 Docker 容器的基本管理方式。这是一个为 Docker 初学者准备的,带有示范命令输出的指南。

在这篇文章中,我们将带你学习 8 个基本的 Docker 容器命令,它们操控着 Docker 容器的基本活动,例如 运行(run)、 列举()(list)、 停止()(stop)、查看历史纪录(logs)、 删除()(delete) 等等。如果你对 Docker 的概念很陌生,推荐你看看我们的 介绍指南,来了解 Docker 的基本内容以及 如何 在 Linux 上安装 Docker。现在让我们赶快进入要了解的命令:

如何运行 Docker 容器?

众所周知,Docker 容器只是一个运行于宿主操作系统(host OS)上的应用进程,所以你需要一个镜像来运行它。Docker 镜像以进程的方式运行时就叫做 Docker 容器。你可以加载本地 Docker 镜像,也可以从 Docker Hub 上下载。Docker Hub是一个提供公有和私有镜像来进行拉取(pull)操作的集中仓库。官方的 Docker Hub 位于 hub.docker.com。当你指示 Docker 引擎运行容器时,它会首先搜索本地镜像,如果没有找到,它会从 Docker Hub 上拉取相应的镜像。

让我们运行一个 Apacheweb 服务器的 Docker 镜像,比如 httpd 进程。你需要运行 dockercontainer run 命令。旧的命令为 docker run,但后来 Docker 添加了子命令部分,所以新版本支持下列命令:

1.     root@kerneltalks # docker container run -d -p 80:80 httpd
2.     Unable to find image 'httpd:latest' locally
3.     latest:Pullingfrom library/httpd
4.     3d77ce4481b1:Pull complete
5.     73674f4d9403:Pull complete
6.     d266646f40bd:Pull complete
7.     ce7b0dda0c9f:Pull complete
8.     01729050d692:Pull complete
9.     014246127c67:Pull complete
10.   7cd2e04cf570:Pull complete
11.   Digest: sha256:f4610c3a1a7da35072870625733fd0384515f7e912c6223d4a48c6eb749a8617
12.   Status:Downloaded newer image for httpd:latest
13.   c46f2e9e4690f5c28ee7ad508559ceee0160ac3e2b1688a61561ce9f7d99d682

Docker 的 run 命令将镜像名作为强制参数,另外还有很多可选参数。常用的参数有:

·        -d:从当前 shell 脱离容器

·        -p X:Y:绑定容器的端口 Y 到宿主机的端口 X

·        --name:命名你的容器。如果未指定,它将被赋予随机生成的名字

·        -e:当启动容器时传递环境编辑及其值

通过以上输出你可以看到,我们将 httpd 作为镜像名来运行容器。接着,本地镜像没有找到,Docker 引擎从 DockerHub 拉取了它。注意,它下载了镜像 httpd:latest,其中 :后面跟着版本号。如果你需要运行特定版本的容器,你可以在镜像名后面注明版本名。如果不提供版本名,Docker 引擎会自动拉取最新的版本。

输出的最后一行显示了你新运行的 httpd 容器的唯一 ID。

如何列出所有运行中的 Docker 容器?

现在,你的容器已经运行起来了,你可能想要确认这一点,或者你想要列出你的机器上运行的所有容器。你可以使用 docker container ls 命令。在旧的 Docker 版本中,对应的命令为 docker ps

1.     root@kerneltalks # docker container ls
2.     CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS              PORTS                NAMES
3.     c46f2e9e4690        httpd               "httpd-foreground"   11 minutes ago      Up11 minutes       0.0.0.0:80->80/tcp   cranky_cori

列出的结果是按列显示的。每一列的值分别为:

1.   ContainerID :一开始的几个字符对应你的容器的唯一 ID

2.   Image :你运行容器的镜像名

3.   Command :容器启动后运行的命令

4.   Created :创建时间

5.   Status :容器当前状态

6.   Ports :与宿主端口相连接的端口信息

7.   Names :容器名(如果你没有命名你的容器,那么会随机创建)

如何查看 Docker 容器的历史纪录?

在第一步我们使用了 -d 参数来将容器,在它一开始运行的时候,就从当前的 shell 中脱离出来。在这种情况下,我们不知道容器里面发生了什么。所以为了查看容器的历史纪录,Docker 提供了 logs 命令。它采用容器名称或 ID 作为参数。

1.     root@kerneltalks # docker container logs cranky_cori
2.     AH00558: httpd:Couldnot reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
3.     AH00558: httpd: Could not reliably determine the server's fully qualified domain name,using172.17.0.2.Set the 'ServerName' directive globally to suppress this message
4.     [ThuMay3118:35:07.3011582018][mpm_event:notice][pid 1:tid 139734285989760] AH00489:Apache/2.4.33(Unix) configured -- resuming normal operations
5.     [ThuMay3118:35:07.3051532018][core:notice][pid 1:tid 139734285989760] AH00094:Command line:'httpd -D FOREGROUND'

这里我使用了容器名称作为参数。你可以看到在我们的 httpd 容器中与 Apache 相关的历史纪录。

如何确定 Docker 容器的进程?

容器是一个使用宿主资源来运行的进程。这样,你可以在宿主系统的进程表中定位容器的进程。让我们在宿主系统上确定容器进程。

Docker 使用著名的 top 命令作为子命令的名称,来查看容器产生的进程。它采用容器的名称或 ID 作为参数。在旧版本的 Docker 中,只可运行 docker top 命令。在新版本中,dockertop 和 docker container top 命令都可以生效。

1.     root@kerneltalks # docker container top  cranky_cori
2.     UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
3.     root                15702               15690               0                   18:35               ?                   00:00:00            httpd -DFOREGROUND
4.     bin                 15729               15702               0                   18:35               ?                   00:00:00            httpd -DFOREGROUND
5.     bin                 15730               15702               0                   18:35               ?                   00:00:00            httpd -DFOREGROUND
6.     bin                 15731               15702               0                   18:35               ?                   00:00:00            httpd -DFOREGROUND
7.      
8.     root@kerneltalks #ps-ef |grep-i 15702
9.     root     1570215690  018:35?        00:00:00 httpd -DFOREGROUND
10.   bin      1572915702  018:35?        00:00:00 httpd -DFOREGROUND
11.   bin      1573015702  018:35?        00:00:00 httpd -DFOREGROUND
12.   bin      1573115702  018:35?        00:00:00 httpd -DFOREGROUND
13.   root     1599315957  018:59 pts/0    00:00:00grep--color=auto-i 15702

在第一个输出中,列出了容器产生的进程的列表。它包含了所有细节,包括用户号(uid)、进程号(pid),父进程号(ppid)、开始时间、命令,等等。这里所有的进程号你都可以在宿主的进程表里搜索到。这就是我们在第二个命令里做得。这证明了容器确实是宿主系统中的进程。

如何停止 Docker 容器?

只需要 stop 命令!同样,它采用容器名称或 ID 作为参数。

1.     root@kerneltalks # docker container stop cranky_cori
2.     cranky_cori

如何列出停止的或不活动的 Docker 容器?

现在我们停止了我们的容器,这时如果我们使用 ls 命令,它将不会出现在列表中。

1.     root@kerneltalks # docker container ls
2.     CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

所以,在这种情况下,如果想要查看停止的或不活动的容器,你需要在 ls 命令里同时使用 -a 参数。

1.     root@kerneltalks # docker container ls-a
2.     CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS                     PORTS               NAMES
3.     c46f2e9e4690        httpd               "httpd-foreground"   33 minutes ago      Exited(0)2 minutes ago                       cranky_cori

有了 -a 参数,现在我们可以查看已停止的容器。注意这些容器的状态被标注为 已退出(exited)。既然容器只是一个进程,那么用“退出”比“停止”更合适!

如何(重新)启动 Docker 容器?

现在,我们来启动这个已停止的容器。这和运行一个容器有所区别。当你运行一个容器时,你将启动一个全新的容器。当你启动一个容器时,你将开始一个已经停止并保存了当时运行状态的容器。它将以停止时的状态重新开始运行。

1.     root@kerneltalks #  docker container start c46f2e9e4690
2.     c46f2e9e4690
3.      
4.     root@kerneltalks # docker container ls-a
5.     CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS              PORTS                NAMES
6.     c46f2e9e4690        httpd               "httpd-foreground"   35 minutes ago      Up8 seconds        0.0.0.0:80->80/tcp   cranky_cori

如何移除 Docker 容器?

我们使用 rm 命令来移除容器。你不可以移除运行中的容器。移除之前需要先停止容器。你可以使用 -f 参数搭配 rm 命令来强制移除容器,但并不推荐这么做。

1.     root@kerneltalks # docker container rm cranky_cori
2.     cranky_cori
3.     root@kerneltalks # docker container ls-a
4.     CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

你看,一旦移除了容器,即使再使用 ls -a 命令也查看不到容器了。

8个基本的Docker容器管理命令相关推荐

  1. 【转】八个基本的 Docker 容器管理命令

    八个基本的 Docker 容器管理命令 https://www.iteblog.com/archives/2382.html?from=like 在本文中,我将介绍八个基本的 Docker 容器命令, ...

  2. 八个基本的 Docker 容器管理命令

    本文英文原文:https://kerneltalks.com/virtualization/8-basic-docker-container-management-commands/ 中文翻译:htt ...

  3. 浅谈Docker:DockerLinux安装,镜像管理命令,镜像制作命令,容器管理命令,数据卷,DockerFile,Docker-compose

    什么是Docker? Docker 概念 • Docker 是一个开源的应用容器引擎 • 诞生于 2013 年初,基于 Go 语言实现, dotCloud 公司出品(后改名为Docker Inc) • ...

  4. Docker容器管理总结

    Docker容器管理总结 一.Docker容器理解 1.Docker的核心概念 2.容器的运行状态 二.Dockerfile理解 三.容器使用及操作 1.进入容器空间内 2.后台运行容器 3.前台运行 ...

  5. 美团点评Docker容器管理平台

    本文是郑坤根据第14期美团点评技术沙龙"你不知道的美团云"演讲内容整理而成,已发表在<程序员>杂志2017年1月刊. 美团点评容器平台简介 本文介绍美团点评的Docke ...

  6. docker容器管理及网络管理

    防火墙规则-- INPUT 主要用于主机防火墙,设置规则屏蔽处理进入本机的数据包 示例:禁止10.180.100.141这个机器访问我本机的web服务 iptables -t filter -A IN ...

  7. 创建docker容器的命令

    创建docker容器的命令: 将账号加入到docker group(这样才有权限调用docker相关命令): $ sudo gpasswd -a ming docker 创建本地image的容器: $ ...

  8. docker容器管理 php,基于Docker的PHP开发环境

    [编者的话]本文作者是Geoffrey,他是一个PHP的Web开发者,喜欢DevOps和Docker.本文主要介绍了如何使用Docker构建PHP的开发环境,文中作者也探讨了构建基于Docker的开发 ...

  9. Docker容器管理

    创建容器命令格式: Usage: docker create [OPTIONS] IMAGE [COMMAND] [ARG...] Usage: docker run [OPTIONS] IMAGE ...

最新文章

  1. django基本操作
  2. 架构师必然是孤独的领袖
  3. win7配置远程连接oracle数据库吗,win7环境下配置oracle数据库的方法有哪些?
  4. WampServer无法直接打开myprojects的解决方法
  5. 【Python】高级函数
  6. 通过软考高项的艰辛历程
  7. 台电p10hd拆解_台电X19HD玩家拆机报告
  8. 计算机找不到ie浏览器,IE浏览器不见了怎么办?找回IE浏览器的方法
  9. MeshBaker优化原理
  10. 300ETF期权和50ETF期权的区别
  11. 元白:欲买桂花同载酒,终不似,少年游。
  12. ASCII与Unicode编码消息写文件浅析
  13. dig 域名信息查询
  14. Mysql分区表概述、分区类型、分区管理
  15. 怎么把两个PDF文件合并一起
  16. Zookeeper基础笔记——从小白到入门
  17. 平面点云面积计算的两种方式
  18. 基于云架构监控摄像头直播运营简介
  19. GUI programming with wxPython 之 XRC
  20. React - 路由 lazyLoad 的使用(路由懒加载)

热门文章

  1. 化学工程与装备杂志化学工程与装备杂志社化学工程与装备编辑部2022年第10期目录
  2. 独特的荧光染料——mFluor Green 620 琥珀酰亚胺酯
  3. html里的标签的概念,HTML相关概念的介绍及HTML5结构和标签
  4. vue 使用vuex实现消息通知提示
  5. 【visum工作笔记】之五
  6. win10文件资源管理器崩溃,打不开
  7. mysql日期减后取月_mysql加减时间-函数-时间加减
  8. 什么是全栈工程师,为什么全栈开发用Python,Python web全栈开发到底有多高薪?
  9. macos big sur新体验:越来越像 iOS,17 个功能亮点非常实用
  10. Ubuntu转换H264,X264,MP4