■ はじめに
https://dk521123.hatenablog.com/entry/2020/04/11/000000
の続き。 今回は、docker-compose.yml の書き方について、掘り下げる。
目次
【1】docker-compose.yml の大項目 1)version 2)services 3)networks 4)volumes 【2】その他の構成 1)depends_on 2)ports 3)enviroment / env_file 4)privileged 5)container_name 6)image 7)hostname 8)build 【3】サンプル 1)ファイル構成 2)サンプル 3)実行および確認
【1】docker-compose.yml の大項目
* 以下で構成。 ~~~~~~ 1)version 2)services 3)networks 4)volumes ~~~~~~
イメージ
version: "3" # Versionを書く services: # コンテナ情報を書く networks: # ネットワーク情報を書く volumes: # ボリューム情報を書く
1)version
* docker-composeのバージョン * 以下で最新を選べばよさそう
https://docs.docker.com/compose/compose-file/#compose-and-docker-compatibility-matrix
例
version: "3.8"
2)services
* 立ち上げる docker コンテナ(子要素に複数書く)
例
version: "3.8" services: app: # サービス名 "app" を定義 # ... db: # # サービス名 "db" を定義 # ...
3)networks
* ネットワーク情報を記載
4)volumes
* パスをボリュームとしてマウント
【2】その他の構成
1)depends_on
* Serviceの依存関係
例
version: "3.8" services: app: # ... # dbが依存していることを明示指定している depends_on: - db db: # ...
2)ports
* ポートの指定
例
# ... ports: # ポート5000(外部)がきたら、ポート5000(内部)を使う - 5000:5000 # ... ports: # ポート15432(外部)がきたら、ポート5432(内部)を使う - 15432:5432
3)enviroment / env_file
* どちらも環境変数の追加 * env_file は、外部ファイルから追加する
例
environment: - HELLO: "Hello" - WORLD: ${WORLD} env_file: - ./enviroment.env # [enviroment.env] # USER_NAME="user001" # USER_PASSWORD="password"
4)privileged
* 特権(privileged)モードになり、 Dockerコンテナ内でさらにDockerコンテナを立てられる
例
privileged: true
5)container_name
* コンテナ名
例
container_name: "Hello-World"
6)image
* Docker イメージ名を指定 * ローカルに存在しなければ、イメージをリモートからpullする
7)hostname
* ホスト名を指定
例
hostname: "localhost"
8)build
* Dockerfile のあるディレクトリのパスを指定
【3】サンプル
1)ファイル構成
develop/ |- docker-compose.yml |- Dockerfile |- requirements.txt |- app/ | |- app.py |- conf/ |- db.env
2)サンプル
docker-compose.yml
version: "3.8" services: app: build: context: . dockerfile: ./Dockerfile command: python3 app/app.py depends_on: - db volumes: - ./app:/app ports: - 5000:5000 db: image: postgres:latest container_name: postgresql ports: - 15432:5432 env_file: - ./conf/db.env environment: POSTGRES_USER: root POSTGRES_INITDB_ARGS: "--encoding=UTF-8" restart: always user: root volumes: - ./initdb:/docker-entrypoint-initdb.d volumes: database: driver: local
Dockerfile
FROM ubuntu:latest RUN apt-get -o Acquire::Check-Valid-Until=false -o Acquire::Check-Date=false update && apt-get install python3 python3-pip -y WORKDIR /code ADD requirements.txt /code RUN pip3 install -r requirements.txt RUN mkdir /app
conf/db.env
POSTGRES_PASSWORD=password
requirements.txt
Flask
app/app.py
from flask import Flask import os import socket app = Flask(__name__) @app.route("/") def hello(): html = "<h3>Hello World!</h3>" return html.format() if __name__ == "__main__": app.run(host='0.0.0.0', port=80)
3)実行および確認
[1] コンテナを立ち上げる
docker-compose up -d
[2] ブラウザで確認
* 以下のURLでブラウザ表示する
参考文献
https://qiita.com/yuta-ushijima/items/d3d98177e1b28f736f04
https://y-ohgi.com/introduction-docker/3_production/docker-compose/
関連記事
Docker compose ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2022/04/28/000000
Docker compose ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2022/05/21/222910
Docker compose ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2020/04/11/000000
Docker compose ~ docker-compose.yml ~
https://dk521123.hatenablog.com/entry/2020/12/18/152949
Docker ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2020/04/24/160044
Docker ~ 基本編 / Dockerfile ~
https://dk521123.hatenablog.com/entry/2020/04/14/000000
Docker ~ 基本編 / dockerコマンド ~
https://dk521123.hatenablog.com/entry/2020/04/13/000000