Dockerfileの記事を以前書きましたが、今回はdocker composeに関して、学んだことをまとめておきたいと思います。
Docker Compose
簡単に言うと、複数のDockerコンテナを一括で設定することができるツールです。定義や設定はYAMLファイルで記述します。このYAMLファイル1つで複数のDockerコンテナの設定や構築が1コマンドで可能になります。便利ですね!
Overview of Docker Compose | Docker Documentation
実行の流れ
まずは設定ファイルとなるYAMLファイルの作成を行います。docker-compose.yml
ファイルを作成します。(基本的な書き方は後述します。)
・docker-compose.yml
書き方の例
version: '3' services: web: build: . ports: - "5000:5000" volumes: - .:/code - logvolume01:/var/log links: - redis redis: image: redis volumes: logvolume01: {}
このファイルが存在するディレクトリ上で docker-compose up
コマンドを実行することで環境を構築することができます。-d
オプションを付けることで、バックグランド実行が可能です。
バックグラウンドで実行した場合、docker-compose stop
コマンドでバックグランド実行を止めることができます。
docker-compose.ymlの基本的な書き方
Docker ComposeのYAMLファイルの書き方について、基本的なことをまとめておきます。
image
イメージIDやイメージ名を指定する。指定されたイメージを元にDockerコンテナを作成する。イメージタグも指定可能。
build
Dockerfileのパスを指定する。指定されたDockerfileのビルドを行い、Dockerコンテナを作成する。
command
Dockerのイメージを実行時、イメージにあるデフォルトコマンドを指定したコマンドに上書きする。
ports
Dockerコンテナが公開するポート番号を指定する。[HOST:CONTAINER]と指定するか、Dockerコンテナのポート番号のみ指定する。
volumes
マウントするボリュームの指定を行う。(- /var/lib/mysql )ホストマシンのマウントのパスとコンテナのディレクトリパスを指定可能(- HOST:CONTAINER ) [HOST:CONTAINER:ro]とすることでアクセスモードを読み取り専用にできる。
links
別のDockerコンテナへリンクさせる。[SERVICE:ALIAS]とすることでエイリアス名をコンテナ名に付ける事が可能。
expose
ホストへのポート公開をせずに内部のみにポートを公開する。リンク機能を用いて連携するコンテナのポートを公開するときなどに使用する。(例:データベースサーバー)
environment
環境変数を追加するときに使用する。配列形式かハッシュ形式で指定が可能です。
environment: RACK_ENV: development SHOW: 'true' SESSION_SECRET:
environment: - RACK_ENV=development - SHOW=true - SESSION_SECRET
docker-composeコマンド
docker-composeのコマンドを簡単にまとめておきます。
- up コンテナの作成と起動
- stop コンテナの停止
- run コンテナの実行
- rm 停止しているコンテナの削除
- restart コンテナの再起動
- ps コンテナの一覧表示
- kill コンテナの強制停止
- logs コンテナのログ出力
まとめ
Dockerは開発などに使用するときにとても便利なツールですので、今後積極的に使っていきたいと思っています。 今回はDocker Composeの基本的な事柄をまとめました。他にも学んだことがあれば書き足していこうと思います。