很多佬说了如何pull镜像,我来说一下如何Build镜像并Push吧

1. Pull镜像
已经有很多佬说了我就不重复了,贴几个链接吧

注意:下文所有的代理都换成自己的,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

15 Likes

感谢分享,学习了:+1:

感谢分享

还是弄个透明网关舒服, 原来该怎么写还是怎么写

太强了!

坛除我佬

我现在都用 github action build ,速度还快

1 Like

牛逼 涨姿势了

感谢分享,学习一下