首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

apt-cacher-ng

注意

  • 如果您不喜欢 sudo,请参阅授予非 root 访问权限
  • 如果你通过 TCP 使用 macOS 或 docker,那么你不应该使用 sudo。

当你有多个 Docker 服务器,或者构建不能使用 Docker 构建缓存的不相关的 Docker 容器时,为你的包提供一个缓存代理会很有用。这个容器使得任何包的第二次下载几乎是即时的。

使用以下 Dockerfile:

代码语言:javascript
复制
#
# Build: docker build -t apt-cacher .
# Run: docker run -d -p 3142:3142 --name apt-cacher-run apt-cacher
#
# and then you can run containers with:
#   docker run -t -i --rm -e http_proxy http://dockerhost:3142/ debian bash
#
# Here, `dockerhost` is the IP address or FQDN of a host running the Docker daemon
# which acts as an APT proxy server.
FROM        ubuntu

VOLUME      ["/var/cache/apt-cacher-ng"]
RUN     apt-get update && apt-get install -y apt-cacher-ng

EXPOSE      3142
CMD     chmod 777 /var/cache/apt-cacher-ng && /etc/init.d/apt-cacher-ng start && tail -f /var/log/apt-cacher-ng/*

使用以下命令构建图像:

代码语言:javascript
复制
$ docker build -t eg_apt_cacher_ng .

然后运行它,将暴露的端口映射到主机上的端口

代码语言:javascript
复制
$ docker run -d -p 3142:3142 --name test_apt_cacher_ng eg_apt_cacher_ng

要查看tailed默认命令中的日志文件,可以使用:

代码语言:javascript
复制
$ docker logs -f test_apt_cacher_ng

要让您的基于 Debian 的容器使用代理,您有以下选项。请注意,您必须使用运行test_apt_cacher_ng容器的主机的 IP 地址或 FQDN 进行替换dockerhost

1. 添加一个 apt 代理设置 echo 'Acquire::http { Proxy "http://dockerhost:3142"; };' >> /etc/apt/conf.d/01proxy

2. 设置环境变量:http_proxy=http://dockerhost:3142/

3. 改变你的sources.list条目从http://dockerhost:3142/开始

4. 使用--link将基于 Debian 的容器链接到 APT 代理容器

5. 使用基于 Debian 的容器创建 APT 代理容器的自定义网络。

选项1将设置安全地注入本地通用基础版本的 apt 配置中:

代码语言:javascript
复制
FROM ubuntu
RUN  echo 'Acquire::http { Proxy "http://dockerhost:3142"; };' >> /etc/apt/apt.conf.d/01proxy
RUN apt-get update && apt-get install -y vim git

# docker build -t my_ubuntu .

选项2是不错的测试,但会破坏其他 HTTP 客户端,其服从http_proxy,比如curlwget和其他:

代码语言:javascript
复制
$ docker run --rm -t -i -e http_proxy=http://dockerhost:3142/ debian bash

选项3是最不便携的,但有时您可能需要这样做,并且您也可以从Dockerfile中选择。

选项4使用以下命令将 Debian 容器链接到代理服务器:

代码语言:javascript
复制
$ docker run -i -t --link test_apt_cacher_ng:apt_proxy -e http_proxy=http://apt_proxy:3142/ debian bash

选项5创建了一个 APT 代理服务器和基于 Debian 的容器的自定义网络:

代码语言:javascript
复制
$ docker network create mynetwork
$ docker run -d -p 3142:3142 --network=mynetwork --name test_apt_cacher_ng eg_apt_cacher_ng
$ docker run --rm -it --network=mynetwork -e http_proxy=http://test_apt_cacher_ng:3142/ debian bash

Apt-cacher-ng 有一些工具可以让您管理存储库,并且可以通过利用VOLUME指令和我们构建的用于运行服务的映像来使用它们:

代码语言:javascript
复制
$ docker run --rm -t -i --volumes-from test_apt_cacher_ng eg_apt_cacher_ng bash

root@f38c87f2a42d:/# /usr/lib/apt-cacher-ng/distkill.pl
Scanning /var/cache/apt-cacher-ng, please wait...
Found distributions:
bla, taggedcount: 0
     1. precise-security (36 index files)
     2. wheezy (25 index files)
     3. precise-updates (36 index files)
     4. precise (36 index files)
     5. wheezy-updates (18 index files)

Found architectures:
     6. amd64 (36 index files)
     7. i386 (24 index files)

WARNING: The removal action may wipe out whole directories containing
         index files. Select d to see detailed list.

(Number nn: tag distribution or architecture nn; 0: exit; d: show details; r: remove tagged; q: quit): q

最后,通过停止并取出容器,然后移除图像,在测试后清理。

代码语言:javascript
复制
$ docker stop test_apt_cacher_ng
$ docker rm test_apt_cacher_ng
$ docker rmi eg_apt_cacher_ng

扫码关注腾讯云开发者

领取腾讯云代金券