gotoshin

主に学んだ事の自分メモ用です。記事に書くまでも無いような事はhttps://scrapbox.io/study-diary/に書いてます。

docker-compose.yml備忘録

目的

docker-compose.ymlの各項目の意味を毎回忘れるので、自分のメモ用にまとめる。 もし、間違ってたらご指摘いただけるとありがたいです。

docker-compose.ymlについて

作ったymlファイル

rails×mysqlという環境を想定。

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 f:id:hatehate-nazenaze:20191222212303p:plain

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