1. Pull镜像
已经有很多佬说了我就不重复了,贴几个链接吧
- 总结国内还能用的 [Docker.io mirrors]镜像
- 利用 Cloudflare Workers 自建 Docker 镜像
- 又发掘一个CF的新用法,利用Worker构建Docker Registry Mirror
- 一两天前拉dockerhub拉不动,原来不止我遇到了这个问题
注意:下文所有的代理都换成自己的,http://127.0.0.1:7890 只是一个示例
2. Build单架构镜像并Push
单个架构的镜像编译只需要设置Docker全局代理就可以了
2.1 新建启动配置文件
nano /etc/systemd/system/docker.service.d/http-proxy.conf
输入内容如下:
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:7890"
Environment="HTTPS_PROXY=http://127.0.0.1:7890"
Environment="NO_PROXY=localhost,127.0.0.1,*.xyz,*.cn,*.daocloud.io,*.aliyuncs.com,*.tencentyun.com,*.baidubce.com,*.dockerproxy.com"
2.2 使配置生效并重启Docker
sudo systemctl daemon-reload
sudo systemctl restart docker
这时候就可以在国内环境编译Docker并推送到DockerHub了
docker build \
--build-arg HTTP_PROXY=http://127.0.0.1:7890 \
--build-arg HTTPS_PROXY=http://127.0.0.1:7890 \
-t myproject/xxxxxx:latest --push .
# 也可以拆分为2步:build + push
docker build \
--build-arg HTTP_PROXY=http://127.0.0.1:7890 \
--build-arg HTTPS_PROXY=http://127.0.0.1:7890 \
-t myproject/xxxxxx:latest --load .
docker push myproject/xxxxxx:latest
注意: build-arg不可以忽略,构建镜像的时候拉取其他依赖要用
3. Build多架构镜像并Push
多架构的镜像编译需要使用buildx, 设置Docker的全局代理是没有用的,需要改一下步骤:
3.1 生成一个使用代理的buildx实例
docker buildx create \
--name proxy-builder \
--driver-opt env.http_proxy=http://127.0.0.1:7890,env.https_proxy=http://127.0.0.1:7890 \
--use
检查实例是否正确生成 docker buildx inspect proxy-builder
3.2 使用buildx编译多架构镜像
docker buildx build \
--platform linux/amd64,linux/arm64 \
--build-arg HTTP_PROXY=http://127.0.0.1:7890 \
--build-arg HTTPS_PROXY=http://127.0.0.1:7890 \
-t myproject/xxxxxx:latest --push .
3.3 如何切换为其他的buildx实例
先查看有哪些buildx实例:docker buildx ls
可以看到上面有个我之前创建的普通实例:normal-builder
备注:实例后面的*号表示正在使用的buildx实例
切换为normal-builder实例:docker buildx use normal-builder