LoginSignup
23
21

More than 5 years have passed since last update.

Dockerでforward proxyサーバー(squid)を立てる using Dockerfile

Posted at

やること

環境

  • Virtualbox 4.3.10
    • 作業PCはMac (Mavericks)
  • Vagrant 1.4.3
    • 1.5以上は色々とハマるので1.4.3に落とした...
  • Docker 0.9.0

作業ログ

Vagrantfile作成

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "centos65_86"
  config.vm.box_url = "https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box"

  config.vm.define :vmcentdocker do |vmcentdocker|
    vmcentdocker.vm.hostname = "vmcentdocker"
    vmcentdocker.vm.network :private_network, ip: "192.168.56.110"

    vmcentdocker.vm.provider :virtualbox do |vb|
      vb.customize ["modifyvm", :id, "--memory", 768]
    end

   vmcentdocker.vm.provision :docker do |d|
     d.pull_images "centos"
   end
  end
end

vagrant upでVM起動

% vagrant up
:
:
[vmcentdocker] Setting hostname...
[vmcentdocker] Configuring and enabling network interfaces...
[vmcentdocker] Mounting shared folders...
[vmcentdocker] -- /vagrant
[vmcentdocker] Running provisioner: docker...
[vmcentdocker] Installing Docker (latest) onto machine...
[vmcentdocker] Pulling Docker images...
[vmcentdocker] -- Image: centos

vagrant sshでVMにログイン、マウントしたDIRに移動

% vagrant ssh

$ cd /vagrant

Dockerfile作成

$ vi Dockerfile
FROM centos:latest
MAINTAINER jpshadowapps

RUN yum -y update

# squidをインストール
RUN yum -y install squid

# 実行ポートを公開
EXPOSE 3128

# squidのサービスを開始し、tail -f を実行してコンテナを起動したままにする
CMD /etc/init.d/squid start && tail -10f /var/log/squid/access.log

※squidをフォアグラウンド起動させたい場合は?

  • 設定ファイルを置き換える。具体的には。。。
  • yum install squidした際のデフォルトの/etc/init.d/squid では、変数定義ファイル/etc/sysconfig/squidを別途読み込んでいる
  • このファイルでsquid起動時のオプション変数SQUID_OPTSが定義されている
  • コンテナのsquidをフォアグラウンドで起動して、docker runをデタッチモードで実行する ことによって「squid起動状態のコンテナ」を立ち上げたいので、このオプション変数を独自設定した/etc/sysconfig/squidを用意して、DockerfileでADD [src] [dst]して置き換える
    • -Nオプションを設定する
$ vi add_files/etc/sysconfig/squid
SQUID_OPTS="-N"

SQUID_SHUTDOWN_TIMEOUT=100
SQUID_CONF="/etc/squid/squid.conf"
$ vi Dockerfile
:
:
ADD add_files/etc/sysconfig/squid /etc/sysconfig/squid
:
:

dockerイメージ作成

$ docker build -t centos:squid .

:
:
Step 4 : EXPOSE 3128
 ---> Running in 2b71a333a2e9
 ---> 447a4a2f8c7f
Step 5 : CMD /etc/init.d/squid start && tail -10f /var/log/squid/access.log
 ---> Running in db8c6cff2920
 ---> 0a751d73c320
Successfully built 0a751d73c320
:
:

コンテナ起動

  • -dでデタッチモードで起動する
  • -p [HOST_PORT]:3128でホストVMとポートバインディングする
$ docker run -t -d -p 13128:3128 centos:squid

$ docker ps
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                     NAMES
a3055a971f5a        centos:squid        /bin/sh -c /etc/init   2 seconds ago       Up 1 seconds        0.0.0.0:13128->3128/tcp   grave_lumiere

別コンソールでdocker attachしておく

  • コンテナ起動時に最後に実行したコマンドがtail -10fなので、フォアグラウンドで起動したままになっていて、
  • tailの結果は標準出力に出力されるので、
  • docker attachdocker logsで標準出力に流れたログを確認することが出来る
$ docker attach a3055a971f5a

VM => squidコンテナ => 外部サイト の通信確認

$ curl -x localhost:13128 http://www.google.co.jp/
:
(取得したコンテンツをズラズラ表示)
:

$

docker attachしておいたコンソール

  • tailしてるアクセスログが出力される
$ docker attach a3055a971f5a
:
1399547799.259    106 172.17.42.1 TCP_MISS/200 12995 GET http://www.google.co.jp/ - DIRECT/173.194.72.94 text/html

メモ

  • あるサービスが起動状態のコンテナ を立ち上げたい場合
    • フォアグラウンド起動をサポートしてるサービスの場合
      • サービスはフォアグラウンドで・コンテナはデタッチモード(バックグラウンド)で起動 することによって実現可能
    • フォアグラウンド起動をサポートしていない、あるいはサービススクリプトが用意されていないサービスの場合

成果物

23
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
21