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