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 docker pull opera443399/whoamiUsing 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 p_w_picpaths |grep operaopera443399/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





转载于:https://blog.51cto.com/nosmoking/1958702