# Docker compose で LAMP 環境作成

複数プロジェクト同時開発やメンバー間の環境統一に便利な docker が普及しています。コンテナ仮想化を用いてアプリケーションを開発・配置・実行する作業は、AWS、GCP の運営にも役に立つので、ウェブ開発において docker は必須スキルといってもいいくらい重要です。

Docker Compose とは

複数のコンテナを定義し実行する Docker アプリケーションのためのツールです。Compose においては YAML ファイルを使ってアプリケーションサービスの設定を行います。コマンドを1つ実行するだけで、設定内容に基づいたアプリケーションサービスの生成、起動を行います。

docker-compose コマンドは Docker Compose のバイナリで Docker コンテナ上の複数のサービスを管理できます。

Docker compose 特徴

  • 単一ホスト上で、複数の環境を分離
  • コンテナ作成時にボリューム・データの保持
  • 変更のあったコンテナのみ再作成
  • 環境間で変数の共有

# 作成する LAMP docker compose の全体構造

  • db
    • Dockerfile
    • my.cnf
    • docker-entrypoint-initdb.d
      • data
        • dump_data.sql
      • 01_create_databasess.sql
  • web
    • Dockerfile
    • php.ini
    • vhost.conf
  • html
    • index.php
  • docker-compose.yml

コンテナ立ち上げ後 db ディレクトリの下に database ディレクトリが作成されます。

# docker-compose ファイル作成

環境

  • Docker Compose 3.x
  • Docker Engine 19.03.0+

docker-compose.yml

version: "3"
services:
  db:
    build: ./db
    ports:
      - "3306:3306"
    volumes:
      - ./db/database:/var/lib/mysql
      - ./db/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
    #   MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
  web:
    build: ./web
    ports:
      - "8080:80"
    restart: always
    volumes:
      - ./html:/var/www/html
    depends_on:
      - db
    environment:
      DB_HOST: db
      DB_PORT: 3306
      DB_USERNAME: wordpress
      DB_PASSWORD: wordpress

# database コンテナ Dockerfile 設定

db/Dockerfile

FROM mysql:5.7
MAINTAINER docker-db

RUN useradd -m new_user && \
echo "new_user:password" | chpasswd

COPY ./my.cnf /etc/mysql/conf.d/my.cnf

Mysql 設定ファイル

db/my.cnf

[mysqld]
default_authentication_plugin = mysql_native_password
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
character-set-server=utf8mb4

[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

# web コンテナ Dockerfile 設定

web/Dockerfile

FROM php:7.4-apache
MAINTAINER docker-web

RUN apt-get update \
  && apt-get install -y zlib1g-dev libpq-dev mariadb-client unzip libzip-dev\
  && docker-php-ext-install zip pdo_mysql mysqli \
  && docker-php-ext-enable mysqli

RUN ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load
RUN ln -s /etc/apache2/mods-available/vhost_alias.load /etc/apache2/mods-enabled
RUN echo ServerName $HOSTNAME:80 > /etc/apache2/conf-available/fqdn.conf && a2enconf fqdn

COPY ./vhost.conf /etc/apache2/sites-available/vhost.conf
RUN a2ensite vhost.conf

COPY ./php.ini /usr/local/etc/php/

WORKDIR /var/www/html

PHP 設定 ini ファイル

web/php.ini

[Date]
 date.timezone = "Asia/Tokyo"
[mbstring]
 mbstring.internal_encoding = "UTF-8"
 mbstring.language = "Japanese"

Apache virtualHost 設定

web/vhost.conf


<VirtualHost *:80>
    ServerName localhost
    DocumentRoot "/var/www/html/"
</VirtualHost>

<VirtualHost *:80>
    ServerName test.local
    DocumentRoot "/var/www/html/"
</VirtualHost>

# テスト用の index ページを作成

html/index.php

<?php

echo phpinfo();

# コンテナ立ち上げ

docker-compose up -d

docker-compose up が実行されたときに、Compose はアプリケーション全体を起動・実行し、以前にコンテナ build したことがあれば、そのコンテナから新しいコンテナにボリュームコピーします。

コンテナ立ち上げのライフサイクル

  1. サービスの開始、停止、再構築
  2. 実行中のサービスの状態を表示
  3. 実行中のサービスのストリーム・ログ出力
  4. サービス上で1回限りのコマンドを実行

# コンテナ閉じる  DB クリーンアップ

docker-compose down --volumes

--volumes オプションでコンテナとデフォルトネットワーク、データベース削除します。

コンテナにアクセスする

# web bash
docker-compose exec web bash

# database mysql
docker-compose exec db mysql

# docker compose コマンドとオプション

使い方

docker-compose [-f=<引数>...] [オプション] [コマンド] [引数...]
docker-compose -h|--help

# コマンド

コマンド 説明
build サービスの構築または再構築
config compose ファイルの確認と表示
create サービスの作成
down コンテナ・ネットワーク・イメージ・ボリュームの停止と削除
events コンテナからリアルタイムにイベントを受信
help コマンド上でヘルプを表示
kill コンテナを kill (強制停止)
logs コンテナの出力を表示
pause サービスを一時停止
port ポートに割り当てる公開用ポートを表示
ps コンテナ一覧
pull サービス用イメージの取得
restart サービスの再起動
rm 停止中のコンテナを削除
run 1度だけコマンドを実行
scale サービス用コンテナの数を指定
start サービスの開始
stop サービスの停止
unpause サービスの再開
up コンテナの作成と開始
version Docker Compose のバージョン情報を表示

# オプション

簡略 フルコマンド 説明
-f --file FILE 別の compose ファイルを指定 (デフォルト: docker-compose.yml)
-p --project-name NAME 別のプロジェクト名を指定 (デフォルト: directory name)
--verbose 詳細情報を表示
-v --version バージョンを表示して終了
-H --host HOST 接続先のデーモン・ソケット
--tls TLS を使う;--tlsverify の指定も含む
--tlscacert CA_PATH この CA で署名した証明書のみ信頼
--tlscert CLIENT_CERT_PATH TLS 証明書ファイルへのパス
--tlskey TLS_KEY_PATH TLS 鍵ファイルへのパス
--tlsverify TLS を使いリモートを認証
--skip-hostname-check クライアントの証明書で指定されたデーモンのホスト名を確認しない。

※ 複数の -f 設定ファイルを指定した場合、Compose は1つの設定ファイルに連結します。

2022-02-18
  • server
  • docker
レンタルサーバー エックスサーバー レンタルサーバー エックスサーバー DMM fx DMM fx 開発/運用エンジニア募集プログラム 開発/運用エンジニア募集プログラム 外為ジャパンFX 新規口座開設促進 外為ジャパンFX 新規口座開設促進 eBay公式ショッピングサイト Qoo10 eBay公式ショッピングサイト Qoo10 Amazon.co.jpのカテゴリごとのページ

関連記事

DDNS 無料ダイナミック DNS サービス 4 つ
Nginx 設定 Web サーバー バーチャルホスト
Docker WSL2 Laravel sail
SPF メール送信なりすまし対策
Windows Mac Linux hosts ファイル場所
AWS Unresolved resource dependencies [AWSEBV2LoadBalancer] エラー
ディスク容量を確認する df コマンド
Laravel Address already in use の原因
content-security-policy 設定
AWS Elastic Beanstalk php.ini 設定変更
AWS Elastic Beanstalk 環境設定
AWS のタイムゾーンを UTC 協定世界時から JST 日本標準時に変更
Docker の基本的な使い方
Amazon DynamoDB 制限調査
AWS 504 Gateway Timeout エラー対応
Shell と Bash のいろいろ
Mac ターミナル SSH 接続設定
Elastic Beanstalk \$\SERVER['REMOTEADDR'] 取得できない
crontab 設定いろいろ
AWS EC2 の amazon-linux-extras の話
デプロイツール Capistrano
解決! xserver php バージョンアップした時に ssh 環境に反映されない
youtube 見れるように vpn サーバー建ててみた
xserver に vim インストール
xserver に nodejs インストール
レンタルサーバーなら xserver おすすめ理由
Docker command でドッカー練習する時のメモ
Windows10 Home に Docker 入れた時のメモ
Centos7 Webserver 構築の時のメモ