やること
- proxyサーバ(squid)起動状態のコンテナを立ち上げたい
- Dockerでforward proxyサーバーを立てる with centos6.5 on virtualbox - Qiita の続編的なメモ
環境
- 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 attach
やdocker 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
メモ
-
あるサービスが起動状態のコンテナ を立ち上げたい場合
- フォアグラウンド起動をサポートしてるサービスの場合
- サービスはフォアグラウンドで・コンテナはデタッチモード(バックグラウンド)で起動 することによって実現可能
- フォアグラウンド起動をサポートしていない、あるいはサービススクリプトが用意されていないサービスの場合
- サービススクリプトでの起動後にダミーのコマンド(例えば
tail -f
でウォッチしたいログをtailしたままにするとか)を実行して、コンテナが終わらないようにする- 例
CMD /etc/init.d/hoge start && tail -10f /var/log/hoge.log
- 例
- Supervisor: A Process Control System — Supervisor 4.0.0-dev documentation 等を使って起動スクリプトをデーモン化した上で、上記操作で起動する
- 参考リンク : Docker+Serf+HAproxy (+Supervisor) | SOTA
- サービススクリプトでの起動後にダミーのコマンド(例えば
- フォアグラウンド起動をサポートしてるサービスの場合