【亿码酷站-编程开发教程】收集全网优质教程及源码资源!

全网优质软件开发、平面设计等教程及精品源码资源一站可得,www.ymkuzhan.com!

背景:

在编写 CI 时通过声明镜像作为 job 的执行环境,每个 job 都在一个纯净的容器中执行。

有时,我们需要一个 docker 容器环境来执行 docker build、docker push 等操作。查看官方的 docker 镜像,我们发现存在两个主要的版本:docker:latestdocker:dind 和 docker:git。

(推荐教程:docker教程

docker:dind

该镜像包含 Docker 客户端(命令行工具)和 Docker daemon。

通过 docker history docker:dind 命令我们发现 docker:dind 是在 docker:latest 基础上又安装了 Docker daemon,并且最后两个构建命令为:

IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
66dc2d45749a        8 weeks ago         /bin/sh -c #(nop)  CMD []                       0B                  
<missing>           8 weeks ago         /bin/sh -c #(nop)  ENTRYPOINT ["dockerd-entr…   0B                  
...

在 run 该镜像时,不能指定 sh CMD 参数,dockerd-entrypoint.sh 命令接收到该参数并不会启动 Docker daemon。想要正确启动容器里的 Docker daemon 并且进入容器需要分步进行:

$ docker run -d --name dind --privileged docker:dind # 启动容器
$ docker logs -f dind # 查看启动日志
$ docker exec -it dind sh # 进入容器

启动 docker:dind 容器时,参数 –privileged 必须加上,否则 Docker daemon 启动时会报错。

docker:latest

该镜像只包含 Docker 客户端,需要有 Docker daemon 支持,可以使用 docker:dind 的,也可以挂载宿主机的 /var/run/docker.sock。

该镜像启动不需要 –privileged 参数。

通过 docker history docker:latest 命令发现 CMD 默认为 sh:

81f5749c9058        3 months ago        /bin/sh -c #(nop)  CMD ["sh"]                   0B                  
<missing>           3 months ago        /bin/sh -c #(nop)  ENTRYPOINT ["docker-entry…   0B                  
...

启动方式一:挂载宿主机 sock 文件

$ docker run -it --rm -v /var/run/docker.sock:/var/run/docker.sock docker:latest

启动方式二:配合 docker:dind

将 docker:dind 和 docker:latest 放入相同网络,并且指定 dind 容器在该网络中的别名为 docker,因为 latest 容器中默认设定的 daemon host 就叫 docker。

另外需要注意 证书 问题,新版本 Docker 客户端与 Docker daemon 通讯需要 TLS 证书保证通讯安全,docker:dind 容器会生成证书到环境变量 DOCKER_TLS_CERTDIR 指定的目录,需将证书挂载并提供给 docker:latest 容器使用。

$ 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
$ docker run --rm --network some-network 
    -e DOCKER_TLS_CERTDIR=/certs 
    -v some-docker-certs-client:/certs/client:ro 
    docker:latest

docker:git

docker:git 是包含了 git 命令的 docker:latest,方便 CI 时使用 Git。

docker:latest和docker:dind有什么区别
—–文章转载自PHP中文网如有侵权请联系admin#tyuanma.cn删除

了解一些 提高前端开发效率的 CSS 属性选择器

云服务器推荐

本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。

最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。 若排除这种情况,可在对应资源底部留言,或联络我们。

对于会员专享、整站源码、程序插件、网站模板、网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。

如果您已经成功付款但是网站没有弹出成功提示,请联系站长提供付款信息为您处理

源码素材属于虚拟商品,具有可复制性,可传播性,一旦授予,不接受任何形式的退款、换货要求。请您在购买获取之前确认好 是您所需要的资源