Dockerfileは過去2回のアウトプットを経て何となく理解出来ました。
今後はDocker以外の学習を進める際にコンテナ化することを意識すればよりDockerを深く学べると考えています。
今回はDocker-Composeの話となります。
複数のイメージを1つに束ねて誰でも同じ開発環境を構築
Dockerfileでビルドしたイメージは容量を小さく、命令はシンプルの方が良いため、1つのアプリケーションを作成する場合は複数イメージになることも多いです。
その複数イメージを1つに束ねて、初期設定も兼ねた詳細な定義はDocker-Composeで行います。
イメージでは各種ツールのバージョンの指定やインストールコマンド、環境変数などそのツールで絶対行う設定までを定義
Docker-Composeでそのイメージ群の実行や公開ポート・ビルドの設定、開発環境特有の初期設定(DBにテストデータ入れるとか)を行います。
そして、何でもかんでもDocker-Composeまで用意する必要は無く、1つのDockerfileで完結出来るなら不要です。
よく使うコマンド
- docker-compose up -d
- docker-compose stop
- コンテナを停止。再開する場合はstart
- docker-compose down
- コンテナを破棄。
- ネットワークは削除されるが、ボリュームは削除されない。
- ボリュームを削除する場合は「docker volume」
docker-compose.yml 構文メモ
depends_on
コンテナ間の依存関係を表す。
よく意味する依存関係ではなく、「depends_on で設定したコンテナが起動していたら起動する」というもの。
dockerfile
設定するDockerfile名。
指定すべきはDockerfile名のみでありディレクトリのパスはcontextを利用します。
context
上記、dockerfileで指定するDockerfileのディレクトリのパス。
docker-compose.ymlがあるパスが初期設定のためそこから辿ります。
その他
docker-compose.ymlの推奨として、サービス名(servicesやwebなど)とそのディレクトリは統一した方が良いです。
例えば「web:」というサービス名を使う場合はディレクトリ名も「web」となります。