Jenkins 2.0を動かすときのボリューム周りのTips を自分用のメモとして書いておきます。
課題
JenkinsのDockerイメージ、もしくはそれを継承したイメージを作成した場合、課題になるのが、ディスクの実行権限です。このイメージは、Dockerイメージの中で定義された、Jenkinsユーザ(uid 1000) で実行されるようになっています。
Dockerコンテナは、通常だとコンテナの内部にボリュームを持っていて、コンテナを削除すると、ボリュームは消えてしまいます。設定内容を保存したいケースでは、-v
オプションを使って、保存したいディスク領域を、ホストOSのディスク領域にマウントする必要があります。
ただ、その場合、マウントした、ホストOS側のディスク領域が、Docker内のJenkinsユーザからアクセスできる必要があります。
方式1. ホストOSに、Jenkinsユーザを作成する
単純な解決策としては、uid 1000を持ったJenkinsユーザをホストOS側に作ってしまえばOK
です。重要なのはuidなので、ホストOS側のユーザ名は違っていても問題ありません。
しかし、それだと、既にuid 1000が使われていたりする場合もありますし、ホストOS側をコンテナの中身に合わせるのは、ホストOSがコンテナに依存することになり気持ち悪いです。
$ docker run -p 8080:8080 -p 50000:50000 -v /your/home:/var/jenkins_home jenkins
方式2. docker volume を使う
私は上記の理由で、docker 1.9から導入された、docker volume
を使うことにしました。これは、docker が使えるvolumeで、docker run
を実行するときに通常の-v
オプションで、マウント可能になります。
Volumeの作成は次の通り。デフォルトだと、localドライバが採用されます。もっと複雑なドライバを使いたい場合は、-d
オプションがあります。詳しくはこちらまで。
[Mount a shared-storage volume as a data volume]
(https://docs.docker.com/engine/userguide/containers/dockervolumes/)
$ docker volume create --name jenkins-volume
$ docker volume ls
volumeを作成したら、次のコマンドでJenkins 2.0 のボリュームをマウントしながら実行します。
$ docker run -p 8080:8080 -p 50000:50000 -v jenkins-volume:/var/jenkins_home jenkins
バックアップ
バックアップは--volumes-from
オプションを使って、実行中のコンテナから次のようの実施することができました。
参考: Backup, restore, or migrate data volumes
$ docker run --rm --volumes-from <Container Name> -v $(pwd):/backup ubuntu tar cvf /backup/jenkins_home.tar /var/jenkins_home
リストア
リストアは試していませんが、次のようなコマンドでできると思います。
$ docker run -v jenkins-volue:/var/jenkins_home --name jenkins-restore ubuntu /bin/bash
$ docker run --rm --volumes from jenkins-restore -v $(pwd):/backup ubuntu bash -c "cd /var/jenkins_home && tar xvf /backup/jenkins_home.tar --strip 1"
では、よい Jenkins 2.0 ライフを。