4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

docker+jenkinsのジョブである子コンテナにうまいことボリュームをマウントする (DooD)

Last updated at Posted at 2019-11-07

やりたいこと

  • ローカルをクリーンに保ちたいのでコンテナ内でjenkinsを走らせたい
  • jenkinsのジョブとして、コンテナを生成してその中でビルドを走らせたい

要はDocker outside of Docker要件です。
丸一日ウンウン唸ってやっと解決できたっぽいので仮投稿。

まとめ

  1. docker.sockをコンテナにマウントすると、ホストと同格のdockerコマンドが叩けるようになる
  2. docker-composeがdocker-compose.ymlを探すときはコンテナ内を見ているが、docker.sockホストを見ているので、(混乱ポイント1)
  3. コンテナ内でdocker-compose.ymlのボリュームを相対パス(./***のような書き方)で指定すると無を参照する(仕様っぽい)
  4. マウント対象のディレクトリが存在しないとき、docker-composeはエラーを吐かずに空のディレクトリを生成する(混乱ポイント2)
  5. ホスト側の絶対パスで指定すれば、コンテナ内でもきちんとマウントすることができる
  6. $PWDとか$JOB_NAME(jenkinsの環境変数)を使って、うまいこと動的に絶対パスを生成する
  7. HAPPY.....

解法

jenkinsコンテナとビルド用コンテナはそれぞれ別のrepoでVCSで管理されている想定です

▼jenkinsコンテナ

version: '3'
services:

  jenkins:
    container_name: 'jenkins'
    build:
      context: ./container
      dockerfile: Dockerfile    # jenkins/jenkins:ltsのイメージを使用しています
    ports:
      - '8080:8080'
      - '5000:5000'
    volumes:
      - ./jenkins:/var/jenkins_home
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - HOST_PWD=$PWD

▼ビルド用コンテナ
jenkinsジョブのworkspaceから実行したいほう
docker-compose.yml

version: '3'
services:

  work:
    build:
      context: ./server
      dockerfile: container/Dockerfile
    container_name: 'work'
    tty: true
    volumes:
      - /dev/shm:/dev/shm
      # - ./server/:/server/  ↓に書き換え
      - $HOST_PWD/jenkins/jobs/$JOB_NAME/workspace/server/:/server/

▼ビルド用コンテナ
ローカルで直接実行するほう
docker-compose-local.yml
実行するときは docker-compose -f docker-compose-local.yml up -d でymlファイルを指定すればよい

version: '3'
services:

  work:
    build:
      context: ./server
      dockerfile: container/Dockerfile
    container_name: 'work'
    tty: true
    volumes:
      - /dev/shm:/dev/shm
      - ./server/:/server/  # 相対パスのままでよい
4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?