プログラミングメカブログ

Adults cling to the past, Children want to escape to the future

プログラミングメカブログ

Adults cling to the past, Children want to escape to the future

4月

24

Docker × git で複数サイトを管理

  • POSTED BY 小谷松 丈樹 IN 調査
  • 1 Comment

Docker触ろうぜ

Docker_(container_engine)_logo
Dockerについて調べてみると、どこも同じようにWordPressを構築するぞ!という内容の技術ブログに当たります。
説明のしやすさや見栄えの良さ、ハンズオンのしやすさ、相性の良さなど様々な理由があるものと思いますが、
Dockerに関する情報がどれもWordPressを構築する方法ばかりでは、うーん。

そこで、gitで複数のシステムを共通化して管理できる、 git subtree という仕組みを取り入れて、
Dockerの開発設計について検証してみたいと思います。
subtreeについても丸パクリでは面白くないので、 一つのシステムで異なるCSSリポジトリを使う ようにしてみます。

目標

Dockerで管理する複数サイトにおいて、
git subtreeを利用して同システムで違うCSS設定を使う

事前準備

  • Amazon EC2起動(suz-lab AMI5.6)
  • Amazon ELB 作成
  • ELBに向けたドメインを2つ設定
  • ELBとEC2の紐付け

Docker設定

Dockerのインストール

urelx/centos6-epel を選択して、特権モード(–privileged)で起動
するとSSHログイン状態に

Dockerで1台目が立ち上がる

各コンテナの基本設定

初期設定

とりあえず、rootのパス変更だけしておいて

以下必要なものをインストールしていく

必要なもの

  • ssh系インストール+設定

後々面倒にならないようにPAMを必要としないよう設定

  • apache系インストール+設定

httpd基本設定は今回必要ないので割愛
htmlさえ表示できればOKなのでPHPインストールも割愛

  • gitインストール

コンテナのコミット

DockerコンテナのSSH接続を抜けてホストOSからコンテナリストを確認

コンテナIDを取得

docker1/centos と名前をつけてコミット。

docker1/centos コンテナの22番ポートにSSH接続を可能にするデーモンを立ち上げる感じ?

コンテナリストをを再度確認すると

PORTSを見ると、 0.0.0.0:49153->22/tcp となっているので、
docker仮想PC?の49153番ポートから、コンテナ内の22番ポートにポートフォワーディングされいます。
docker1/centos にSSH接続するなら、49153番ポートに接続すれば良さそう。

ifconfig するとdockerのインターフェースのIPは 172.17.42.1 である事が分かるので、
この 49153 番ポートにSSH接続してみます。

試行錯誤の末やっと成功したSSH接続。。。

普通に # docker search centos とすると、centos7のイメージが検索されます。
これで起動すると、コンテナのOSがCentOS7、ホスト側のOSがCentOS6となり、
ホスト側カーネルが古いため systemctl コマンドが使えない状況に陥る可能性があります。参考
バージョンの確認は大事だなぁと思いました。(小並感

コンテナ内apacheの表示確認

ホストOSからコンテナの再起動し、80番ポートを開けます。

0.0.0.0:49154->22/tcp, 0.0.0.0:49155->80/tcp 22と80のポートフォワーディングが設定されました。
コンテナID c1ef47156013 で、httpdを起動する必要が有ります。

OK, HTML取得できました。

予め用意しておいたものがこちらです

docker2/centos を立てました。
0.0.0.0:49156->22/tcp, 0.0.0.0:49157->80/tcp で設定されています。

プロキシ設定

ホストOSのapacheから、
docker1.mekachan.netの場合、 docker1/centos49155 番ポートに
docker2.mekachan.netの場合、 docker2/centos49157 番ポートに
プロキシを通す。

で、apacheを再起動すると・・・
スクリーンショット 2015-04-23 13.01.23

docker1,docker2ともに表示できる事が確認できました。

git設計

共通利用するhtdocs下を管理するbareリポジトリをホストOSに置き、各コンテナからpullします。

こんなHTMLを置いて

bareリポジトリを作って

gitのユーザ名とアドレス設定し忘れてるけどリモートリポジトリにpush。

コンテナからこれをclone。

コンテナからホストOSにSSHするのに一旦ネットワークの外に出るから、
EC2のSecurityGroup設定で穴を開けておかなきゃいけなかった。
コンテナから出て行くIPはEC2のIPなので、自サーバのIPに穴を開けて再度clone

html/bare/ 下にできちゃった。
スクリーンショット 2015-04-23 17.25.10

いい感じ。コンテンツは同じにできました。
CSSを分けるsubtreeを設定してみましょう。

CSSリポジトリ

CSSのみを管理するgitリポジトリを2つ作成(hoge/fuga)

で、こんな感じ。
leyout.css をそれぞれのリポジトリに設置します。

hogeのlayout.css

CSSの読込先を <link rel="stylesheet" type="text/css" href="/bare/css/layout.css" /> に変更し、
コンテナのリポジトリ( htdocs/bare/ の下)にCSSリポジトリをくっつけてみます。

サブツリーマージ

docker1/centoshoge を、 docker2/centosfuga を、それぞれくっつけます

デフォルトのgitバージョン低すぎ問題

subtree機能は、1.8以上で利用可能です。
ということで CentOS に Git 1.8 をインストールする

仕切り直し

スクリーンショット 2015-04-24 10.21.31

CSSが反映されました。この勢いで docker2/centosfuga を設定して・・・

スクリーンショット 2015-04-24 10.49.21

きた!システムを統一してCSSディレクトリだけを異なるリポジトリにすることができました。

まとめ

  • Docker面白い
    • Dockerfileでプログラマブルサーバ構築(むしろこっちがDockerのメイン?
  • git subtree を使うには
    • yumでのインストールではバージョンが低い
    • しかもデフォルトでは有効になってない
  • サーバ周りの知識がボロクソだと判明

さあ、勉強勉強。

Tags : | | | |

Comment ( 1 )

コメントを残す

Please type the characters of this captcha image in the input box

Please type the characters of this captcha image in the input box