LoginSignup
64
77

More than 5 years have passed since last update.

Docker for Mac (+ Docker Compose)でいい感じのLAMP開発環境を構築する

Last updated at Posted at 2016-10-24

はじめに

以前に VagrantとDocker for Mac で〜 という記事を書きましたが、
現時点でのVagrant と Docker の組み合わせでは、若干の不具合がある事と、Dockerとは別にVagrantをインストール必要がありました。※詳しくは記事参照

そこで、今回は Docker for Mac に標準で含まれる、Docker Compose を用いて、環境を作成してみます。

Docker Compose とは?

  • 複数のコンテナを連携して利用する場合に、従来であれば、それぞれのコンテナを個別に、管理(起動・停止・構築など)していたものを、YAMLにて定義したファイルを用いて、複数コンテナを同時に管理できる仕組みです。

仕様

仕様は前回と同じですが、幾つか追加も行いました。

  • web用・DB用と、2つのコンテナを1つのdocker-compose.ymlにて定義しています。
  • docker-composeコマンドにて2つのコンテナは同時に起動・停止します。
  • ホスト(Mac)上のディレクトリを、web用コンテナ上の(Webサーバーの)ドキュメントルートにマウントし、ホスト(Mac)から直接、編集・更新ができます。
  • Apacheの設定もホスト(Mac)上から(.htaccesで変更できない項目も)追加・編集できるようにしました。
  • デバッグのため、WEBサーバーのアクセスログ・エラーログをホスト(Mac)上に出力するように変更しました。

ファイル構成

./
 ├ docker-compose.yml
 ├ web/
 │  └ Dockerfile
 ├ var/
 │  ├ logs/
 │  └ public_html/ 
 └ files/
    └ apache_conf/
       └ 00_virtualhost.conf

./docker-compose.yml

  • docker-compose にて連携を定義したファイル、詳細は後述

./web/Dockerfile

  • コンテナイメージ作成用のファイル、詳細は後述

./var/logs/

  • コンテナ内のApacheのログが保存されます。(docker-compose.ymlにて、コンテナへのマウントを定義しています、コンテナイメージのリビルドなしで変更可能です)

./var/public_html/

  • コンテナ内のApacheのドキュメントルートです。(docker-compose.ymlにて、コンテナへのマウントを定義しています、コンテナイメージのリビルドなしで変更可能です)

files/apache_conf/00_virtualhost.conf

  • Apacheの追加設定です。(docker-compose.ymlにて、コンテナへのマウントを定義しています、コンテナイメージのリビルドなしで変更可能です)

Dockerfileの詳細

オフィシャルのCentOSイメージを元に、できるだけシンプルにまとめました。

FROM centos:latest

# Install & Add repo
RUN rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
RUN rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

# Install PHP5.6 & Apache
RUN yum --enablerepo=remi-php56 install php php-devel php-gd php-xml php-mbstring php-opcache php-mcrypt php-mysqlnd -y

# Clear yum cache
RUN yum clean all

# for web
EXPOSE 80

CMD /usr/sbin/httpd -DFOREGROUND

docker-compose.yml

version: '2'
services:
  # mysql
  db01:
    image: mysql:5.6
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: root

  # web
  web01:
    build: ./web
    image: web:24
    ports:
      - "80:80"
    links:
      - "db01:db01"
    volumes:
      - ./var/public_html:/var/www/public_html
      - ./var/logs:/var/log/httpd
      - ./files/apache_conf/00_virtualhost.conf:/etc/httpd/conf.d/00_virtualhost.conf

docker-compose.ymlの解説

version: '2'

  • 記載にはVersion1/2と選択できますが、今回はVer.2を用いいました。

services: db01: / web01:

  • 稼働するサービス(コンテナ)を定義します。Ver.2での記載では必須です。

image: mysql:5.6

  • 起動するコンテナイメージを指定しています。Dockerホスト内にイメージがない場合は、自動的にDockerHUBよりダウンロードされます。

ports:

  • 各コンテナで[フォワード先のポート:(コンテナで)解放するポート]を指定 

environment:

  • コンテナ起動時に実行するコマンド(MySQLでのrootユーザーのパスワードの設定)

build: ./web

  • DockerFileの保存先を指定

image: web:24

  • build:以下のimages:にてビルド後のイメージ名の指定、Ver.2のみ記載可能

links:

  • コンテナ間のリンクの指定
    • web01コンテナとdb01をリンク
    • web01からは、ホスト名db01にてdb01に接続が可能

volumes:

  • ホスト(Mac)上のファイル・ディレクトリをコンテナ上にマウント
    • ./var/public_html:/var/www/public_html
  • ./var/logs:/var/log/httpd
  • ./files/apache_conf/00_virtualhost.conf:/etc/httpd/conf.d/00_virtualhost.conf

コンテナの起動・停止

コンテナの起動

$ docker-compose up -d

  • 初回起動時には、イメージのビルド・コンテナの起動などをdocker-compose.ymlに沿って実行します。

  • -d オプションにてコンテナをバックグラウンドで実行

コンテナの停止

$ docker-compose stop

  • 関連するコンテナが停止されます。

Apacheの設定変更

  • 00_virtualhost.conf を適時修正の上、Web01コンテナを再起動させます。
  • Web01コンテナのみの再起動は$ docker-compose restart web01 にて実施します。

利用方法

  1. ホスト(Mac)上のブラウザからlocalhostを開くとpublic_htmlに設置したファイルが見れます。
  2. PHPプログラム(web01コンテナ)からDBを参照する場合は、ホスト名にdb01を指定ください。
  3. ホスト(Mac)上からDBを参照する場合は、127.0.0.1:3306にて参照可能です。

まとめ

コンテナ上にあるApacheの設定変更の場合、設定ファイルをイメージ内に組み込んでじまうと、Dockerイメージのリビルドが必要となり、開発環境としては利便性が下がります。
そこで、今回は必要なファイルをホスト(Mac)上に置き、volumesにてマウントすることで、ファイルの修正を容易にしました。

Docker Composeは、Docker for Macに標準で含まれているため、インストールも容易で、別途インストールの必要もありません。

Vagrant との組み合わせに比べ、より簡単に開発環境が用意できるかと思います。

たぶんWindows版でも稼働可能です。

 ソース

64
77
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
64
77