😎
docker-composeの基礎的なこと
docker-composeについて学習したのでアウトプットします。
(そういやインフラ系をまともに学習したのはこれが初めてかも…)
※ Dockerアウトプットの続きとなります
docker-compose
概要
1. コマンドラインツールと設定ファイルを組み合わせたもの
2. あくまでローカル/テスト環境用のコマンドで、本番環境での使用は想定されていない
3. バックグラウンドでDocker CLIのAPIを叩いているだけ
ex)
RailsはRailsだけで動いているわけではなく、MySQLなどと連携して動いている
-> これらをDockerで動かす場合、それぞれのコンテナを関連付けて動かす必要があるが、
コンテナごとにdokcer container runなどのコマンドを実行していられない
-> YAMLファイルにあらかじめ実行コマンドや設定を記述しておき、docker-composeコマンドで一発で実行できるようにする
Docker-Composeを構成するもの
1. YAMLファイル(設定ファイル)
複数のコンテナ、ネットワーク、ボリュームなどの関係性や設定を記述できる
2. コマンドラインツール
docker-composeコマンドを使用できる
YAMLファイルの情報に基づいて実行される
1. YAMLファイルについて
概要
1. containers, networks, volumesそれぞれの設定ができ、関連をもたせることもできる
2. 基本的にはdocker-compose.ymlというファイル名だが変えることもできる(推奨しない)
3. servicesはcontainersのこと
drupalとpostgresqlを結びつけて起動させるYAMLファイル
カスタムしたdrupalイメージを使用する場合
# DrupalとPostgresの設定の例
version: '2'
services:
drupal: # ここの名前は自由、コンテナを参照する際のDNS名となる
# build: .でdocker-compose.ymlと同じフォルダにDockerfileがあることを示す
build: .
# Dockerfileの名前がデフォルトと違う場合はdockerfile、
# 保存場所がdocker-compose.ymlと違うディレクトリの場合はcontextに指定する
# build:
# context: .
# dockerfile: drupal.Dockerfile
image: custom-drupal # ローカルにイメージのキャッシュがない場合、ここから取得する
ports:
# コンテナ側のportはDokerfileやREADME, docker image inspectから調べる
- "8080:80"
volumes:
# どのVolumeを使用するのかはそのイメージのREADMEを参照
- drupal-modules:/var/www/html/modules
- drupal-profiles:/var/www/html/profiles
- drupal-sites:/var/www/html/sites
- drupal-themes:/var/www/html/themes
postgres:
image: postgres
environment:
- POSTGRES_PASSWORD=test
volumes:
- drupal-data:/var/lib/postgresql/data
volumes:
# servicesでvolumesを設定した場合、個々にも書く
# valueが空の場合、プラットフォームのデフォルトが使用される
drupal-data:
drupal-modules:
drupal-profiles:
drupal-sites:
drupal-themes:
備考
1. bridgeはdocker-compose up時にランタイム上で自動生成されるので、設定しなくてよい
2. portsを指定するのは、あくまでlocalhostに読み取らせたいコンテナのみ
-> コンテナ同士はportsがなくてもDockerネットワーク(bridge)内部で通信できる
3. docker-compose downするとボリュームも消えるが、volumesを指定しておくとデータを永続化できる
2. コマンドについて
docker-compose up
ネットワークやボリュームを作成したり、コマンドを一括実行したりできる
このコマンド1つで複数のコマンドを実行したり、設定を反映させられる
=> サーバなどはimageからダウンロードするので、実行環境に依存しない
=> 環境構築が楽になる
docker container runで使用していた-dオプションなどを使用できる
docker-compose down
docker-compose upで立ち上げたコンテナ類をSTOPし、
ネットワークやボリュームもremoveする
docker-compose top
現在docker-composeによって立ち上がっているすべてのプロセスを確認できる
docker-compose build OR docker-compose up -b
1. イメージのダウンロードやビルドを行う(後者はビルドしてからコンテナを起動する)
2. キャッシュがある場合はキャッシュを使用するので、Dockerfileに更新がある場合は--no-cacheオプションを使用する
Discussion