【Docker】docker-compose.ymlで生成されるイメージ名、コンテナ名を自由に制御する

 Dockerでまとまった何かをする時は docker-compose.yml を用いるのが便利です。docker-compose.ymlを使うと複数のコンテナ、イメージ、ネットワーク、ボリュームの設定を1ファイルにまとめることができ環境構築や管理が簡単になります。

 Dockerをプログラム上から動作させる時は docker run や docker exec あたりをよく使います。docker run --rm イメージ名 xxx yyyyなどです。これを使う時のイメージ名やコンテナ名はいつでも決まった値の方が楽です。変わるにしても環境ごとでわかりやすい法則性のある名前にすべきです。

 docker-compose.yml をなんとなく使うとイメージ名やコンテナ名の衝突を避けるためか、自動で名前が振られます。これは普段は便利なのですが docker run, docker exec と混ぜる場合には不便です。これの対策として docker-compose.yml 上でイメージ名やコンテナ名を決まった値にする方法を紹介します。

 docker-compose.yml に名前を決定するフィールドがあり、これを使えばOKです。これは例えば次のように使えます。

services:
  app:
    container_name: my_project_app"
    image: my_project_app
    build:
      context: ./docker/php
    pull_policy: never

 container_name はシンプルです。単純に docker compose で生成されるコンテナ名がこれになるだけです。
Services top-level elements | Docker Docs#container_name

 image はイメージ名を定義しています。これは build, pull_policyによって振る舞いを変えます。とりあえず image と build を定義し pull_policy を never とすれば「常に build で定義したイメージをビルドして image で定義した名前にする」と動作します。これは次リンクがリファレンスで採用したい運用方法に合わせて適宜変えることができます。

Services top-level elements | Docker Docs#image
Services top-level elements | Docker Docs#pull_policy
Services top-level elements | Docker Docs#build

 環境変数を使うと何か個別で柔軟に変えたい時にも通用します。

    container_name: "${DOCKER_CONTAINER_PREFIX:-my_project}_app"
    image: "${DOCKER_IMAGE_PREFIX:-my_project}_app"

 この辺りの制御ができると Docker の中から Docker を使うなどといったプログラムも安定して扱えます。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG