UDN-企业互联网技术人气社区

板块导航

浏览  : 1186
回复  : 0

[教程技巧] 使用Squid3搭建Docker镜像下载代理

[复制链接]
小辫儿的头像 楼主
发表于 2016-6-18 14:36:22 | 显示全部楼层 |阅读模式
  Squid3是啥

  先说点废话,什么是代理服务器,以及为什么要使用代理服务器。

  在国内下载DockerHub的镜像老慢了有木有,时不时还超时出错有木有,gcr.io仓库访问不了有木有,换用国内仓库又要修改镜像名字,各种麻烦有木有。

  (注:gcr.io是由Google CloudPlatform提供的Docker镜像仓库)

  现在都云时代了,在搞一个在海外的云主机多容易的事,阿里云、首都在线早都有国外机房了。可是总不能把所有主机都往国外搬,毕竟业务还在国内,远水不解近渴。

  代理服务器就可以让处在国内的服务器在需要的时候通过一条通往外界的管道,间接的下载到国内无法下载或者下载不稳定的镜像。
2.png

  代理服务器依据使用的方式可以分成正向代理、反向代理、透明代理等许多种,依据代理的协议又可以分为HTTP、HTTPS、FTP、SOCK5等众多类型。Docker能够使用的是HTTP和HTTPS的代理服务,而Squid是目前功能最完善且支持HTTPS正向代理的开源服务软件。

  Squid目前的版本已经更新到3.x版本,因此称为Squid3,以示与前两版本的区别。

  光速搭建Squid服务

  怎样搭建Squid服务器最快呢?当然是使用Docker啦。我们可以直接使用『sameersbn/squid』这个镜像,这个镜像是DockerHub上Squid镜像中依然在持续更新的、文档比较全面的、下载次数比较多的,在我写这篇文章时候,这个镜像的最新版本是『3.3.8-14』。

  这个镜像的最简单使用方法是:
  1. Docker run -d -p 3128:3128 sameersbn/squid:3.3.8-14
复制代码

  这样一个内网使用的HTTP的代理就搭建完成了。Squid默认使用3128作为代理端口,可以将内网主机的代理服务设置为这个代理服务器的IP地址加上3128端口,试一试能否访问因特网的资源。如果遇到问题,可以进入容器内查看一下/var/log/squid3/cache.log这个文件看看是不是有什么错误。

  配置Squid代理服务

  默认的sameersbn/squid镜像只允许来自内网IP段的主机使用代理,并且包含了许多用于其他协议的配置内容。

  然而使用Docker的服务器可能也有非内网IP段的地址,因此需要对Squid3配置进行适当的删改。以下为一个最简单的配置内容:
  1. acl all src 0.0.0.0/0.0.0.0 acl SSL_ports port 443
  2. acl Safe_ports port 80 # http
  3. acl Safe_ports port 443 # https
  4. acl CONNECT method CONNECT
  5. http_access allow all
  6. http_port 3128
  7. visible_hostname proxy
复制代码

  将这个文件保存为『squid.conf』,保存到主机的/etc/squid3目录,然后让我们使用这个配置文件来启动Squid的容器。

  由于Squid服务本身具备代理和缓存两个功能(缓存的功能这里不做详细介绍,可以问度娘自行搜索),建议为这个容器设置一下CPU、内存和磁盘的限额,防止极端情况下会把主机资源耗尽。为了方便调试和使用,可以给容器起一个容易记忆的名字,顺便将Squid的缓存和日志目录也挂载到主机上。完整命令如下:
  1. Docker run -d --name squid3 --restart=always \ -m 1G \
  2. -p 3128:3128 \
  3. -v /etc/squid3/squid.conf:/etc/squid3/squid.conf \
  4. -v /var/log/squid3:/var/log/squid3 \
  5. -v /var/spool/squid3:/var/spool/squid3 \
  6. sameersbn/squid:3.3.8-14
复制代码

  现在这个代理服务就可以作为通用的HTTP和HTTPS代理了!

  让Docker使用Squid下载镜像

  那么最后一个问题就是,怎样让Docker去使用这个代理服务器呢?

  首先我们需要找到Docker启动的配置,以Systemd管理的系统为例,首先使用『systemctl show Docker』命令找到Docker服务的配置文件。例如:
  1. $ systemctl show Docker | grep /lib/systemd/system/Docker.service FragmentPath=/lib/systemd/system/Docker.service
复制代码

  然后编辑这个文件:
  1. $ sudo vim /lib/systemd/system/Docker.service
复制代码

  在[Unit]段加上下面这两行:
  1. Environment=HTTP_PROXY={SERVER_IP}:3128
  2. Environment=HTTPS_PROXY={SERVER_IP}:3128
复制代码

  (注:将{SERVER_IP}替换为实际的服务器IP地址)

  然后重新启动Docker服务就可以啦~
  1. $ sudo systemctl daemon-reload
  2. $ sudo restart Docker
复制代码

  现在可以尝试一下获取一个gcr.io仓库的镜像,是不是就已经可以了呢 ^^:
复制代码

原文作者:佚名 来源:http://dockone.io/article/1380

相关帖子

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部