Docker Hello World

Docker 是一个开源的应用容器引擎,使用 Docker 可以将我们的应用程序和其依赖环境打包到一起进行移植、发布,我们就不需要在一台新的机器上为应用程序去安装、配置所需的依赖包、环境变量等。Docker 主要有以下几部分组成:

  1. Docker 客户端,负责与 Docker 守护进行通信;
  2. Docker 守护进程,负责管理 Docker 镜像和 Docker 容器;
  3. Docker 镜像,负责产生 Docket 容器实例;
  4. Docker 容器,包含了应用程序和其所依赖环境。

1. Centos Docker 安装

官网安装地址:https://docs.docker.com/engine/install/centos/

# 安装 yum-utils
sudo yum install -y yum-utils

# 配置镜像源, 我们使用的是阿里云的源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast

# 安装 Docker
yum install docker-ce docker-ce-cli containerd.io

安装命令执行成功之后,使用下面命令来管理Docker 守护进程:

# 启动 Docker 守护进程
systemctl start docker

# 重启 Docker 守护进程
systemctl restart docker

# 停止 Docker 守护进程
systemctl stop docker

当停止 docket 时,可能会出现以下的警告:

Warning: Stopping docker.service, but it can still be activated by: docker.socket

关于原因可查看链接:https://stackoverflow.com/questions/47489631/warning-stopping-docker-service-but-it-can-still-be-activated-by-docker-socke

大致原因可理解为,我们停止了 docker 服务,但是并没有停止 docker.socket,当试图连接 docker.socket 时,会导致 docker 重新运行。

2. 使用镜像创建容器

我们使用下面的命令,从仓库中下载一个 Ubuntu 18.04 镜像:

# 指定命令
docker pull ubuntu:18.04

# 输出内容
18.04: Pulling from library/ubuntu
284055322776: Pull complete
Digest: sha256:0fedbd5bd9fb72089c7bbca476949e10593cebed9b1fb9edf5b79dbbacddd7d6
Status: Downloaded newer image for ubuntu:18.04
docker.io/library/ubuntu:18.04

接下来,使用下面的命令查看本地已有的镜像:

# 指定命令
docker images

# 输出内容
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
ubuntu       18.04     5a214d77f5d7   6 months ago   63.1MB
  1. REPOSITORY 表示镜像来源的仓库
  2. TAG 表示该镜像的版本
  3. IMAGE ID 表示镜像唯一的 ID
  4. CREATED 表示镜像创建的时间
  5. SIZE 表示镜像的大小

从 SIZE 属性可以看到,该 ubuntu 镜像只有 63.1M 大小,实际上该镜像是完整的 Ubuntu 镜像的最小化版本。

我们使用下面的命令使用该镜像创建一个容器实例,并运行:

# 使用 ID 为 5a214d77f5d7 镜像实例化出一个容器实例
# 可以使用 docker ps 命令来查看正在运行的容器实例
docker run 5a214d77f5d7

当直接执行上面的命令,容器内由于没有执行的任务,所以该容器实例很快就结束了。我们可以使用下面的命令开启一个任务。

# 使用 ID 为 5a214d77f5d7 镜像实例化出一个容器实例并运行
# it 参数表示以交互式的方式运行容器实例
# /bin/bash 表示容器中启动的 shell 
# 退出容器的交互式终端可以使用 exit 命令,此时容器实例也将结束
docker run -it 5a214d77f5d7 /bin/bash

我们接下来使用上面的命令,以交互式的方式进入容器,并安装 Python,并运行一个简单的 Python 程序。

# 我们使用 ubuntu 镜像,安装 python 可以使用 apt 命令直接安装
apt update
apt install python3.7

接下来,我们在容器中构建一个 Python 程序文件,其代码如下:

import time

if __name__ == '__main__':

    for _ in range(10):
        time.sleep(1)
        print('hello world')

现在我们的容器中,已经新增了一些内容,比如安装了 Python、创建了新的文件,我们就可以把这个容器重新打包成新的镜像,之后就可以使用该镜像直接运行我们的 Python 程序。使用下面的命令:

docker commit -a 'Edward Meng' -m 'Test' 4b2eaef07821 myubuntu:1.0
  1. docker commit 命令可以将一个容器保存为一个镜像
  2. a 选项指定镜像作者
  3. m 选项指定镜像的说明文字
  4. 4b2eaef07821 表示容器编号
  5. myubuntu:1.0 表示镜像的名字以及 TAG

此时再执行 docker images 命令,我们可以看到如下内容:

myubuntu     1.0       6fc3a8fed88b   About a minute ago   187MB
ubuntu       18.04     5a214d77f5d7   6 months ago         63.1MB

接下来,我们使用 myubuntu 镜像实例化一个容器对象,并执行里面的 Python 程序:

# 指定命令
docker run 6fc3a8fed88b /usr/bin/python3.7 /root/demo.py

# 输出结果:
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world

未经允许不得转载:一亩三分地 » Docker Hello World