🙆

docker-compose.yml書き方

2021/02/20に公開

はじめに

くーばねてすをやっつけるために新たなステージに上がるためについにdockerさんに会いに行くことにした。dockerさんと仲良くなることでコンテナシステムの仕組みの理解とくーばねてすを倒すための調査をする。まとめて構築するのにはdockerComposeを使用した。今回はdockerComposeのYAMLファイルの書き方を勉強する

概要

■dockerComposeのYAMLファイルな中身の意味
■YAMLファイルの書き方
■POINT

をまとめた(>_<)

■dockerComposeのYAMLファイルの中身の意味

https://zenn.dev/suiudou/articles/b53ec7524bef6e
で作成したdocker-compose.ymlファイルの意味を勉強する。

version: "3"①

services:②
  wordpress-db:③
    image: mysql:5.7
    networks:
      - wordpressnet
    volumes:
      - db_volume:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: myrootpassword
      MYSQL_DATABASE: wordpressdb
      MYSQL_USER: wordpressuser
      MYSQL_PASSWORD: wordpresspass

  wordpress-app:④
    depends_on:
     - wordpress-db
    image: wordpress:latest
    networks:
     - wordpressnet   
    ports:
     - 8080:80
    restart: always
    environment:
      WORDPRESS_DB_HOST: wordpress-db
      WORDPRESS_DB_NAME: wordpressdb
      WORDPRESS_DB_USER: wordpressuser
      WORDPRESS_DB_PASSWORD: wordpresspass
      
networks:⑤
  wordpressnet:
volumes:⑥
   db_volume:

①バージョンの設定
書式のバージョンの設定をする。

②全体の構成をするコンテナの設定
servicesでは全体の構成をするコンテナの設定をするという意味。

③コンテナ1
servicesで構成されるコンテナ1という意味。

④コンテナ2
servicesで構成されるコンテナ2という意味。

⑤ネットワーク
コンテナが参加するネットワークを定義する。

⑥ボリューム
コンテナが利用するボリュームを定義する。

■YAMLファイルの書き方

設定値の書き方
設定値の書き方は
①設定値:値となる

iamge:wordpress

または

iamge:
  wordpress

文字列の指定
文字列の指定は「'」「"」で囲う。

version: "3"

複数の値
複数の値の記述したいときは先頭に「-」をつける。

ports:
  - 8080:80
  - 1234:1235

コメントの書き方
「#」を先頭に書くことで行末までがコメントとみなされる。

servicesの書式
servicesでコンテナの定義をする書式は以下のようになる。

services:
  コンテナ名:
    コンテナの設定
    コンテナの設定
    コンテナの設定...
  
  コンテナ名:
    コンテナの設定
    コンテナの設定
    コンテナの設定...   

コンテナの設定一覧
|コンテナの設定|意味|
| --- | --- | --- |
|cammand|起動時のコマンドを指定|
|container_name|コンテナ名の指定|
|depends_on|ほかのサービスとの依存関係を示す。compose up/downしたときに指定したサービスが先に起動/終了するようになる|
|dns|DNSサーバーを指定する|
|env_file|指定した環境設定ファイルを読み込む|
|entrypoint|起動時のENTRYPOINTを指定する|
|environment|環境変数を指定する(Mysqlのパスワードやデータベース名など)|
|external_links|外部リンクを指定する|
|extra_hosts|外部ホストのIPアドレスを指定する。docker run --add-hostと同じ|
|iamge|利用するイメージを指定する|
|logging|ログ出力先を指定する|
|network_mode|接続するネットワークモードを指定する。|
|networks|接続するネットワークを指定する。dockerCompose.ymlファイルで指定したネットワークと「ipv4_address」「ipv6_address」を記述すると固定IPアドレスを指定することができる|
|ports|ポートのマッピングの設定をする|
|restart|コンテナの起動に失敗したときの再起動ポリシーの設定。no...何もしない。always...どんな終了ステータスでもいつも再起動する。no-failure...「0」以外のプロセスでコンテナが終了したときに再起動する。:回数で再起動の回数を指定できる|
|volumes|マウントするボリュームを指定する|

■POINT

■ネットワークの省略はできる
ネットワークの指定が省略されたときは自動的にネットワークが作成され、コンテナは生成されたネットワークに繋がるように設定される。
なのでネットワークの設定は必要がなければ指定しなくてもよい。
|設定項目|意味|
| --- | --- | --- |
|driver|ネットワークドライバを設定する|
|config|サブネットを指定する|
|external|dockerCompose外のネットワークを指定する(あらかじめ作成してから指定すること)|

■ボリュームの設定

volumes:
   db_volume:

dockerComposeで指定した名前のボリュームをあらかじめ作成していない場合は自動的に作成され、作成されたボリュームはコンテナを削除しても削除されない。
ボリュームに関するコンテナの設定
|設定項目|意味|
| --- | --- | --- |
|driver|ボリュームドライバー名|
|driver_ops|ボリュームのオプション(パス名など)|
|external|dockerCompose外のボリュームを指定する(あらかじめ作成してから指定すること)|

■dockerComposeで作成したコンテナを個別に操作する
dockerComposeで起動したコンテナを個別に操作するときは、docker-composeコマンドで操作する。

$ docker-compose [dockerComposeコマンド] コンテナ名 ...

|dockerComposeコマンド|意味|
| --- | --- | --- |
|docker-compose logs|コンテナの出力を表示する|
|docker-compose rm|停止中のコンテナを終了する|
|docker-compose run|特定のコンテナを実行する|
|docker-compose exec|コンテナ内でコマンドを実行する|
|docker-compose start|特定のコンテナを開始する|
|docker-compose stop|特定のコンテナを停止する|
dockerComposeで作成されたコンテナをdockerComposeコマンドで操作することにより、dockerCompose.ymlで指定したコンテナの依存関係が考慮される。
連携のあるコンテナは一緒に終了する。

まとめ

dockerCompose!(>_<)

Discussion