docker深入2-部署docker-ce服务的最佳实践

2017/11/9


注1:凡是本人整理的,开源产品相关的文章中,标题党写明了“最佳实践”的文章,要特别注意,本人总结的文字并未涉及安全方面的指导,请参考官方的指导教程,因为安全是一个有深度的话题,且安全是相对而言的,并不是个容易的话题。

注2:本人整理的所有知识库,基础内容占比多,因为在学习的路上,总是容易卡在某个点上,希望能对路过的你有点帮助即可,力求普及知识,而非教科书一般的按步骤12345来指导即可上生产环境,请自行总结,走出自己的路,加油。


一、目标
部署 docker-ce 服务的最佳实践(持续更新)

部分童鞋对 docker 的版本不太理解,以下是我记忆中的事,docker 版本大致是这样演变的:
1.11 时代是 swarmkit
1.12 开始出现了 swarm mode
1.13 后 docker 变成 EE 和 CE 版本,CE 对应的是社区版本,并将社区的 docker 重命名为 moby,版本跳跃为:v17.03

当前最新版本是:v17.06


二、服务部署
1、安装
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
yum -y install docker-ce
systemctl enable docker



2、配置
1)推荐配置如下内容
存储驱动
日志
阿里云registry-mirrors(可选,适用于访问 docker hub 很慢的场景,使用注意事项请参考后续FAQ#1)


2)目录
有多种方式来配置 docker 服务。
建议使用下述配置文件:
/etc/docker/daemon.json

linux上默认没有配置文件,需要创建:
mkdir -p /etc/docker



3、配置实例
1)overlay 驱动 
tee /etc/docker/daemon.json <<-'EOF' 
{
  "graph": "/mnt/docker-data",
  "storage-driver": "overlay",
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
}
EOF

注:针对 自定义存储目录,使用 "graph": "/mnt/docker-data"
参考:https://docs.docker.com/engine/admin/systemd/#start-automatically-at-system-boot




2)overlay2 驱动(针对centos,使用 "overlay2.override_kernel_check=true" )
tee /etc/docker/daemon.json <<-'EOF' 
{
  "graph": "/mnt/docker-data",
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
}
EOF

注:针对 centos 系统和 docker-ce 版本,使用 "overlay2.override_kernel_check=true" 
参考:https://docs.docker.com/engine/userguide/storagedriver/overlayfs-driver/#configure-docker-with-the-overlay-or-overlay2-storage-driver





3)devicemapper 驱动
yum install -y yum-utils device-mapper-persistent-data lvm2

tee /etc/docker/daemon.json <<-'EOF' 
{
  "storage-driver": "devicemapper",
  "storage-opts": [
    "dm.directlvm_device=/dev/sdb",
    "dm.thinp_percent=95",
    "dm.thinp_metapercent=1",
    "dm.thinp_autoextend_threshold=80",
    "dm.thinp_autoextend_percent=20",
    "dm.directlvm_device_force=false" 
  ],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
}
EOF

注:针对 让 docker 服务来管理 (自动创建) DIRECT-LVM 设备,使用 dm 相关的参数
参考:https://docs.docker.com/engine/userguide/storagedriver/device-mapper-driver/#configure-direct-lvm-mode-for-production



4、重启服务
systemctl daemon-reload
systemctl restart docker



三、FAQ
1、使用阿里云 Docker Hub 镜像站点和 latest 这个 tag 带来的问题
注1:拉取镜像时,不推荐使用 latest 这个 tag 来拉取,否则可能拉取到旧的镜像,建议指定明确的版本号。

问题描述
我的 docker node 使用了 Docker Hub 镜像站点(https://cr.console.aliyun.com/#/accelerator ),然后发现一个问题:

~]$ sudo cat /etc/docker/daemon.json |grep registry
  "registry-mirrors": ["https://xxx.mirror.aliyuncs.com"]

~]$ sudo docker pull opera443399/whoami
Using default tag: latest
latest: Pulling from opera443399/whoami
Digest: sha256:4119c322c2d9f007af8751394a63ed6809158bc39456e6aa60ab84e7a21429c5
Status: Image is up to date for opera443399/whoami:latest

~]$ sudo docker p_w_picpaths |grep opera
opera443399/whoami         latest              160ed79ce86f        5 weeks ago         4.13MB
实际上,拉取到的是一个旧的版本 160ed79ce86f 对比下面这个节点的状态(没有使用加速镜像)

~]$ sudo docker pull opera443399/whoami
Using default tag: latest
latest: Pulling from opera443399/whoami
Digest: sha256:a05120d9fe157868f7f1c8b842cc860fb58665d74cadaf8eb7d6091af626cccd
Status: Downloaded newer p_w_picpath for opera443399/whoami:latest

~]$ sudo docker p_w_picpaths |grep opera
opera443399/whoami          0.9                  a7878d3e0fdf        20 hours ago        4.13MB
opera443399/whoami          latest               a7878d3e0fdf        20 hours ago        4.13MB
opera443399/whoami          0.8                  ae008c956c53        3 weeks ago         4.13MB
opera443399/whoami          0.7                  160ed79ce86f        5 weeks ago         4.13MB
小结:使用阿里云的容器服务中的 Docker Hub 镜像站点后,缓存的 latest 这个 tag 是旧版本,且过了好几天还没有刷新


已经试图反馈给阿里云,如果进展,后续更新。

https://github.com/aliyun/aliyun-cli/issues/36





zyxw、参考
1、official docs
https://docs.docker.com/engine/admin/systemd/
https://docs.docker.com/engine/userguide/storagedriver

2、aliyun docs
https://yq.aliyun.com/articles/110806
https://cr.console.aliyun.com/#/accelerator