236
247

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Docker Composeを使ってLAMP環境を立ち上げる

Last updated at Posted at 2015-08-21

Docker Composeとは

Docker Hubのオフィシャルイメージを使ったLAMP環境構築でLAMP環境を構築することは出来たのですが、複数のコンテナの順番を意識して立ち上げなければならないので、手順書やシェルスクリプトなどを書く必要があり面倒です。

それを解決するためにDocker Composeというツールを使うことにしました。複数のコンテナを管理して、立ち上げる順番やコンテナに渡すパラメータを指定することができるツールです。

使ってみる

https://github.com/naga3/docker-lamp こちらに一式まとめてあります。
先にDockerとDocker Composeをインストールしておいてください。

Dockerのインストール

curl -fsSL https://get.docker.com/ | sh

参考: https://docs.docker.com/linux/step_one/

Docker Composeのインストール

curl -L https://github.com/docker/compose/releases/download/1.6.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

参考: https://docs.docker.com/compose/install/

LAMP環境の起動

適当なディレクトリで

git clone https://github.com/naga3/docker-lamp.git
cd docker-lamp/
docker-compose up -d

これでLAMPを構成する複数のコンテナが自動的に立ち上がります。
ウェブブラウザでphpinfoの画面が出ることを確認してください。
ポートがぶつかる場合は、docker-compose.ymlのportsの左側の80を変更してください。

docker-compose.yml

使うコンテナやパラメータなどを記述した手順書です。YAML形式なのでインデントに注意してください。

docker-compose.yml
version: '2'
services:
  mysql:
    build: ./mysql
    environment:
      MYSQL_ROOT_PASSWORD: pass
    volumes:
      - db:/var/lib/mysql
  php:
    build: ./php
    ports:
      - '80:80'
    volumes:
      - ./html:/var/www/html
    depends_on:
      - mysql
volumes:
  db:

docker-compose.yml : mysqlサービス

    build: ./mysql

mysql/Dockerfileの内容を元にイメージをビルドします。Dockerfileの内容については後述します。

    environment:
      MYSQL_ROOT_PASSWORD: pass

環境変数でMySQLのパスワードを指定します。docker runの-eオプションに対応します。

    volumes:
      - db:/var/lib/mysql

データベースの内容を永続化するために名前付きデータボリュームdbを設定します。docker inspectコマンドでデータボリュームの場所が分かります。

docker-compose.yml : phpサービス

    build: ./php

php/Dockerfileの内容を元にイメージをビルドします。Dockerfileの内容については後述します。

    ports:
      - '80:80'

ホスト側の80番ポートとコンテナ側の80番ポートを結びつけます。
YAMLの60進数時刻フォーマットと誤認識しないようにクォーテーションで囲んでいます。

    volumes:
      - ./html:/var/www/html

ホスト側のhtmlディレクトリをコンテナ側のドキュメントルートにマウントします。ここにコンテンツを置きます。

    depends_on:
      - mysql

phpサービスがmysqlサービスに依存していることを示します。これによりmysqlコンテナを先に立ち上げ、またphpコンテナ側からmysqlコンテナにアクセスできるようになります。

mysql/Dockerfile

FROM mysql:5.7
COPY ./my.cnf /etc/mysql/conf.d/
FROM mysql:5.7

Docker Hubの公式MySQLイメージをベースイメージとします。

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

ホスト側の./my.cnfファイルをコンテナ側の/etc/mysql/conf.d/にコピーします。/etc/mysql/my.cnfの最後にこのディレクトリをインクルードしているのでMySQL起動時に設定が反映されます。

mysql/my.cnf

[mysqld]
character-set-server=utf8

character setをUTF-8にしています。

php/Dockerfile

FROM php:7-apache
COPY php.ini /usr/local/etc/php/
RUN apt-get update \
  && apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng12-dev libmcrypt-dev \
  && docker-php-ext-install pdo_mysql mysqli mbstring gd iconv mcrypt
FROM php:7-apache

Docker Hubの公式PHPイメージをベースイメージとします。

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

ホスト側にあるphp.iniをコピーしてコンテナ側のphp.iniとして設定します。

RUN apt-get update \
  && apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev libmcrypt-dev \
  && docker-php-ext-install pdo_mysql mysqli mbstring gd iconv mcrypt

必要そうな拡張機能を導入します。docker-php-ext-installphpイメージに含まれる拡張機能を導入するユーティリティです。

php/php.ini

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

タイムゾーンとmbstringの日本語設定をします。

236
247
1

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
236
247

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?