【Docker】docker-compose.yml 各項目の記述方法【備忘録】
TL;DR
久しぶりにVSCodeのremote container拡張機能を使って開発していた時に、docker-compose.ymlの書き方をかなり忘れていたので備忘録としてまとめておく。 適宜更新予定。
ファイル例
version: '3' services: web: build: . ports: - "11324:1324" volumes: - .:/go/src/go_test/ working_dir: /go/src/ restart: always command: sleep infinity container_name: go_test_container
各要素の説明
version
使用するdocker-composeのバージョン番号を記述する。
services
サービス(動作させるアプリケーション)の設定を名前を付与して設定・追加する。
例のyamlファイルだとweb
がサービス名にあたる。
build
ビルドするDockerfileをyamlから見た相対パスで記述する。
ports
ホストマシンのポートとコンテナのポートを下記の通りに紐づける。
ports: - "HOST_PORT:CONTAINER_PORT"
例のyamlファイルだと、port番号1324でリクエストの待ち受けをした場合、ホストマシンではport番号11324にアクセスすることでリクエストを送ることができる。
volumes
ホストマシンのディレクトリをコンテナのディレクトリに下記の通りにマウントする。
例のyamlファイルだとyamlファイルがあるディレクトリの内容をコンテナの/go/src/go_test/
ディレクトリにマウントして、コンテナ側でも利用できるようになる。
volumes: - HOST_DIR:CONTAINER_DIR
working_dir
コンテナ起動時の初期位置となるディレクトリを記述する。
restart
コンテナが停止した際の再起動やコンテナの開始に関連する設定を記述する。
常に起動しておいて欲しいWebアプリケーションサーバーなどはalwaysでいいのかな、という感じ。
設定値は下記の通り。
設定値 | 説明 |
---|---|
no |
コンテナを自動的に再起動しない。デフォルト値。 |
on-failure |
プロセスが0以外のステータスで終了した時のみ、再起動を行う。 |
always |
停止時には必ず再起動を行う。 |
unless-stopped |
always と似ているが、Docker daemonが再起動してもステータスが終了状態なら再起動はしない。 |
ここの理解は公式リファレンスと別の方の記事を参考にさせていただきました。
command
コンテナ起動時に実行するコマンドを記述する。
container_name
コンテナの名前を記述する。
参考
Start containers automatically | Docker Documentation