Docker ComposeでLAMP環境構築


はじめに

Dockerを勉強しているので、メモも兼ねて自分なりの解釈を記事に残していこうと考え、投稿しています。
勉強途中のため、間違っている部分、非効率な部分などなどあると思います。その際は、ご指摘いただけたら嬉しいです。

本投稿の行うこと

Docker Composeを用いてLAMP環境を構築する

Docker Composeとは

複数のDockerコンテナを同時に連携して動かしたい時に使います。
Dockerコンテナ一つに対して一つのサービスが望ましいため、LAMP環境のような複数のサービスを同時に起動する環境を整える場合はDocker Composeを使用するのが望ましいです。

もちろんDocker Composeを使用しなくても、一つのコンテナにLAMP環境を構築することもできます。

Docker Composeの基礎知識

Dockerで一つのコンテナを作成する場合、「Dockerfile」が設計図となり、そこに記述されている内容をもとに環境が構築されます。
複数のコンテナを一括で作成して連携していくDocker Composeでは、「docker-compose.yml」が設計図となります。
各種コマンドを使用する場合は、「docker-compose.yml」ファイルが置かれているディレクトリで実行する必要があります。

LAMP環境を構築

ディレクトリ構成
/ -- docker-compose.yml
               web-php/ -- Dockerfile
                  html/ -- index.html

ファイルを準備する

docker-compose.yml
docker-compose.yml
# docker-composeファイル形式のバージョンを示す
version: '3'

services:
  # webという名称のサービスを定義している
  web-php:
    # buildで指定されたディレクトリにあるDockerfileを使用する
    build: ./web-php
    # コンテナ名を指定する
    container_name: web-php
    # volumesでディレクトを指定することで、ローカルディレクトリとコンテナ内を同期できる
    volumes:
      - ./html:/var/www/html
    # このサービスが公開するポート番号を指定する | ホスト側のポート番号:コンテナ内のポート番号 |
    ports:
      - "8080:80"
    # depends_onでサービス間の依存関係を指定できる(dbコンテナが起動してからweb-phpコンテナが起動する)
    depends_on:
      - db

  db:
    # imageでDockerfileを使用せずにyml内で直接イメージを指定できる
    image: mysql:5.7
    # コンテナ名を指定する
    container_name: db
    # environmentで環境変数を定義する
    environment:
      - MYSQL_ROOT_PASSWORD=password
Dockerfile
Dockerfile
FROM php:7.3-apache
index.html
index.html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>Test Page Welcome!</h1>
</body>
</html>
ポイント
  • docker-compose.yml
    volumesを設定し、ローカルとコンテナ内を同期することで、ローカルで書いたソースコードを即時反映してデバックなどが可能。

  • Dockerfile
    docker-composeでもDockerfileを使用することができるので、細かいコンテナの操作(RUN COPYなど)を実行することができる

Docker Composeを使用する

ファイルが準備出来たら、以下のコマンドを実行してコンテナを作成・起動しましょう。

docker-compose up -d

これで、「docker-compose.yml」に記述した二つのコンテナ(web-php・db)が起動している。
以下のコマンドで確認することができる。

# 現在起動中のコンテナを閲覧
docker-compose ps

# 作成済みのコンテナ(停止中を含む)を閲覧
docker-compose ps -a
localhostにアクセス

localhostにアクセスできれば構築成功です。

http://localhost:8080

今後の課題

・php.iniをdockerの利点を活用してスマートに作成する方法を学習する。
・dockerを使用してLaravelの環境を構築できるようになる。

参考情報