検証環境
Windows10 Home Edition
VirtualBox 5.1.22
Docker version 17.05.0-ce, build 89658be
docker-compose version 1.6.2, build 4d72027
+---gae
| | docker-compose.yml
| |
| +---composer
| | Dockerfile
| |
| +---config
| |
| +---data
| | Dockerfile
| |
| +---phpcli
| | Dockerfile
| |
| +---sdk
| Dockerfile
|
+---logs
|
+---www
各種設定ファイル
gae/docker-compose.yml
version: "2"
services:
data:
build: ./data
volumes:
- ../:/data
composer:
build: ./composer
volumes_from:
- data
phpcli:
build: ./phpcli
volumes_from:
- data
sdk:
build: ./sdk
volumes:
- ./config/:/home/docker/.config
volumes_from:
- data
ports:
- "8080:8080"
- "8000:8000"
gae/composer/Dockerfile
FROM php:5.5.34
LABEL maintainer "takaya030"
WORKDIR /tmp
RUN apt-get update -y && \
apt-get install -y git unzip sudo && \
apt-get clean
RUN useradd -d /home/docker -m -s /bin/bash -u 1000 -g 50 docker
RUN curl -sS https://getcomposer.org/installer | php && \
mv composer.phar /usr/local/bin/composer && \
composer self-update
ENV COMPOSER_HOME /home/docker/.composer
RUN sudo -u docker composer global require hirak/prestissimo
RUN mkdir -p /data/www
VOLUME ["/data"]
WORKDIR /data/www
USER 1000
ENTRYPOINT ["composer"]
CMD ["--help"]
gae/data/Dockerfile
FROM busybox
LABEL maintainer "takaya030"
RUN mkdir -p /data
VOLUME ["/data"]
CMD ["true"]
gae/phpcli/Dockerfile
主に artisan コマンドを実行するためのイメージです
FROM php:5.5.34
LABEL maintainer "takaya030"
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 && \
apt-get clean
RUN mkdir -p /data/www
VOLUME ["/data"]
WORKDIR /data/www
ENTRYPOINT ["php"]
CMD ["--version"]
gae/sdk/Dockerfile
FROM google/cloud-sdk:alpine
LABEL maintainer "takaya030"
RUN apk add --update --no-cache --virtual .persistent-deps \
ca-certificates \
curl \
tar \
libpng \
libxml2 \
sudo \
xz
RUN apk add --no-cache --virtual .build-deps \
autoconf \
dpkg-dev dpkg \
file \
g++ \
gcc \
libc-dev \
make \
pcre-dev \
pkgconf \
re2c \
coreutils \
curl-dev \
libedit-dev \
libxml2-dev \
libpng-dev \
sqlite-dev \
libressl \
libressl-dev \
zlib-dev \
&& curl -Lso php-5.5.34.tar.gz http://jp2.php.net/get/php-5.5.34.tar.gz/from/this/mirror && \
tar xvzf php-5.5.34.tar.gz && \
cd php-5.5.34 && \
./configure --prefix=/usr/local/php-5.5.34/ \
--enable-bcmath \
--enable-calendar \
--enable-ftp \
--enable-mbstring \
--enable-opcache \
--enable-phar \
--enable-soap \
--enable-sockets \
--enable-zip \
--disable-fileinfo \
--disable-flatfile \
--disable-posix \
--with-curl \
--with-gd \
--with-openssl \
--without-sqlite3 \
--without-pdo-sqlite \
--without-imap \
--without-kerberos \
--without-imap-ssl \
--without-interbase \
--without-ldap \
--without-mssql \
--without-oci8 \
--without-pgsql \
--without-pear \
--with-pdo-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-mysql=mysqlnd \
--with-config-file-path=/etc && \
make && make install && \
cp ./php.ini-production /etc/php.ini && \
cd .. && \
rm -r php-5.5.34 php-5.5.34.tar.gz \
&& apk del .build-deps
RUN sed -i -e "s/;date.timezone *=.*$/date.timezone = Asia\/Tokyo/" /etc/php.ini
RUN ln -s /usr/local/php-5.5.34/bin/php /usr/local/bin/php && \
ln -s /usr/local/php-5.5.34/bin/php-cgi /usr/local/bin/php-cgi && \
ln -s /usr/local/php-5.5.34/bin/php-config /usr/local/bin/php-config && \
ln -s /usr/local/php-5.5.34/bin/phpize /usr/local/bin/phpize
RUN gcloud components install app-engine-php
RUN adduser -S -u 1000 -g 50 docker \
&& echo 'docker:tcuser' | chpasswd
RUN sudo -u docker gcloud config set core/disable_usage_reporting true && \
sudo -u docker gcloud config set component_manager/disable_update_check true && \
sudo -u docker gcloud config set metrics/environment github_docker_image
RUN mkdir -p /data/www
VOLUME ["/data","/home/docker/.config"]
WORKDIR /data/www
USER 1000
CMD ["dev_appserver.py","--php_executable_path=/usr/local/bin/php-cgi","--host","0.0.0.0","--admin_host","0.0.0.0","./"]
イメージのビルド
gae ディレクトリに移動後、以下のコマンドでイメージをビルドします。
$ docker-compose build
Lumen のインストール
イメージビルド後、以下のコマンドで Lumen をインストールします。(www フォルダにインストールされます)
後述する GaeSupportLumen を使用する場合 Lumen 5.1 が必要なため下記の通り "v5.1.4" を指定します。
$ docker-compose run --rm composer create-project laravel/lumen . v5.1.4
GaeSupportLumen のインストール
Lumen インストール後、以下のコマンドで GaeSupportLumen をインストールします。
$ docker-compose run --rm composer require shpasser/gae-support-lumen:~1.0
$ docker-compose run --rm composer require illuminate/mail:~5.0
bootstrap/app.php を下記の通りに変更します。
--- bootstrap\app.php.orig Mon Aug 03 21:56:04 2015
+++ bootstrap\app.php Sat Jun 24 10:43:33 2017
@@ -19,7 +19,7 @@
realpath(__DIR__.'/../')
);
-// $app->withFacades();
+$app->withFacades();
// $app->withEloquent();
@@ -80,6 +80,7 @@
// $app->register(App\Providers\AppServiceProvider::class);
// $app->register(App\Providers\EventServiceProvider::class);
+$app->register(Shpasser\GaeSupportLumen\GaeSupportServiceProvider::class);
/*
|--------------------------------------------------------------------------
以下のコマンドで GAE の各種設定を行います。
$ docker-compose run --rm phpcli artisan gae:setup --config my-gae-project
gcloud の初期設定
以下のコマンドで gcloud の初期設定を行います。この操作は一回実行するだけで OK です
$ docker-compose run --rm sdk gcloud config set core/disable_usage_reporting true
$ docker-compose run --rm sdk gcloud config set component_manager/disable_update_check tru
e
$ docker-compose run --rm sdk gcloud config set metrics/environment github_docker_image
gcloud info で設定内容が確認できます
$ docker-compose run --rm sdk gcloud info
Starting gae_data_1
Google Cloud SDK [162.0.0]
Platform: [Linux, x86_64] ('Linux', 'f857ebb6463e', '4.4.66-boot2docker', '#1 SMP Fri May 5 20:44:25 UTC 2017', 'x86_64', '')
Python Version: [2.7.13 (default, Dec 22 2016, 09:22:15) [GCC 6.2.1 20160822]]
Python Location: [/usr/bin/python2]
Site Packages: [Disabled]
Installation Root: [/google-cloud-sdk]
Installed Components:
gsutil: [4.27]
core: [2017.07.07]
app-engine-python: [1.9.57]
gcloud: []
bq: [2.0.24]
System PATH: [/google-cloud-sdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin]
Python PATH: [/google-cloud-sdk/lib/third_party:/google-cloud-sdk/lib:/usr/lib/python27.zip:/usr/lib/python2.7:/usr/lib/python2.7/plat-linux2:/usr/lib/python2.7/lib-tk:/usr/lib/python2.7/lib-old:/usr/lib/python2.7/lib-dynload]
Cloud SDK on PATH: [True]
Kubectl on PATH: [False]
Installation Properties: [/google-cloud-sdk/properties]
User Config Directory: [/home/docker/.config/gcloud]
Active Configuration Name: [default]
Active Configuration Path: [/home/docker/.config/gcloud/configurations/config_default]
Account: [None]
Project: [None]
Current Properties:
[metrics]
environment: [github_docker_image]
[core]
disable_usage_reporting: [true]
[component_manager]
disable_update_check: [true]
Logs Directory: [/home/docker/.config/gcloud/logs]
Last Log File: [/home/docker/.config/gcloud/logs/2017.07.19/13.19.29.094936.log]
git: [git version 2.11.2]
ssh: [OpenSSH_7.4p1, LibreSSL 2.4.4]
更新履歴
- (2017/07/19) gclod config のフォルダを volume 指定するように変更。gcloud の初期設定を追加
- (2017/06/27) composer の hirak/prestissimo プラグインが機能していなかったのを修正