フルスタックエンジニアを目指して

いろいろやってみるブログ

Dockerでオリジナルプロキシコンテナを作成する

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

以上で、構築完了です。