Docker Compose とは
Docker Composeは、複数のコンテナで構成されるアプリケーションについて、Dockerイメージのビルドや各コンテナの起動・停止などをより簡単に行えるようにするツールです。
これまでの連載の中でも、複数のコンテナを起動させる場面がありました。その際、各コンテナを起動するために、それぞれ起動コマンドを実行する必要がありました。また、コンテナを起動する際に、いろいろなオプションを利用していました。コマンドや手順が複雑になると、他の環境で使う/使ってもらう場合に、ミスが発生しやすくなります。他の環境でも同じ構成(同じDockerイメージ)で動かせるというDockerのメリットを生かすには、起動手順なども簡単であってほしいですよね。
そこで活躍するのが、Docker Composeです。
Docker Composeでは、Dockerビルドやコンテナ起動のオプションなどを含め、複数のコンテナの定義をymlファイルに書き、それを利用してDockerビルドやコンテナ起動をすることができます。一つの簡単なコマンドで複数のコンテナを管理できるようになります。
要は 複数のコンテナを連携させたいときに楽しようよ っていうものです。
Docker Compose 導入
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
$ sudo gpasswd -a $USER docker
$ docker-compose -v
docker-compose version X.XX.X, build XXXXXXXX
動かしてみよう
拙作の docker-compose.yml
を実際に動かしてみたいと思います。
$ git clone https://github.com/iedred7584/DockerWordpressPlayground.git
$ cd DockerWordpressPlayground/
$ docker-compose up -d
Creating mysql_playground ... done
Creating wordpress_playground ... done
Creating pma_playground ... done
docker-compose
コマンドを使います。
up
で docker-compose.yml
をもとに作成します。
-d
で作成が完了して起動した際に自動でデタッチしてターミナルを返すようにします。
Creating mysql_playground ... done
Creating wordpress_playground ... done
Creating pma_playground ... done
と出力されれば成功です。
詳細な解説
version: "3"
services:
mysql:
image: mysql:5.7
container_name: mysql_playground
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: docker
MYSQL_DATABASE: playground
MYSQL_USER: docker
MYSQL_PASSWORD: docker
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_bin
wordpress:
image: wordpress:latest
container_name: wordpress_playground
volumes:
- ./wordpress/wwwroot:/var/www/html
- ./wordpress/backup:/tmp/backup
- ./wordpress/log:/tmp/log
ports:
- 50080:80
depends_on:
- mysql
environment:
WORDPRESS_DB_NAME: playground
WORDPRESS_DB_USER: docker
WORDPRESS_DB_PASSWORD: docker
links:
- mysql:mysql
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: pma_playground
ports:
- 50081:80
depends_on:
- mysql
environment:
PMA_HOST: mysql
PMA_PORT: 3306
PMA_USER: docker
PMA_PASSWORD: docker
links:
- mysql:db
version
は docker-compose.yml
がどのバージョンから対応させているのかを指定します。投稿日時点では 3.7
が最新です。(https://docs.docker.com/compose/compose-file/)
services
はその docker-compose.yml
で動かすものの指定です。 services
以下に mysql
wordpress
phpmyadmin
がありますが、これは
$ docker run mysql
$ docker run wordpress
$ docker run phpmyadmin
と意味合いでは同じものです。
各 services
以下の
image
は使用するイメージ
container_name
は作成したコンテナの名称を指定します。
ports
は作成したコンテナで使用するポートを指定します。
depends_on
はここで指定したコンテナが起動するのを待ってからこのコンテナを作成する指示します。
environment
は環境変数の宣言します。
links
はコンテナ間連携で連携させるコンテナ名を指定します。
Docker Compose と Dockerfile の連携
version: "3"
services:
sample:
build: .
build
で Dockerfile
を指定します。これは docker-compose.yml
から見た Dockerfile
の場所を指定します。
まとめ
$ docker run --env xxxx=xxxx --env xxxx=xxxx mysql
$ docker run --env xxxx=xxxx --env xxxx=xxxx wordpress
とかつらい思いをせずに Docker Compose を使いましょう。