dind 实践

使用场景

 为了不污染宿主主机的环境 ,包含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  (带端口等等) 

猜你喜欢

转载自blog.csdn.net/dualvencsdn/article/details/112707654
今日推荐