LoginSignup
0
1

More than 1 year has passed since last update.

Docker-compose.ymlって何か難しいこと書いてるな、と思った人へ

Last updated at Posted at 2021-09-13

Docker-compose.ymlについて

Docker-composeは、複数のdockerイメージをビルドしてコンテナを作成できる。
コマンド一つで複数のコンテナを起動できる。
Docker-compose.ymlといいファイルに、コンテナの中身をサービスとして定義する。dockerイメージなどを指定する感じ。

詳しい中身

実際何を定義してるの?って話

version:

  • Dockerエンジンが1.13.1+以上がverison3.0に対応してる。
  • バージョン指定しない場合は、レガシーフォーマット である1.0となる
  • マイナーバージョンを指定しないversion: '3'とかの場合はマイナーバージョン0version: '3.0'になる。
  • 3と2で結構違うぽい。特別な理由がなければ3を使うので良いと思われる。

対応表
https://docs.docker.com/compose/compose-file/

service:

起動するコンテナに相当する。
サービス名は自分で決めて良い。
例えば公式から拝借した↓の定義だと、dbとなっている部分は自分で決めることができる。

version: "3.9"
services:

  db:
    image: postgres:9.4
    volumes:
      - db-data:/var/lib/postgresql/data
    networks:
      - backend
    deploy:
      placement:
        max_replicas_per_node: 1
        constraints:
          - "node.role==manager"

image:

Dockerイメージを使用する場合はここでイメージを指定する。

resart:

再起動設定
デフォルトはno
コンテナが終了してても再起動をするかどうか

英語↓

日本語↓

depends_on:

サービス間(コンテナ間)の依存関係を記述できる。

コンテナを起動したときは 依存されているやつ → 依存しているやつ
終了する時は 依存しているやつ → 依存されてるやつ

の順番になる

links:

コンテナ同士を連携させる。でもこれを使うのは古い。
docker-composeを使うと、自動的に連携されているので記述は不要。

ports:

ホストとコンテナのポートを対応づける。
ホスト側の値がキーで、コンテナ側の値はバリューになる。

volumes:

コンテナ内にデータをおいてもコンテナを破棄すると消えてしまうので、コンテナの外(ボリューム)におく。
やり方は、主に2種類ある。

バインドマウント

  • https://matsuand.github.io/docs.docker.jp.onthefly/storage/bind-mounts/
  • ホスト側のディレクトリをコンテナ内のディレクトリと共有する。
  • ボリュームと違って既存のディレクトリをマウントするので、ホストマシンのファイルシステムに依存することになる。従って、ボリュームを使うことが推奨されている。

ボリューム

  • https://matsuand.github.io/docs.docker.jp.onthefly/storage/volumes/
  • ホスト上(macのdockerはVMで動いてるのでVM)に新規でディレクトリが作成されて、保存領域を確保してくれる。Linux なら /var/lib/docker/volumes/以下になる。
  • 名前付きボリュームと匿名ボリュームがあり、名前付きの場合は Docker ホスト内で名前解決できるのでアクセスしやすい。匿名ボリュームは適当にハッシュ値が振られる。他のプロセスからは触ることができないので安全。基本はこれを使うのがよい。
  • docker volume lsでボリューム一覧を見ることができる。実態を見るには↓がわかりやすかった。

    [Docker for Mac] Docker Volumeの実態がどこにあるのか、探してみた|w0o0ps|note

マウントオプション

マウントオプションというものがある。
https://docs.docker.jp/docker-for-mac/osxfs-caching.html](https://docs.docker.jp/docker-for-mac/osxfs-caching.html

  • consistent :完全な一貫性(常にホストとコンテナが完全に同じ表示)
  • cached :ホストの表示が信頼できる(ホスト上の更新がコンテナ上に反映するまで、遅延が発生するのを許容)
  • delegated :コンテナの表示が信頼できる(コンテナ上の更新がホスト上に反映するまで、遅延が発生するのを許容)

environment:

環境変数。ホストじゃなくてコンテナに割り当てられる。
以下、pypmyadminとMySQLを使ったので個人的なまとめ

pypmyadminの環境変数

  • PMA_ARBITRARY:1にすると、任意のサーバーに接続できる。
  • PMA_HOST:MySQLのホスト(サービス)の名前
  • PMA_USER and PMA_PASSWORD:ユーザー名とパスワード
  • PMA_PORT:MySQLのポートを指定する

MySQLの環境変数

  • MYSQL_ROOT_PASSWORD:rootアカウントのパスワード
  • MYSQL_DATABASE:データベース名

Build:

content:

dockerfileがあるディレクトリ

dockerfile:

dockerfileの名前

args:

dockerfile内で使用する環境変数

参考

https://blog1.mammb.com/entry/2020/05/19/090000
https://qiita.com/aki_55p/items/63c47214cab7bcb027e0
https://qiita.com/gounx2/items/23b0dc8b8b95cc629f32
https://qiita.com/nacika_ins/items/cf8ceb20711bd077f770

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1