安装 Docker 并运行 Hello World 容器

Docker安装指南:https://docs.docker.com/engine/install/

  1. docker run busybox echo "Hello world"

背后的原理: 图 2.1展示了执行 docker run 令之后发生的事情。首先 Docker 会检查busybox:latest 镜像是否己经存在于本机。如果没有, Docker 会从 http://docker.io 的 Docker 镜像中心拉取镜像。镜像下载到本机之后 Docker 基于这个镜像创建一个容器并在容器中运行命令。echo 命令打印文字到标准输出流,然后进程终止,容器停止运行。

image.png

Dockerfile构建镜像的过程

image.png
提示:不要在构建目录中包含任何不需要的文件, 这样会减慢构建的速度——尤其当Docker守护进程运行在一个远瑞机器的时候。(Docker客户端和守护进程不要求在同一台机器上)

镜像分层

如果创建了多个基于相同基础镜像的镜像,所有组成基础镜像的分层只会被存储一次。拉取镜像的时候,Docker 会独立下载每一层。 一些分层可能已经存储在机器上了,所以 Docker 只会下载未被存储的分层。
构建镜像时,Dockerfile 中每一条单独的指令都会创建一个新层。
构建完成时,新的镜像会存储在本地。

图 2.3 展示了这个过程,同时也展示另外一个叫 other:latest 的镜像如何与我们构建的镜像共享同一层 Node.js 镜像。

image.png

容器内的进程运行在主机操作系统上

实验:docker exec -it 登录容器后执行ps aux,发现在容器中运行的进程,也主机操作系统上也能找到,但是PID不同。
结论:这证明了运行在容器中的进程是运行在主机操作系统上的。如果你足够敏锐,会发现进程的 PID 在容器中与主机上不同。容器使用独立的PID Linux命名空间,完全独立于主机的进程树。