⑦CoreOSでDockerしてみる(PrivateなDockerレポジトリ⇒Jenkinsの場合)

稼働しているJenkinsのDockerコンテナでイメージを作成して、
Docker Registry経由で、他のCoreOSに環境を移してみます。


■起動中のDockerコンテナでDockerイメージを作成

docker stop jenkins
docker commit jenkins localhost:5000/jenkins


■マウントとしたホスト側のファイル
docker commitでは、マウントとしたホスト側のファイルは保存されません。
JENKINS_HOMEがホスト側にあるので、ZIPで固めて、他のCoreOSに持っていきます。

cd /home/core
zip -r jenkins_home.zip jenkins_home


■Docker Registryに登録
Docker Registryにpushします。

docker push localhost:5000/jenkins

Docker Registryに登録されたイメージ一覧は、WEBブラウザから確認できます。
http://:5000/v2/_catalog
{"repositories":["jenkins"]}


■クライアントCoreOSの設定変更
他のCoreOSからDockerイメージをpullすると、HTTPS通信が必要なため、エラーになります・・・
SSL証明書を発行するのは面倒なので、insecure-registryオプションをつけてHTTPアクセスに変更します。

CoreOSのインストール時に、cloud-config.ymlに下記を追記しておきます。

coreos:
  units:
    - name: docker.service
      drop-ins:
        - name: 50-insecure-registry.conf
          content: |
            [Service]
            Environment=DOCKER_OPTS='--insecure-registry="<Docker RegistryのIPアドレス>:5000"'


■Docker RegistryからDockerイメージを取得
Docker RegistryからDockerイメージを取得します。

docker pull <Docker RegistryのIPアドレス>:5000/jenkins


■ホスト側のファイルを配置
ZIPで固めたJENKINS_HOMEを配置します。

cd /home/core
unzip jenkins_home.zip
sudo chown -R 1000 /home/core/jenkins_home


■Dockerコンテナの起動
ホスト側のJENKINS_HOMEをマウントして、Dockerコンテナを起動します。

sudo docker run --restart=always --name jenkins -d -p 8080:8080 -v /home/core/jenkins_home:/var/jenkins_home -v /etc/localtime:/etc/localtime:ro
 -e JAVA_OPTS='-Duser.timezone=Asia/Tokyo -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8' <Docker RegistryのIPアドレス>:5000/jenkins


もっとスマートな方法があるような気がしますが・・・とりあえずやりたい事はできました。
http://:8080/ にブラウザからアクセスします。
保存した状態のDockerコンテナが起動できていますね。設定を変更した、Jenkinsが起動しています。

⑥CoreOSでDockerしてみる(PrivateなDockerレポジトリ⇒EPM-Xの場合)

稼働しているEPM-XのDockerコンテナでイメージを作成して、
Docker Registry経由で、他のCoreOSに環境を移してみます。


■起動中のDockerコンテナでDockerイメージを作成

docker stop epm-x
docker commit epm-x localhost:5000/epm-x


■Docker Registryに登録
Docker Registryにpushします。

docker push localhost:5000/epm-x

Docker Registryに登録されたイメージ一覧は、WEBブラウザから確認できます。
http://:5000/v2/_catalog
{"repositories":["epm-x"]}


■クライアントCoreOSの設定変更
他のCoreOSからDockerイメージをpullすると、HTTPS通信が必要なため、エラーになります・・・
SSL証明書を発行するのは面倒なので、insecure-registryオプションをつけてHTTPアクセスに変更します。

CoreOSのインストール時に、cloud-config.ymlに下記を追記しておきます。

coreos:
  units:
    - name: docker.service
      drop-ins:
        - name: 50-insecure-registry.conf
          content: |
            [Service]
            Environment=DOCKER_OPTS='--insecure-registry="<Docker RegistryのIPアドレス>:5000"'


■Docker RegistryからDockerイメージを取得
Docker RegistryからDockerイメージを取得します。

docker pull <Docker RegistryのIPアドレス>:5000/epm-x


■Dockerコンテナの起動
取得したDockerイメージで、Dockerコンテナを起動します。

sudo docker run --restart=always --name epm-x -d -i -t -p 80:80 <Docker RegistryのIPアドレス>:5000/epm-x


Dockerサービス起動後に、Docker execコマンドでサービスを起動するようにします。

sudo vi /etc/systemd/system/epm-x.service
sudo systemctl enable /etc/systemd/system/epm-x.service
#/etc/systemd/system/epm-x.service
[Unit]
Description=EPM-X Service
After=docker.service
Requires=docker.service

[Service]
ExecStart=/usr/bin/docker exec epm-x bash -c '/etc/init.d/postgresql start && /etc/init.d/httpd start && /etc/init.d/ipftools-tomcat start'

[Install]
WantedBy=multi-user.target


http:///trac/sample_project にブラウザからアクセスします。
保存した状態のDockerコンテナが起動できていますね。設定を変更した、EPM-Xが起動しています。

⑤CoreOSでDockerしてみる(PrivateなDockerレポジトリ)

Dockerイメージは、Dockerレポジトリに格納することで、外部に公開することができます。
「docker pull」で、公開されたDockerイメージを利用できます。
Publicなレポジトリとして、Docker Hub等があります。
https://hub.docker.com/


社内業務で使用するDockerイメージは、Publicなレポジトリで外部公開できませんので、
Docker Registryで、PrivateなDockerレポジトリを立てて、社内Lanのみに公開します。


■Docker Registryの起動
下記コマンドで、Docker Registryを起動します。

docker run --restart=always --name registry -d -p 5000:5000 -v /var/registry:/home/core/registry registry:2


・[--restart=always]オプション指定で、OS起動時に自動起動します。
・[-v]オプション指定で、Dockerコンテナが停止しても、/home/core/registryにデータが残ります。(データの永続化)


■Docker Registryに登録
タグ名を付与して、Docker Registryにpushします。

docker tag docker.io/jenkins localhost:5000/jenkins
docker push localhost:5000/jenkins
docker images localhost:5000
# localhost:5000/jenkins    latest              c01375678364        6 days ago          711.8 MB


Panamaxからも、ローカルレポジトリが検索できます。
[MANAGE]→[Registories]を選択し、Docker Registryを検索対象に加える。


検索すると、ローカルレポジトリ(Docker Registry)のDockerイメージも表示されます。

④CoreOSでDockerしてみる(Dockerを使って、EPM-Xをインストール)

Dockerを使って、EPM-Xをインストールしてみます。


■EPM-Xとは?
IPA独立行政法人 情報処理推進機構)が作成した、定量的なプロジェクト管理を支援するツールです。
TracRedmine)やSubVersion等が入っています。
http://sec.ipa.go.jp/tool/ipf/index.html


EPM-Xの公式Dockerイメージは公開されていないため、Dockerイメージを作ってみます。
稼働環境であるCentOS5のDockerイメージを元にして、作成します。


■Centos5のDockerイメージを元にして、EPM-XのDockerイメージを作成する

docker pull centos:5
docker run -i -t -d centos:5 /bin/bash
docker ps
docker attach <コンテナのID>
# yum install wget
# yum install openssh-clients ※EPM-Xのインストールに必要なので、とりあえず入れておく
# wget http://ppma.jp/DataFolder/%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89/ipftools-trac-1.0-setup-centos.x86_64.bin
# /bin/bash ./ipftools-trac-1.0-setup-centos.x86_64.bin
# Ctrlを押したまま、pq で抜ける(exitするとコンテナが終了し、変更が破棄されるので注意)
docker commit <コンテナのID> centos/epm-x
docker run --restart=always --name epm-x -d -i -t -p 80:80 centos/epm-x


・[dcoker pull 〜]でCentOS5の仮想イメージを取得します。
・[dcoker run 〜]でCentOS5の仮想イメージからコンテナを起動します。
・[docker ps]でコンテナのIDを確認します。
・[dcoker attach 〜]でCentOS5の仮想コンテナ内でコマンドを実行し、EPM-Xをインストールします。
・[docker commit 〜]で現在のコンテナの状態を保存します。(EPM-Xがインストールされた状態が保存される)
・[docker commit 〜]で保存した仮想イメージから、[dcoker run 〜]で、コンテナを起動します。


EPM-Xでは、ApacheTomcat、PostgresSQLのサービスを起動する必要があります。
通常ならば、chkconfigで自動起動を設定すれば良いのですが、Dockerコンテナを起動しても、サービスは起動してくれません・・・
Dockerコンテナ(のOSイメージ)は、initプロセスではなく、直接プロセスを実行する為、chkconfig on/offの自動起動設定が呼ばれないようです・・・

# chkconfig postgresql on
# chkconfig httpd on
# chkconfig ipftools-tomcat on


その為、Docker execコマンドで、仮想コンテナ内でコマンドを実行し、サービスを起動します。

docker exec epm-x bash -c '/etc/init.d/postgresql start && /etc/init.d/httpd start && /etc/init.d/ipftools-tomcat start'


毎回、Docker execコマンドを実行するのは面倒なので、
Dockerサービス起動後に、Docker execコマンドを実行するように設定します。
これで、仮想コンテナ内のサービスも自動起動するようになります。

sudo vi /etc/systemd/system/epm-x.service
sudo systemctl enable /etc/systemd/system/epm-x.service
#/etc/systemd/system/epm-x.service
[Unit]
Description=EPM-X Service
After=docker.service
Requires=docker.service

[Service]
ExecStart=/usr/bin/docker exec epm-x bash -c '/etc/init.d/postgresql start && /etc/init.d/httpd start && /etc/init.d/ipftools-tomcat start'

[Install]
WantedBy=multi-user.target


http:///trac/sample_project にブラウザからアクセスします。
OSにアプリケーションをインストールした状態で、仮想コンテナを作成することもできるので、便利ですね。
仮想コンテナを配置するだけで、WEBアプリケーション等を起動することができます。



③CoreOSでDockerしてみる(Dockerを使って、Jenkinsをインストール)

Dockerを使って、Jenkinsをインストールしてみます。


■Dockerイメージの取得
公式のDockerイメージが配布されていますので、そちらを利用します。
下記コマンドでイメージを取得します。

docker pull jenkins


■Jenkinsコンテナの起動
下記コマンドでコンテナを起動します。

mkdir /home/core/jenkins_home
sudo chown 1000 /home/core/jenkins_home
sudo docker run --restart=always --name jenkins -d -p 8080:8080 -v /home/core/jenkins_home:/var/jenkins_home -v /etc/localtime:/etc/localtime:ro
 -e JAVA_OPTS='-Duser.timezone=Asia/Tokyo -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8' jenkins


・[--restart=always]オプション指定で、OS起動時に自動起動します。
・[--name jenkins]でコンテナ名を指定します。
・[-v]オプション指定で、Dockerコンテナが停止しても、/home/core/jenkins_homeにデータが残ります。(データの永続化)
・[-p 8080:8080]でポート番号を指定する。とりあえずそのまま。
・[-v /etc/localtime:/etc/localtime:ro]でホストと時刻同期する。(同期しないとコンテナ内はUTCになる)
・[-e JAVA_OPTS='-Duser.timezone=Asia/Tokyo 〜]でJenkinsのタイムゾーンとファイルエンコードを指定する。


http://:8080/ にブラウザからアクセスします。


また、Dockerの仮想コンテナは、パラメータで、コンテナ名、ポート番号、データ永続化フォルダが指定できるので、1サーバ内にJenkinsを複数立ち上げることもできます。
JENKINS_HOME等が競合しないので、便利ですね。

sudo docker run --restart=always --name jenkins1 -d -p 8081:8080 -v /home/core/jenkins_home1:/var/jenkins_home jenkins
sudo docker run --restart=always --name jenkins2 -d -p 8082:8080 -v /home/core/jenkins_home2:/var/jenkins_home jenkins
sudo docker run --restart=always --name jenkins3 -d -p 8083:8080 -v /home/core/jenkins_home3:/var/jenkins_home jenkins

自宅開発環境のアップデート

自宅開発環境アップデートです。
前回の教訓を生かして、こまめにアップデートします。自分への覚書を残しておきます。


Ubuntuアップデート
VirtualBox上のEclipse等を詰め込んだ、Ubuntu開発環境をアップデート。
デスクトップ左側のランチャーの1番上の「unity-dash」アイコンをクリック→「update」と入力→「ソフトウェアの更新」で手動アップデートします。
Ubuntu15.04→15.10にアップグレード。特に問題なく終了。


Hyper-V Serverアップデート
Hyper-V ServerのWindows Updateを実行。特に問題なく終了。
Hyper-V上のCentOS5.11は、yum update でアップデート。特に問題なく終了。
Hyper-V上のJenkinsとJenkinsプラグインもアップデート。特に問題なく終了。

②CoreOSでDockerしてみる(Panamaxをインストール)

Panamaxをインストールしてみます。


■Panamaxとは?
オープンソースのWEBアプリケーションです。
Dockerコンテナの管理やインストールをGUI上で実行できます。
http://panamax.io/


■Panamaxをインストール
下記コマンドで、CoreOSにインストールします。

sudo su
curl -O http://download.panamax.io/installer/panamax-latest.tar.gz && mkdir -p /var/panamax && tar -C /var/panamax -zxvf panamax-latest.tar.gz
cd /var/panamax
./coreos install --stable


http://:3000/ にブラウザからアクセスします。


Dockerレポジトリを検索して、公開されているDockerコンテナをインストールすることができます。
例えば、Wordpressをインストールする場合、通常なら、WordpressMySQLをインストールして設定する必要があります。
Dockerなら、Dockerコンテナをインストールするだけで、Wordpressが使用できます。
(Dockerコンテナに、WordpressMySQL等の必要なソフトウェアがインストール&設定済み)
また、Panamaxを使えば、WEBブラウザ上から、Dockerコンテナをインストールすることができます。


インストール済みのDockerコンテナを一覧表示できます。
設定変更や削除等ができるみたいですね。