使用场景
为了不污染宿主主机的环境 ,包含image and container,需要使用一个dind作为docker server ,而其它的镜像以它为docker deamon
docker deamon :
参考官网
https://hub.docker.com/_/docker?tab=description
$ docker run --privileged --name some-docker -d \
--network some-network --network-alias docker \
-e DOCKER_TLS_CERTDIR=/certs \
-v some-docker-certs-ca:/certs/ca \
-v some-docker-certs-client:/certs/client \
docker:dind
其中最主要 的有 network , 最坑的是,这个实例docker 是可以当作 hosts name 来用。 并且不能用some-docker来当成 hosts name来用。
然后 volume : some-docker-certs-client也很重要,因为客户端 的docker实例要共享 使用它。
docker client:
docker run -itd --name cent5 --env DOCKER_HOST=tcp://docker:2376 --env DOCKER_CERT_PATH=/certs/client -v some-docker-certs-client:/certs/client:ro --network some-network --env DOCKER_TLS_VERIFY=1 centos:7
其中 --env DOCKER_TLS_VERIFY=1 非常重要,不然就会出现 :
[root@46db8429a2e1 /]# docker ps
Error response from daemon: Client sent an HTTP request to an HTTPS server.
实验结果
(1) 按 docker client 命令,从一个基本的centos镜像 做出一个实例
(2) yum install docker-client-latest 仅安装 客户端 。 因为deamon 由--env DOCKER_HOST=tcp://docker:2376 来指定 了。
docker pull redis
(3) 在client 里,我们看到
(3) daemon 里
docker exec -it some-docker docker ps
项目实践:
说明 :cent5里作为最终的实践容器,docker cp /usr/bin/docker cent5:/usr/bin/ 就可以让它拥有跟daemon比较相似版本的客户端 。
因为dind最近18.09.7的就是18.09.9,这个在官网的tag 里查询。
让 daemon与client 拥有一样的数据目录 ,是必要的,因为容器里的应用docker ,如redis ,它要引用的目录 是我们在脚本里写的,它将在client容器里生成;但docker却生成在daemon里,它将只能引用daemon里的目录 ,所以必须把这两者看成一体,这样共同 引用宿主主机的目录 却是必要 的了。
docker run --privileged --name some-docker -d \
--network some-network --network-alias docker \
-e DOCKER_TLS_CERTDIR=/certs \
-v some-docker-certs-ca:/certs/ca \
-v some-docker-certs-client:/certs/client \
-v /home/dualven/dockerindocker:/docker \
-v /home/dualven/dockerindocker/localtime:/etc/localtime \
docker:18.09.9-dind
docker run -itd --name cent5 --env DOCKER_HOST=tcp://docker:2376 --env DOCKER_CERT_PATH=/certs/client -v some-docker-certs-client:/certs/client:ro --network some-network --env DOCKER_TLS_VERIFY=1 -v /home/dualven/dockerindocker:/docker -v /home/dualven/dockerindocker/localtime:/etc/localtime centos:7
精确的脚本记录于:http://gitlab.gbcom.com.cn/dualvenDoc/dinddoc.git (带端口等等)