Help us understand the problem. What is going on with this article?

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 の文字を眺めましょう。
お疲れ様でした!

idom
自動車流通業界の常識を覆すビジネスに挑戦し、ITを活用して移動という手段に新たな価値を創出することをミッションとしています。
https://221616.com/idom/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away