LoginSignup
4
6

More than 3 years have passed since last update.

Docker Compose 入門

Last updated at Posted at 2020-02-04

Docker Compose とは

Docker Composeは、複数のコンテナで構成されるアプリケーションについて、Dockerイメージのビルドや各コンテナの起動・停止などをより簡単に行えるようにするツールです。

これまでの連載の中でも、複数のコンテナを起動させる場面がありました。その際、各コンテナを起動するために、それぞれ起動コマンドを実行する必要がありました。また、コンテナを起動する際に、いろいろなオプションを利用していました。コマンドや手順が複雑になると、他の環境で使う/使ってもらう場合に、ミスが発生しやすくなります。他の環境でも同じ構成(同じDockerイメージ)で動かせるというDockerのメリットを生かすには、起動手順なども簡単であってほしいですよね。

そこで活躍するのが、Docker Composeです。

Docker Composeでは、Dockerビルドやコンテナ起動のオプションなどを含め、複数のコンテナの定義をymlファイルに書き、それを利用してDockerビルドやコンテナ起動をすることができます。一つの簡単なコマンドで複数のコンテナを管理できるようになります。

引用: https://knowledge.sakura.ad.jp/16862/

要は 複数のコンテナを連携させたいときに楽しようよ っていうものです。

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 コマンドを使います。
updocker-compose.yml をもとに作成します。
-d で作成が完了して起動した際に自動でデタッチしてターミナルを返すようにします。

Creating mysql_playground     ... done
Creating wordpress_playground ... done
Creating pma_playground       ... done

と出力されれば成功です。

詳細な解説

docker-compose.yml
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

versiondocker-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 の連携

docker-compose.yml
version: "3"
services:
  sample:
    build: .

buildDockerfile を指定します。これは docker-compose.yml から見た Dockerfile の場所を指定します。

まとめ

$ docker run --env xxxx=xxxx --env xxxx=xxxx mysql
$ docker run --env xxxx=xxxx --env xxxx=xxxx wordpress

とかつらい思いをせずに Docker Compose を使いましょう。

4
6
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
4
6