Docker-composeを使って、PHPとMySQLを動かすために、LAMP環境を作成したので、そのcomposeファイルを元にdocker-composeの概要をまとめてみました。
Docker-composeとは
Docker-composeとは、複数のコンテナをつなげて管理することのできるツールです。
Docker-composeを使うことで、簡単にコンテナ間の通信を行うこともできます。
Dockerイメージの作成方法やコンテナ起動時の設定などを「docker-compose.yml」に記述することで、「docker compose」コマンドでまとめて操作できるようになります。
Docker-composeは設定を全てyml形式で記述します。
そのファイルをcomposeファイルといい、ここでdocker fileでイメージをビルドして、コンテナを立ち上げる事ができます。
また、環境関数を使うことも可能です。
今回はこのdokcer-composeを使って、
mysqlとphp-apache、phpmyadminのコンテナを作り、LAMP環境を作成します。
composeファイルについて
version: "3.7"
services:
mysql:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: "password"
phpmyadmin:
depends_on:
- mysql
image: phpmyadmin/phpmyadmin
environment:
PMA_HOST: mysql
restart: always
ports:
- "8080:80"
php-apache:
build: ./php
volumes:
- ./htdocs:/var/www/html
restart: always
ports:
- "80:80"
depends_on:
- mysql
volumes:
db_data: {}
上記のcomposeファイルを例に書き方の説明をします。
version
使用するDocker-composeバージョンを定義する記述です。
現在(2021年5月)は3系が最新のバージョンになります。
バージョンによって、Composeファイルの書き方変わります。
ここでは「3.7」を設定します。
services(サービス)
「サービス」は起動するコンテナーの設定の定義のことです。
ここに各コンテナーと、その設定を記述します。
サービスには名前をつけて複数定義可能で、各サービス間での通信を定義できます。
サービス名
サービスはservicesに定義する各サービスの名前です。
任意で決めることができます。
ここではmysqlとphpmyadmin、php-apacheの3つのサービスを定義します。
このサービスごとにコンテナが起動します。
image(イメージ)
イメージはDockerのコンテナーの元になるものです。
もし指定したイメージがなければbuildするときにインストールされます。
ここではmysqlとphpmyadminでそれぞれ、「mysql:5.7」と「phpmyadmin/phpmyadmin」のイメージを使用します。
volumes(ボリューム)
ボリュームにはマウントする設定ファイルのパスを指定します。
マウントとは簡単に言うとディレクトリを同期する事です。
restart
コンテナの起動に失敗したときの再起動の設定。何もしない場合は「no」を設定。
再起動する場合は「always」を設定する。
environment
環境変数を指定します。
Mysqlのパスワードやデータベース名前などを指定し、ここで設定した環境変数名は実際のプログラムでも使います。
build
Dockerファイルを使用してimageを作成するときに、使用するDockerファイルを指定します。
ここで作成したimageを使用してサービスのコンテナを立ち上げます。
ports
ポートの設定を設定します。
depends_on
ほかのサービスとの依存関係を設定します。
「compose up」と「compose down」したときに指定したサービスが先に起動/終了するようになります。
version: "3.7"
services:
mysql:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: "password"
phpmyadmin:
depends_on:
- mysql
image: phpmyadmin/phpmyadmin
environment:
PMA_HOST: mysql
restart: always
ports:
- "8080:80"
php-apache:
build: ./php
volumes:
- ./htdocs:/var/www/html
restart: always
ports:
- "80:80"
depends_on:
- mysql
「Docker-compose」コマンド一覧
コマンドの説明に関しては、こちらのサイトがわかりやすかったので、説明を引用をしています。
引用元のサイト
docker-compose build
「docker-compose build」コマンドは、サービス内のイメージに対してビルドを行います。
イメージがビルドされていないとコンテナを起動できないため、先にイメージのビルドを行います。
# サービスをビルド
$ docker-compose build
# サービスをビルド(キャッシュを使わない)
$ docker-compose build --no-cache
# サービスを指定してビルド
$ docker-compose build [サービス名]
docker-compose up
「docker-compose up」コマンドは、サービス内のイメージからコンテナを作成して起動します。
すでにコンテナが作成されている場合は、イメージを読み込み直してコンテナを再起動させます。
「-d」オプションをつけることで、バックグラウンドでコンテナを起動させることも可能です。
# サービスからコンテナを作成し、起動
$ docker-compose up -d
docker-compose logs
「docker-compose logs」コマンドは、コンテナの起動ログを出力します。
# サービスの起動ログを出力
$ docker-compose logs
docker-compose run
「docker-compose run」コマンドは、指定したサービスから新たなコンテナを作成し、コマンドを実行します。
そのため、このコマンドを実行した回数だけコンテナが増えていきます。
コンテナを増やしたくない場合は、「--rm」オプションをつけましょう。
docker-compose run --rm app rails db:create
docker-compose exe
「docker-compose build」コマンドは、指定したサービスのコンテナにログインします。
# コンテナにログイン
$ docker-compose exec app bash
docker-compose stop
「docker-compose stop」コマンドは、サービス内のコンテナを停止します。
# サービスのコンテナを再起動
$ docker-compose restart
Restarting docker_web_1 ... done
Restarting docker_app_1 ... done
Restarting docker_db_1 ... done
# 指定したサービスのコンテナを再起動
$ docker-compose restart app
Restarting docker_app_1 ... done
docker-compose rm
「docker-compose rm」コマンドは、サービス内のコンテナを削除します。
# サービスのコンテナを削除
$ docker-compose rm
Going to remove docker_web_1, docker_app_1, docker_db_1
Are you sure? [yN] y
Removing docker_web_1 ... done
Removing docker_app_1 ... done
Removing docker_db_1 ... done
# 指定したサービスのコンテナを削除
$ docker-compose rm app
Going to remove docker_app_1
Are you sure? [yN] y
Removing docker_app_1 ... done