概要
CircleCI2.0がリリースされて、よりDockerの必要性を感じています。
社内の基本インフラをきちっと管理する為にも、Dockerの再復習のターンがやってきました。
今回はdocker-compose.ymlの主な記法、DockerComposeの主なコマンドをまとめました。
DockerCompose概要
- ホスト上の複数のコンテナを一元管理する為のツール
- Docker社が提供
- docker-compose.ymlで設定を書く
- たこ
docker-compose.yml
DockerComposeの設定を書く為のファイル。
image / build
- ベースイメージを指定する
- buildの場合はDockerfileのパスを指定する
command
- コンテナで動かすコマンドを指定する
links / external_links
- コンテナ間のリンク連携
- 同一docker-compose.yml内にないコンテナと連携する時は、external_linksを使う
ports / expose
- コンテナが公開するポートを指定する
- ""で囲む
- "8000:80"
- コンテナポートのみを指定した場合は、ホスト側のポートはランダムで指定される
- ホスト側に連携せず、リンク機能を使って連携するコンテナにのみポートを公開する時はexposeを利用する
volumes / volumes_from
- コンテナにボリュームをマウントする時に指定する
- ホスト側とマウントする場合は、
ホスト側のパス:コンテナ側のパス
で指定する - ボリュームの後ろに
:ro
とする事で読み取り専用にする事ができる- 設定ファイルが格納されているボリュームなど
- 別のコンテナから全てのボリュームをマウントする時はvolumes_formを利用する
enviroment / env_file
- コンテナ内の環境変数を指定する
- enviromentは別ファイルの読み込みにも対応している
- env_file
container_name / labels
- DockerComposeで作成したコンテナに名前をつける
- labelsでラベルを設定する子も可能
- docker inspectで確認可能
Docker Compose コマンド
Dockerと同様にDockerComposeにもコマンドで様々な操作が行える。
ダウンロードはこちらで。
- docker-composeコマンドは、docker-compose.ymlを保存したディレクトリで発火
- -fでファイルパスを指定する事もできる
- サブコマンドの後ろにコンテナ名を付けると指定したコンテナのみを操作可能
docker-compose start web-container
up コマンド
- コンテナ群の生成+起動を行う
主なオプション
- -d
- バックグラウンドで実行
- プロンプト画面に戻る
- --no-deps
- リンクのサービスを起動しない
- --no-build
- イメージをビルドしない
- -t
- コンテナのタイムアウトを指定
docker-compose up -d
scale コマンド
- コンテナを生成する数を指定する
docker-compose scale web-container=10 db-container=20
ps / logs コマンド
- psコマンドで複数コンテナの一覧表示を行う
主なコマンド
- -q
- コンテナIDのみを表示する
docker-compose ps
- logsコマンドでログが確認できる
runコマンド
- DockerComposeで起動したコンテナで、新たにコマンドを実行したい時に指定する
docker-compose run web-container echo "hello"
start / stop / restart コマンド
- 複数のコンテナを一括で起動/停止/再起動できる
- 一部のコンテナのみももちろん可能
docker-compose stop
docker-compsose restart web-container
kill / rm コマンド
- killコマンドで実行中のコンテナを強制終了できる
- コンテナにシグナルを送る
- プロセス間で連絡を取り合う為の仕組み
- Linuxカーネルで実装されている
- コンテナにシグナルを送る
- rmコマンドで複数のコンテナを削除できる
docker kill
docker rm
あとがき
バージョンやインフラ部分で悩むのが一番嫌だし、無駄な時間だと思います。
チーム開発をより効率的にする為にもDockerでインフラ構成を可視化してきちっと管理していきたいですね。
Datadogとも連携したので、また別記事にまとめます。
amazonlinuxベースで社内開発用のDockerfile作成しました。
https://hub.docker.com/r/gemcook/development/