Docker 是一个开源的应用容器引擎,使用 Docker 可以将我们的应用程序和其依赖环境打包到一起进行移植、发布,我们就不需要在一台新的机器上为应用程序去安装、配置所需的依赖包、环境变量等。Docker 主要有以下几部分组成:
- Docker 客户端,负责与 Docker 守护进行通信;
- Docker 守护进程,负责管理 Docker 镜像和 Docker 容器;
- Docker 镜像,负责产生 Docket 容器实例;
- 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
- REPOSITORY 表示镜像来源的仓库
- TAG 表示该镜像的版本
- IMAGE ID 表示镜像唯一的 ID
- CREATED 表示镜像创建的时间
- 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
- docker commit 命令可以将一个容器保存为一个镜像
- a 选项指定镜像作者
- m 选项指定镜像的说明文字
- 4b2eaef07821 表示容器编号
- 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