⑦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が起動しています。