今更ながらDockerについて整理してみる[docker-compose / ネットワーク]
概要
前回・前々回でmac上での操作、Dockerfileの作り方についてまとめた。
Dockerfileもとにdocker build
でコンテナイメージを作成して、docker run
コマンドでコンテナを立ち上げているが、docker run
コマンドでは、ボリュームやポート番号やユーザーなどなど色々とオプションで渡す必要がある。
逐一書いていては面倒だし、同一ホストで複数コンテナを立ち上げる場合などはとても面倒である。
ということで、そう言う時に使用するのが、docker-compose
コマンドである。
なお、実環境においては、docker-composeは単一ホストでしか機能しないため、 冗長性やスケーリングの面で不十分である。 (その辺はゆくゆくECSやEKSのまとめでも書いてみよう...)
あくまで手元のオペレーションを効率化するというような視点で捉えるべきである。
1. 基本例
$ docker run --name docker_nginx --env env_key=env_value -p 9090:80 -v ${pwd}:/usr/share/nginx/html nginx
上のdocker run
コマンドをdocker-compose
で書くと以下。
- version
- 使用しているdockerエンジンによって異なる(ドキュメント参照)
- services ... ここの下にコンテナの種類ごとに書いていく
- nginxの箇所 ... サービス名を宣言
- image ... コンテナイメージを指定。
docker run
コマンドの引数 - container_name ... --nameオプションに対応
- environment ... --envオプションに対応
- ports ... -pオプションに対応
- volumes ... -vオプションに対応
- command ...
docker run
コマンドの第二引数に相当
version: "3.8" services: nginx: image: nginx:latest container_name: docker_compose_nginx environment: - env_key=env_value ports: - "80:80" volumes: - ${PWD}:/usr/share/nginx/html:ro
docker-composeファイルを元にコンテナ起動するコマンドは以下
- -f ... docker-compose.ymkのパスを指定
- up ... 起動
- down ... 停止
- logs ... ログを表示
- --follow ... tailできる
$ docker-compose -f docker-compose.yaml up $ docker-compose -f docker-compose.yaml down $ docker-compose -f docker-compose.yaml logs --follow # --followがあるとtailできる
2. 複数コンテナを書く
docker-composeではservices以下に複数のコンテナを記載することも可能である。
version: "3.7" services: nginx: image: nginx:latest container_name: docker_compose_nginx environment: - env_key=env_value ports: - "80:80" volumes: - ${PWD}:/usr/share/nginx/html:ro ubuntu: image: ubuntu container_name: docker_compose_ubuntu ports: - "8080:8080"
3. コンテナをレプリケーションする
docker-compose up
する際に--scaleオプションでコンテナのレプリケーションが可能である。
$ docker-compose -f docker-compose.yaml up --scale nginx=3
以下の点に注意
- port番号を範囲にする
- container_nameをつけることはできない
version: "3.7" services: nginx: image: nginx:latest environment: - env_key=env_value ports: - "80-85:80" volumes: - ${PWD}:/usr/share/nginx/html:ro