Docker 是一个开源的应用容器引擎,使用 Docker 可以将我们的应用程序和其依赖环境打包到一起进行移植、发布,我们就不需要在一台新的机器上为应用程序去安装、配置所需的依赖包、环境变量等。Docker 主要有以下几部分组成:
-
Docker 客户端,负责与 Docker 守护进行通信;
-
Docker 守护进程,负责管理 Docker 镜像和 Docker 容器;
-
Docker 镜像,负责产生 Docket 容器实例;
-
Docker 容器,包含了应用程序和其所依赖环境。
-
Centos Docker 安装 {#title-0} ==============================
官网安装地址: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 重新运行。
- 使用镜像创建容器 {#title-1} ======================
我们使用下面的命令,从仓库中下载一个 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