Dockerでオリジナルプロキシコンテナを作成する
目次
はじめに
ここ3週間くらい、Dockerをいじり倒していました。いっぱいはまったところもありますが、Dockerに対する理解はかなり進んだ気がします。
これまで学んだことの備忘録として、Dockerでオリジナルコンテナの作り方を書いておきます。
ホストマシンの作成(Vagrant利用)
以下の内容で、Vagrantfile
を作成しました。
Vagrant.configure("2") do |config| config.vm.define "manager" do |manager| manager.vm.box = "bento/ubuntu-16.04" manager.vm.network "forwarded_port", guest: 3128, host: 8080 manager.vm.network "private_network", ip: "192.168.33.10" manager.vm.hostname = "master.example.com" config.vm.synced_folder ".", "/home/vagrant/", disabled: true # Provisioning config.vm.provision "shell", inline: <<-SHELL ## Make sure your existing packages are up-to-date. sudo apt-get update ## Get the latest Docker package. curl -fsSL https://get.docker.com/ | sh sudo gpasswd -a $USER docker service docker restart ## Make directory mkdir /home/vagrant/squid SHELL end end
仮想マシンを起動します。
$ vagrant up
Dockerコンテナの構築
Dockerfileで作成すると、systemctl
コマンドが利用できなくなるので、せこせこと作っていきます。docker build
で、--privileged
オプション使えればいいのですが。
$ docker run --privileged -p 3128:3128 -v /home/vagrant/squid/:/etc/squid/ -v /var/log/squid/:/home/vagrant/squid/ --name squid -d centos:centos7 /sbin/init 8cc94f64d373532a3f374ede1032121fca9e69ed553f6e102e179677e0832f06
containerに入ります。
$ docker exec -it squid /bin/bash
squidをインストールします。
# yum -y install squid
squidサービスを起動/有効化します。
# systemctl status squid ● squid.service - Squid caching proxy Loaded: loaded (/usr/lib/systemd/system/squid.service; disabled; vendor preset: disabled) Active: active (running) since Sun 2017-01-15 13:39:34 UTC; 2s ago Process: 131 ExecStart=/usr/sbin/squid $SQUID_OPTS -f $SQUID_CONF (code=exited, status=0/SUCCESS) Process: 126 ExecStartPre=/usr/libexec/squid/cache_swap.sh (code=exited, status=0/SUCCESS) Main PID: 132 (squid) CGroup: /docker/8cc94f64d373532a3f374ede1032121fca9e69ed553f6e102e179677e0832f06/system.slice/squid.service tq132 /usr/sbin/squid -f /etc/squid/squid.conf tq134 (squid-1) -f /etc/squid/squid.conf mq135 (logfile-daemon) /var/log/squid/access.log ? 132 /usr/sbin/squid -f /etc/squid/squid.conf Jan 15 13:39:34 8cc94f64d373 systemd[1]: Starting Squid caching proxy... Jan 15 13:39:34 8cc94f64d373 systemd[1]: Started Squid caching proxy. Jan 15 13:39:34 8cc94f64d373 squid[132]: Squid Parent: will start 1 kids Jan 15 13:39:34 8cc94f64d373 squid[132]: Squid Parent: (squid-1) process 134 started
containerから抜けます。
# exit
docker ps
で、起動状態を確認します。
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8cc94f64d373 squid:20170115 "/sbin/init" 2 minutes ago Up 2 minutes 0.0.0.0:3128->3128/tcp squid
プロキシの動作確認をします。
$ curl -x 127.0.0.1:3128 http://www.yahoo.co.jp | head -10 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <meta http-equiv="content-style-type" content="text/css"> <meta http-equiv="content-script-type" content="text/javascript"> <meta name="description" content="日本最大級のポータルサイト。検索、オークション、ニュース、メール、コミュニティ、ショッピング、な ど80以上のサービスを展開。あなたの生活をより豊かにする「ライフ・エンジン」を目指していきます。"> <meta name="robots" content="noodp"> <meta name="google-site-verification" content="fsLMOiigp5fIpCDMEVodQnQC7jIY1K3UXW5QkQcBmVs">
containerをコミットしておきます。
$ docker commit 8cc94f64d373 squid:20170115 sha256:04cadee576cf35df8e7f1fa689f3be352cc367ec4d21633182bcc748ebdcd1ba $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE squid 20170115 04cadee576cf 4 seconds ago 376.9 MB
DockerHubにログインします。
$ docker login Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one. Username: <username> Password: Login Succeeded
docker tag
で、コンテナ名を変更します。
$ docker tag squid:20170115 <username>/squid:20170115 $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE skksky/squid 20170115 04cadee576cf 2 minutes ago 376.9 MB
docker push
します。
$ docker push <username>/squid The push refers to a repository [docker.io/<username>/squid] 2a21a224c80d: Pushed 1d19e15ccad3: Pushed 34e7b85d83e4: Mounted from library/centos 20170115: digest: sha256:501b0a743734fe3cdd798e9c14980cfb5a4d8f1de8af4bdc87abbc0e85cb2714 size: 953
以上で、構築完了です。