Anguiao

使用代理构建 Docker 镜像
构建 Docker 镜像时,使用的软件源常常是国外的(比如各大发行版的默认源,以及 GitHub 等代码托管平台)...
扫描右侧二维码阅读全文
10
2019/01

使用代理构建 Docker 镜像

构建 Docker 镜像时,使用的软件源常常是国外的(比如各大发行版的默认源,以及 GitHub 等代码托管平台)。因此在构建过程中,可能需要在下载上花费大量时间。

我们可以换用国内的镜像源(比如 TUNAUSTC 等等)来加速下载,但是往往不是所有的软件源都有镜像。为了彻底解决这一问题,我们可以使用代理来加速下载。本文介绍如何在构建 Docker 镜像的过程中使用代理。

方案一:修改 Docker 全局配置

如同官方文档所述,我们可以通过修改 Docker 全局配置文件(通常位于~/.docker/config.json),让 Docker 通过 HTTP 代理访问网络。参考的配置文件如下:

{
 "proxies":
 {
   "default":
   {
     "httpProxy": "http://127.0.0.1:3001",
     "noProxy": "*.test.example.com,.example2.com"
   }
 }
}

在修改配置文件后启动的容器,都会使用默认的 HTTP 代理。

方案二:使用构建参数

修改配置文件是个一劳永逸的方法,但是修改配置文件的方式会影响到本机所有的容器。而大多数情况下,我们只需要在构建过程中使用代理。通过在构建镜像时添加构建参数,可以避免额外的影响。而构建参数又有两种使用方式。

1. 在 Dockerfile 中硬编码

例如,我们要让 HTTP 和 HTTPS 连接使用代理,可以在 Dockerfile 中添加 ARG,即构建参数。ARG 和 ENV 的效果相似,与之不同的是,ARG 只存在于构建镜像时,在运行容器时不会存在这些变量。

FROM debian:stretch-slim

ARG http_proxy=http://172.21.0.9:8118
ARG https_proxy=http://172.21.0.9:8118

2. 使用 --build-arg

在 Dockerfile 中硬编码,虽然可以解决问题,但是降低了 Dockerfile 代码的通用性。在与其他人交流代码、或者网络环境变化时,就需要修改 Dockerfile,很不方便。Docker 也很贴心的为我们准备了 --build-arg 。例如,我们可以在构建时这样写:

docker build -t anguiao/nginx-brotli . --build-arg http_proxy=http://172.21.0.9:8118 --build-arg https_proxy=http://172.21.0.9:8118

不仅是 docker build 时可以使用 --build-arg,在 docker-compose build 时,我们也可以使用:

docker-compose build --build-arg http_proxy=http://172.21.0.9:8118 --build-arg https_proxy=http://172.21.0.9:8118

注意:在写代理地址时,不可写成 127.0.0.1 或者 localhost,应使用宿主机的 IP。我这里使用的是宿主机的内网 IP,可根据网络环境进行适当的改动。

最后修改:2019 年 01 月 12 日 06 : 44 PM
如果觉得我的文章对你有用,请随意赞赏

发表评论