docker in docker测试docker的proxy功能
docker in docker是什么?
顾名思义,docker in docker就是在docker容器中运行docker服务端。这种技术通常用于CI/CD流水线中,因为它可以提供一个干净的环境来运行构建和测试。例如,如果您正在使用Jenkins作为CI/CD工具,您可以使用DinD来运行构建和测试,而无需在Jenkins服务器上安装Docker。这样可以避免与Jenkins服务器上的其他应用程序发生冲突。
使用DinD时,需要注意的是,它会增加容器的复杂性,并且可能会导致性能下降。此外,由于容器内部运行的是另一个容器,因此可能会出现一些安全问题。
本篇中用DinD来完成对docker proxy功能的验证。
为什么docker要使用代理?
Docker使用代理的原因有很多,其中一些原因包括:
- 访问公司私有化部署的镜像仓库,对网络环境有限制。
- 对于一些公共仓库,下载速度很慢,通过代理实现加速上传与下载。
在本测试环境中,docker容器所在环境与目标docker 镜像仓库是网络隔离的,同时两个网络之间可以通过一个http proxy来进行通信。
如何配置proxy代理?
官方说明:https://docs.docker.com/config/daemon/systemd/#httphttps-proxy
- 运行dockerindocker
1
docker run -it --privileged --rm --entrypoint="sh" docker:24.0.1-dind
- 设置proxy, 有两种方法进行配置(docker 23.0以版本)
- 通过/etc/docker/daemon.json
1
2
3
4
5
6
7{
"proxies": {
"http-proxy": "http://proxy.example.com:3128",
"https-proxy": "https://proxy.example.com:3129",
"no-proxy": "*.test.example.com,.example.org,127.0.0.0/8"
}
} - 设置代理环境变量
1
2/ # export http_proxy=http://proxy.example.com:3128
/ # export https_proxy=https://proxy.example.com:3129
- 正常使用docker命令,docker pull/push 均会使用该proxy与镜像仓库交互
1
2
3
4/ # dockerd &
/ # docker pull docker:24.01-dind
/ # docker tag docker:24.01-dind remote-repo.app/docker:24.01-dind
/ # docker push remote-repo.app/docker:24.01-dind
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Michael Blog!
评论