LoginSignup
0
0

More than 1 year has passed since last update.

docker-composeのcomposeファイルの書き方【LAMP環境構築ベース】

Last updated at Posted at 2021-06-08

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ファイルについて

docker-compose.yml
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」したときに指定したサービスが先に起動/終了するようになります。

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

0
0
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
0
0