运维人员角度看docker

从运维的角度需要掌握 Docker 的镜像下载、运行新的容器、登录新容器、在容器内运行命令,以及销毁容器。

安装 Docker 的时候,涉及两个主要组件:Docker 客户端和 Docker daemon(有时也被称为“服务端”或者“引擎”)。

daemon 实现了 Docker 引擎的 API。

使用 Linux 默认安装时,客户端与 daemon 之间的通信是通过本地 IPC/UNIX Socket 完成的(/var/run/docker.sock);在 Windows 上是通过名为 npipe:./pipe/docker_engine 的管道(pipe)完成的。

可以使用docker version命令来检测客户端和服务端是否都已经成功运行,并且可以互相通信。

如果能成功获取来自客户端和服务端的响应,那么可以继续后面的操作。

如果在使用 Linux 的时候,服务端返回了异常响应,则可尝试在命令的前面加上 sudo 如:sudo docker version。

如果加上 sudo 之后命令正常运行,那么需要将当前用户加入到 docker 用户组,或者给所有的命令都加上 sudo 前缀。


镜像
Docker 镜像可以理解为一个包含了 OS 文件系统和应用的对象。

如果实际操作过,就会认为与虚拟机模板类似。虚拟机模板本质上是处于关机状态的虚拟机。

在 Docker 世界中,镜像实际上等价于未运行的容器。如果作为一名开发者,则可以将镜像比作类(Class)。

在 Docker 主机上运行docker image ls命令。

如果运行命令环境是刚完成 Docker 安装的主机,或者是 Play With Docker,那么 Docker 主机中应当没有任何镜像。

在 Docker 主机上获取镜像的操作被称为拉取(pulling)。如果使用 Linux,那么会拉取 ubuntu:latest 镜像;如果使用 Windows,则会拉取 microsoft/powershell:nanoserver 镜像。

拉取命令:docker image pull ubuntu:latest

镜像包含了基础操作系统,以及应用程序运行所需的代码和依赖包。刚才拉取的 ubuntu 镜像有一个精简版的 Ubuntu Linux 文件系统,其中包含部分 Ubuntu 常用工具。

而 Windows 示例中拉取的 microsoft/powershell 镜像,则包含了带有 PowerShell 的 Windows Nano Server 操作系统。

如果拉取了如 nginx 或者 microsoft/iis 这样的应用容器,就会得到一个包含操作系统的镜像,并且在镜像中还包括了运行 Nginx 或 IIS 所需的代码。

重要的是,Docker 的每个镜像都有自己的唯一 ID。用户可以通过引用镜像的 ID 或名称来使用镜像。

如果选择使用镜像 ID,通常只需要输入 ID 开头的几个字符即可——因为 ID 是唯一的,Docker 知道用户想引用的具体镜像是哪个。

 

容器
如果已经拥有一个拉取到本地的镜像,可以使用docker container run命令从镜像来启动容器。

在 Linux 中启动容器的命令如下。

$ docker container run -it ubuntu:latest /bin/bash

仔细观察上面命令的输出内容,会注意到每个实例中的提示符都发生了变化。这是因为 -it 参数会将 Shell 切换到容器终端——现在已经位于容器内部了!

接下来分析一下 docker container run 命令。docker container run 告诉 Docker daemon 启动新的容器。其中 -it 参数告诉 Docker 开启容器的交互模式并将当前的 Shell 连接到容器终端。接下来,命令告诉 Docker,用户想基于 ubuntu:latest 镜像启动容器(如果用户使用 Windows,则是基于 microsoft/powershell:nanoserver 镜像)。最后,命令告诉 Docker,用户想要在容器内部运行哪个进程。对于 Linux 示例来说是运行 Bash Shell,对于 Windows 示例来说则是运行 PowerShell。

在容器内部运行ps命令查看当前正在运行的全部进程。

Linux 容器中仅包含两个进程。

    PID 1:代表 /bin/bash 进程,该进程是通过 docker container run 命令来通知容器运行的。
    PID 9:代表 ps -elf 进程,查看当前运行中进程所使用的命令/程序。

命令输出中展示的ps -elf进程存在一定的误导,因为这个程序在ps命令退出后就结束了。这意味着容器内长期运行的进程其实只有 /bin/bash。

按 Ctrl-PQ 组合键,可以在退出容器的同时还保持容器运行。这样 Shell 就会返回到 Docker 主机终端。可以通过查看 Shell 提示符来确认。

返回到 Docker 主机的 Shell 提示符,再次运行ps命令。

在容器内部使用该操作可以退出当前容器,但不会杀死容器进程。

可以通过docker container ls命令查看系统内全部处于运行状态的容器。

上述的输出显示只有一个运行中的容器。这就是前面示例中创建的那个容器。输出中有该容器,证明了容器在退出后依然是运行的。可以看到这个进程是 6min 之前创建的,并且一直在运行。

连接到运行中的容器

执行docker container exec命令,可以将 Shell 连接到一个运行中的容器终端。因为之前示例中的容器仍在运行,所以下面的示例会创建到该容器的新连接。

在示例中,将本地 Shell 连接到容器是通过 -it 参数实现的。本例中使用名称引用容器,并且告诉 Docker 运行 Bash Shell(在 Windows 示例中是 PowerShell)。

使用十六进制 ID 的方式也可以很容易地引用具体容器。

再次使用 Ctrl-PQ 组合键退出容器。

Shell 提示符应当退回到 Docker 主机中。

再次运行docker container ls命令来确认容器仍处于运行状态。

通过docker container stop和docker container rm命令来停止并杀死容器。切记需要将示例中的名称 /ID 替换为自己的容器对应的名称和 ID。 

通过运行docker container ls命令,并指定 -a 参数来确认容器已经被成功删除。添加 -a 的作用是让 Docker 列出所有容器,甚至包括那些处于停止状态的。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值