Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
21
Help us understand the problem. What is going on with this article?
@jpshadowapps

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

More than 5 years have passed since last update.

やること

環境

  • 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

メモ

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

成果物

21
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
21
Help us understand the problem. What is going on with this article?