Laravel 5Day 22

DockerでLaravel5のWelcome画面を表示する

More than 3 years have passed since last update.

Docker で Laravel5 のWelcome画面を表示するところまでを書いていこうと思います。

今回は CoreOS のオフィシャルイメージをもとにして、あれやこれやと自分で Dockerfile を書いてコンテナ立てていきます。

・・・が、自分は Docker 歴1週間ちょっとのひよっこなので間違ってたりするかもしれませぬ。

そんなときは容赦なく突っ込んでいただけると助かります。


用意するもの


  1. docker engine


    • これがなくちゃ始まらないです



  2. docker-compose


    • 複数コンテナの管理をいい感じにやってくれます



  3. DockerHub アカウント


    • AutomatedBuilds を使ってDockerfileからイメージをビルドします



  4. GitHub or Bitbucket アカウント


    • DockerHub の AutomatedBuilds は GitHub や Bitbucket への push をフックしてイメージをビルドしてくれます




今回の環境

今回は Vagrant で CoreOS の VM をたて、Docker ホストとして利用します。

{VM_HOST} - {CoreOS} - {Docker Container} という感じですね。


VM_HOST のディレクトリ構成

$HOME/Dockerfiles - Dockerfile を格納します

$HOME/projects - プロジェクトを格納します
$HOME/vagrant - CoreOS のVagrantfileなどが格納されています


CoreOS の Vagrantfile

デフォルトから変更したのは以下の部分です。

プロジェクトのディレクトリと Dockerfile のディレクトリを sync させ、ポートも8080ポートを VM の80ポートにフォワーディングしています。

$shared_folders = {

'/home/ta/Dockerfiles' => '/home/core/Dockerfiles',
'/home/ta/projects' => '/home/core/projects',
}
$forwarded_ports = {
'80' => '8080'
}


リポジトリ作成

GitHub または Bitbucket に Dockerfile 用のリポジトリを作成します。

DockerHub ではあるリポジトリに push があると、その中の Dockerfile を全てビルドしているようなので、1Dockerfile 1リポジトリにしたほうがいいと思います。


まずは PhpInfo を表示してみる


各種コンテナのベースとなるコンテナを作成する


Dockerfileの作成

CentOS オフィシャルのイメージから、各種コンテナのベースとなるイメージを作成します。

$HOME/Dockerfiles/centos67-base/Dockerfile を以下のように作り centos67-base リポジトリに push します。

FROM centos:6.7

MAINTAINER {NAME} <{EMAIL}>

RUN yum -y update
RUN yum -y groupinstall "Base" "Development tools"
RUN yum clean all

RUN groupadd www-data
RUN useradd -d /home/www-data -g www-data -r -s /sbin/nologin www-data


AutomatedBuilds

DockerHub へ行き、イメージをビルドしてもらいます。


  1. アイコンの右に Create => Create Automated Build を選択します。
    ※このとき GitHub か Bitbucket のアカウントをリンクしていなければリンクするよう聞かれます。


  2. centos67-base を選択


  3. Short Description になにか適当に入力


  4. Create ボタンをクリック


  5. Build Settings タブを選択し、Trigger ボタンをクリック

あとはBuild Details のStatusがSuccessに変わるまでのんびり待ちましょう。


PHPコンテナを作成する


Dockerfileの作成

さきほど作成したベースコンテナをもとにPHPコンテナを作ります。

$HOME/Dockerfiles/php7-centos67/Dockerfile$HOME/Dockerfiles/php7-centos67/etc/php-fpm.conf/www.conf をそれぞれ以下のように作ります。

FROM miyamotota/centos67-base:latest

MAINTAINER {NAME} <{EMAIL}>

RUN yum install -y epel-release
RUN wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
RUN rpm -Uvh remi-release-6*.rpm
RUN yum --enablerepo=remi-php70 update php\*
RUN yum --enablerepo=remi-php70,epel install -y php php-cli php-common php-mbstring php-fpm php-gd php-gmp php-mbstring php-mcrypt php-opcache php-pdo php-xml php-mysql
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

COPY ./etc/php-fpm.d/www.conf /etc/php-fpm.d/

EXPOSE 9000
CMD ["php-fpm", "--nodaemonize"]

www.conf は以下の箇所を変更しました。

user = www-data

group = www-data
listen = [::]:9000
listen.owner = www-data
listen.group = www-data


DockerHub で Build

先ほどの手順と同様にビルドします。


nginx コンテナの作成

こちらもベースコンテナをもとに Dockerfile を作成します。

$HOME/Dockerfiles/nginx-php/Dockerfile

FROM miyamotota/centos67-base:latest

MAINTAINER {NAME} <{EMAIL}>

RUN rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
RUN yum -y install nginx && yum clean all

COPY ./etc/nginx/nginx.conf /etc/nginx/
COPY ./etc/nginx/conf.d/default.conf /etc/nginx/conf.d/

EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

設定ファイルは以下の2つを作成します。

$HOME/Dockerfiles/nginx-php/etc/nginx/conf.d/default.conf

$HOME/Dockerfiles/nginx-php/etc/nginx/nginx.conf


DockerHub で Build

これも PHPコンテナと同様に DockerHub でビルドします。


storage コンテナの作成

index.php を保存するコンテナを作ります。

$HOME/Dockerfiles/storage/Dockerfile

FROM miyamotota/centos67-base:latest

MAINTAINER {NAME} <{EMAIL}>

VOLUME /var/www/html

index.php と テスト用の html ファイルはひとまずこのリポジトリの中に含めてしまいます。

index.php

test.html


コンテナをリンクするための docker-compose.yml の作成

docker-compose.yml を作成します。

今回は $HOME/Dockerfiles/compose/phpinfo.yml として作成します。

www-storage:

image: miyamotota/storage:latest
volumes:
- ../storage/var/www/html:/var/www/html:ro

phpfpm:
image: miyamotota/php7-centos67:latest
ports:
- "9000:9000"
volumes_from:
- www-storage

nginx:
image: miyamotota/nginx-php:latest
ports:
- "80:80"
volumes_from:
- www-storage
links:
- phpfpm:php_host


CoreOS で docker-compose

もうすぐ PhpInfo が見れます。

cd $HOME/vagrant して vagrant up して vagrant ssh で VM に入ります。

そして、 cd Dockerfiles/compose/ したら docker-compose -f ./phpinfo.yml up -d を実行。

http://localhost:8080 にアクセスすると PhpInfo がみれると思います。

また、 http://localhost:8080/test.html も問題なくみれるはずです。

さらにローカルで index.php や test.html を変更すると Docker 上のファイルも変更されるので、再度読み込むと変更が反映されています。

なお、コンテナの停止は docker-compose -f ./phpinfo.yml stop で行えます。



Laravel5 の welcome.blade.php を表示する


Laravel5 プロジェクトの作成

$HOME/projects 配下に l5 という名前の Laravel5 プロジェクトを作成しておきます。


Dockerfile の作成

ここでは nginx-php コンテナに手を加えて Laravel 用の設定ファイルを配置した nginx コンテナを作っていきます。

$HOME/Dockerfiles/nginx-laravel5/Dockerfile

FROM miyamotota/nginx-php:latest

MAINTAINER {NAME} <{EMAIL}>

RUN rm /etc/nginx/conf.d/*
COPY ./etc/nginx/conf.d/laravel.conf /etc/nginx/conf.d/

CMD ["nginx", "-g", "daemon off;"]

$HOME/Dockerfiles/nginx-laravel5/etc/nginx/conf.d/laravel.conf はこのようにしました。

こちらも例によって DockerHub でビルドしておきましょう。


docker-compose.yml の作成

Laravel 用の docker-compose.yml を作成します。

www-storage:

image: miyamotota/storage:latest
volumes:
- ../storage/var/www/html:/var/www/html:ro
- ../../projects/l5:/opt/l5

phpfpm:
image: miyamotota/php7-centos67:latest
ports:
- "9000:9000"
volumes_from:
- www-storage

nginx-laravel5:
image: miyamotota/nginx-laravel5:latest
ports:
- "80:80"
volumes_from:
- www-storage
links:
- phpfpm:php_host

今回は $HOME/Dockerfiles/compose/laravel-test.yml として作成しました。

PhpInfo のときと異なるのは VOLUME ディレクトリが増えたことと、image を nginx-laravel5 に変更したことの2つです。


docker-compose

ビルドが完了したら Docker ホストに入り、docker-compose -f ./laravel-test.yml up -d を実行します。

http://localhost:8080/l5/ にアクセスして Laravel5 の文字を眺めましょう。

お疲れ様でした!