Dockerであそぶ(8)docker-composeでコンテナをまとめて管理
ここ1,2年で注目を集めている仮想化技術の1つ「Docker」について、今更感がありますが試していきたいと思います。
他の仮想化技術との違いや特徴、開発環境として使っていくにはどうすればいいかなどを紹介していきたいと考えています。
これまでの連載
- Dockerであそぶ(1)DockerToolboxのインストール
- Dockerであそぶ(2)Centos7を実行する
- Dockerであそぶ(3)Apacheを使う
- Dockerであそぶ(4)Apacheの設定を変える
- Dockerであそぶ(5)Apache-PHP連携
- Dockerであそぶ(6)Apache-PHP-Mariadb連携
- Dockerであそぶ(7)PhpMyAdminのインストール
- Dockerであそぶ(8)docker-composeでコンテナをまとめて管理 ← 本記事!
- Dockerであそぶ(9)AWS EC2でdocker-composeを使う
- Dockerであそぶ(10)docker-machineを使ってAWS(EC2)にDockerホストを構築する
はじめに
前回までにLAMPの実行・開発環境を作ることができました。
しかし、それぞれの役割毎に3つのコンテナを作成しているため、起動や停止のときにコマンドを多数実行しなければならず、順番を間違えるとエラーが発生してしまいます。さらに覚えるにはやや長いコマンドのため必ずしも扱いやすいものではありませんでした。
コンテナ名 | 役割 | コマンド |
---|---|---|
my-mariadb1 | DBサーバー | docker run -it -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=docker -e MYSQL_USER=docker -e MYSQL_PASSWORD=docker –name my-mariadb1 mariadb:latest |
my-php1 | WEBサーバー | docker run -it -d -p 80:80 -v //c/Users/sudoy/Documents/docker/php/public-html/:/var/www/html –name my-php1 –link my-mariadb1 my-php |
my-phpmyadmin1 | PhpMyAdminサーバー | docker run –name my-phpmyadmin1 -d –link my-mariadb1:db -p 8080:80 phpmyadmin/phpmyadmin |
そこで登場するのが「docker-compose」です。(以前はfigと呼ばれていました。)
コンセプトは非常に単純で、これまで「docker run」コマンドのオプションとして設定されていたものを、YAML形式の設定ファイルに記述し管理することができます。
起動するときは単に「docker-compose up」とすればよく、起動順などもYAMLの設定ファイルから自動的に解釈してくれるという優れものです。
ディレクトリ構成を整える
前回までに作成した上記のコンテナが起動しているようでしたら、止めておきましょう。
sudoy@SUDOY-NOTE MINGW64 ~/Documents/docker/php $ docker stop my-phpmyadmin1 my-phpmyadmin1 sudoy@SUDOY-NOTE MINGW64 ~/Documents/docker/php $ docker stop my-php1 my-php1 sudoy@SUDOY-NOTE MINGW64 ~/Documents/docker/php $ docker stop my-mariadb1 my-mariadb1
新しく「techpjin-lamp」などのサービス名を冠したフォルダを新しく作成し、その中に使用してたファイル一式(私たちの場合はphpフォルダ)を移動します。
もし、他にも独自にビルドしたコンテナ(Dockerfile)があれば、「techpjin-lamp」フォルダの中に移動します。
phpの動作確認やmariadbとの連携確認をした際にスクリプトが作成してありますので、出来上がるフォルダツリーは以下のようになるかと思います。
c:\users\sudoy\documents\docker\techpjin-lamp │ docker-compose.yml │ └─php │ Dockerfile │ └─public-html db.php index.php
「techpjin-lamp」フォルダ直下の「docker-compose.yml」はこのあと作成します。
docker-compose.ymlファイルの作成
「techpjin-lamp」フォルダの中にdocker-compose.ymlファイルを作成し、以下のように記述します。
my-mariadb: image: mariadb:latest environment: - MYSQL_ROOT_PASSWORD=root - MYSQL_DATABASE=docker - MYSQL_USER=docker - MYSQL_PASSWORD=docker ports: - "3306:3306" my-php: image: my-php ports: - "80:80" volumes: - /c/Users/sudoy/Documents/docker/techpjin-lamp/php/public-html:/var/www/html links: - my-mariadb my-phpmyadmin: image: phpmyadmin/phpmyadmin ports: - "8080:80" links: - "my-mariadb:db"
YAML書式はほぼ「docker run」コマンドのオプションと連動しているため、戸惑うところは特にないかと思います。
それぞれのコンテナに名前(my-mariadbやmy-php)を付けて、それぞれどのイメージを使い、オプションには何を使うかを指定していきます。
あらかじめイメージをビルドしていれば、my-phpのように独自のイメージを指定することもできますし、以下のように指定することでビルド作業自体もdocker-composeに任せてしまうこともできます。
my-php: build: ./php
あとは「docker-compose.yml」ファイルのあるフォルダをカレントにして、「docker-compose up」コマンドを実行するだけです。
sudoy@SUDOY-NOTE MINGW64 ~/Documents/docker $ cd techpjin-lamp/ sudoy@SUDOY-NOTE MINGW64 ~/Documents/docker/techpjin-lamp $ docker-compose up Creating techpjinlamp_my-mariadb1_1 Creating techpjinlamp_my-phpmyadmin1_1 Creating techpjinlamp_my-php1_1 .. 中略 ..
phpやphpmyadminにアクセスできるか試してみてください。
停止するには、「CTRL+C」を押下します。
バッググラウンドで起動するには「-d」オプションを指定すればOKです。
よく使うサブコマンド
docker-composeでよく使うサブコマンドの一覧です。
サブコマンド | 概要 |
---|---|
docker-compose build | 「image:」の代わりに「build: |
docker-compose pull | 使用するイメージの中にダウンロードしていないものがあればダウンロードする |
docker-compose up -d | バックグラウンドで関連するコンテナを全て起動する |
docker-compose stop | 関連するコンテナをまとめて停止する |
docker-compose ps | 関連するコンテナの情報をまとめて一覧表示する |
docker-compose rm | 関連するコンテナをまとめて削除する |
今回はここまでにしておきます。