SVX日記

2004|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|

2019-06-16(Sun) 遅ればせながらdockerを活用する

  従来の仮想化に理解の軸足を置いてしまうと、むしろ概念を掴むことが困難になりがちなコンテナ型仮想化技術「docker」であるが、一度、その特性を受け止めてしまえば、そもそも「docker」の方が、自然な仮想化手段であるとさえ思えてきたりする。

  特に便利なのが、新しい環境上にサービスを移行したい場合だ。OS環境ごとサービスをカートリッジ化してあるので、ファミコン感覚である。

  拙作ながら習作として、リモートブックマークサービスである「remotemark」と、ウェブメールビューアサービスである「maverick」のコンテナイメージを構築しgithub/dockerhubに登録してみた。

  使うだけならば、新たにインストールしたOS、もしくは、新たに契約したVPSなどから、以下のわずかな操作を行うだけでリモートブックマークサービスを起動できる。今回は、自宅のOpenStack環境に構築してみた。

[root@lamassu ~]# dnf install docker docker-compose
[root@lamassu ~]# systemctl start docker
[root@lamassu ~]# systemctl enable docker
[root@lamassu ~]# mkdir -p docker/remotemark
[root@lamassu ~]# cd docker/remotemark
[root@lamassu remotemark]# curl -O https://raw.githubusercontent.com/furutanian/remotemark/master/docker-compose.yml
[root@lamassu remotemark]# docker-compose pull
[root@lamassu remotemark]# mkdir pv
[root@lamassu remotemark]# docker-compose up -d
[root@lamassu remotemark]# curl http://localhost:8080/cgi-bin/

  このままだとアクセスできないので、リバースプロキシ環境を立て、外に公開してやる。

[root@lamassu remotemark]# dnf install httpd mod_ssl
[root@lamassu remotemark]# vi /etc/httpd/conf.d/remotemark.conf
ProxyRequests Off
ProxyPass /remotemark http://localhost:8080/cgi-bin
ProxyPassReverse /remotemark http://localhost:8080/cgi-bin
[root@lamassu remotemark]# systemctl start httpd
[root@lamassu remotemark]# systemctl enable httpd

  ブラウザで「https://<ホスト>/remotemark/」にアクセスすれば、既にリモートブックマークサービスが利用可能である。たったこれだけ。

  なお、ブックマークのデータはホストの「/root/docker/remotemark/pv」に保存されるので、これだけバックアップしておけば、別のコンテナホストに移行できる。

  最新のOSで動かすために、コンテナイメージをビルドし直す場合も、pullする代わりに、以下のわずかな操作を行うだけだ。

[root@lamassu remotemark]# git clone https://github.com/furutanian/remotemark/
[root@lamassu remotemark]# ln -s remotemark/Dockerfile .
[root@lamassu remotemark]# docker-compose build
[root@lamassu remotemark]# docker-compose up -d

  似たような方法で、ウェブメールサービスを立ち上げることもできる。今回は、AWSのエントリープラン「Amazon Lightsail」の試用環境にCentOSを上げ構築してみた。試用期間が終わっても3.5ドル/月なら安いもんだ。

  例によって、既存のコンテナイメージを使うだけなら、以下だけ。

/root # mkdir -p docker/maverick
/root # cd docker/maverick
/root/docker/maverick # curl -O https://raw.githubusercontent.com/furutanian/mave/master/docker-compose.yml
/root/docker/maverick # docker-compose pull
/root/docker/maverick # mkdir pv
/root/docker/maverick # docker-compose up -d
/root/docker/maverick # curl http://localhost:8081/cgi-bin/

  コンテナイメージをビルドし直す場合も、以下だけだ。

/root/docker/maverick # git clone https://github.com/furutanian/mave/
/root/docker/maverick # ln -s mave/Dockerfile .
/root/docker/maverick # ln -s mave/docker-compose.yml .
/root/docker/maverick # docker-compose build
/root/docker/maverick # mkdir pv
/root/docker/maverick # docker-compose up -d

  やはり、このままだとアクセスできないので、リバースプロキシ環境を立て、外に公開してやるのだが、相手がメールだけに認証が必須だ。

/root/docker/maverick # vi /etc/httpd/conf.d/maverick.conf 
ProxyRequests Off
ProxyPass /maverick http://localhost:8081/cgi-bin
ProxyPassReverse /maverick http://localhost:8081/cgi-bin
 
<Location /maverick>
    RewriteEngine   On
    RewriteCond %{HTTPS} !=on
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
 
    AuthType        Digest
    AuthName        "Maverick"
    AuthUserFile    /var/www/.digest_pw
    <RequireAny>
        Require     valid-user
    </RequireAny>
</Location>
/root/docker/maverick # htdigest -c /var/www/.digest_pw "Maverick" user
/root/docker/maverick # chmod 600 /var/www/.digest_pw 
/root/docker/maverick # chown apache:apache /var/www/.digest_pw 
/root/docker/maverick # systemctl restart httpd
/root/docker/maverick # systemctl enable httpd

  なお、メールアカウントなどの設定はホストの「/root/docker/maverick/pv/conf/mave.config」に出る形にしてあるので、それを編集すればいい。また、受信したメールデータはホストの「/root/docker/maverick/pv/mave.mails」に保存されるので、これだけバックアップしておけば、別のコンテナホストに移行できる。

  <かきかけ>