docker-compose.yml備忘録
目的
docker-compose.ymlの各項目の意味を毎回忘れるので、自分のメモ用にまとめる。 もし、間違ってたらご指摘いただけるとありがたいです。
docker-compose.ymlについて
作ったymlファイル
version: '3' services: db: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: password TZ: Asia/Tokyo volumes: - db-volume:/var/lib/mysql web: build: . command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" volumes: - .:/book ports: - "3000:3000" depends_on: - db volumes: db-volume: driver: local
docker-compose.ymlとは?
dockerコンテナの起動オプションを記載したもの。
docker-compose up
等の起動コマンドを実行した際に参照され、それを元にコンテナが生成される。
qiita.com
versionとは
使用するdockerのversion。 Compose file version 3 reference | Docker Documentation
servicesとは
この配下でアプリケーションを動かすための各要素を定義する。
buildとは
要するにここに記載したPATH配下のDockerfileを参照してコンテナを作成するみたい。 build — Docker-docs-ja 17.06.Beta ドキュメント qiita.com
environmentとは
環境変数を追加する。 僕はここにdbのパスワードとDBのデフォルト時間を記載しました。
環境変数を追加します。配列もしくは辞書形式(dictionary)で指定できます。boolean 値 (true、false、yes、no のいずれか) は、YML パーサによって True か False に変換されないよう、クォート( 『 記号)で囲む必要があります。http://docs.docker.jp/compose/compose-file.html#environment
volumeとは
コンテナの外部にデータを保持するためのもの。
コンテナ破棄時もデータを残したい場合や、データを複数コンテナで共有する際に活用する。ちなみに、複数のseviceでvalumeを利用する場合、トップレベル(service配下では無く、同じ階層)に名前付きvalumeを定義し、複数serviceで共有することも出来る。
コンテナ内部にデータ(ファイル)を保存しても、コンテナ破棄すると消えてしまう。 なので、データを永続化したいときは、コンテナの外にデータを置く必要がある。 その場所のことを、ボリュームと呼ぶ。 qiita.com
volumeの存在を確認する方法。
docker volume ls
valumeの中身を確認する方法。 対象のコンテナに
docker exec -it CONTAINER_NAME bash
で接続して/var/lib/mysql
へ移動すると確認出来る。コンテナの中にあるけど、コンテナ=Valumeなの? どうやら違うっぽい。 事実、
docker volume ls
にdocker exec -it CONTAINER_NAME bash`で接続を試みたが、接続出来なかった。 (参考) Docker、ボリューム(Volume)について真面目に調べた - Qiita
driverとは
色々迷ったけど、ここの図に書いてある日本語が一番しっくりきた。 要するに↑のvolumeにアクセスする方法。だと理解している。
ストレージドライバ経由でホストのファイルシステムにアクセスして、イメージを管理する。knowledge.sakura.ad.jp
ports
Expose ports.Compose file version 3 reference | Docker Documentation と一言だけ書かれていた。the簡潔。 要は外部からアクセスするためのポートを指定している。と理解している。
commandとは
コンテナをビルドしたときに実行するコマンド qiita.com * -b '0.0.0.0'とは bindオプションの略。 0.0.0.0 はどのIPアドレスからも接続が可能という意味。 デフォルトでrails serverを--bind=0.0.0.0付きで起動する方法 - @テク野路ジーロード * ask -cとは askはシェルスクリプト。-cは通常シェルがコマンドで受け取る値を-c以下で渡される文字列で認識するというオプション。 shellの-cオプションについてUbuntuのsh(dash)、bash、zshはそれぞれ違う挙動をする - Qiita * rm -f ./tmp/pids/server.pidとは Railsのプロセスを殺す処理みたい。これが残っていると起動済みだよってエラーが出て起動出来ない。 Rails アプリケーションを Docker を使って開発する、ほとんどの人が通る(であろう)道 - Qiita
depends_on
依存関係を記載するもの。 例えばback側にdbと記載する事で、先にdbから起動される。 Compose file version 3 reference | Docker Documentation
docker-compose upとは
docker-compose.yml ファイル中で定義したサービスの開始または再起動を行う。
一般的には docker-compose up が使われるでしょう。 up を使うと docker-compose.yml ファイル中で定義したサービスの開始または再起動を行います。デフォルトは「アタッチド」モードであり、全てのコンテナのログが画面上に表示されます。「デタッチド」モード( -d )では、Compose はコンテナを実行すると終了しますが、コンテナは後ろで動き続けます。 http://docs.docker.jp/compose/faq.html#up-run-start