Alpine Linux + PHP5.6 の Docker コンテナで、xdebug や ssh2 モジュールをマルチステージビルドする
PHP5.6 + Apache mod_php のコンテナを、Ubuntuベースから → Alpine Linux ベースに変更した。
Alpine Linux の apk パッケージリポジトリでは、PHP5.6用の xdebug や SSH2 モジュールは無いため、PECL からソースコードを持ってきて Docker コンテナ内でビルドする必要がある。
1つの Alpine の Docker コンテナで、ビルド環境を整えて xdebug や SSH2 をインストールすると 240MB ぐらいのイメージサイズになるが、ビルド環境構築済みの Docker コンテナで必要なものだけビルドし、ビルド済みオブジェクトファイルだけを新しい Alpine ベースのイメージにコピーする方法 (マルチステージビルド) だと、Docker イメージのサイズを 50MB ぐらいに抑えられる。
ちなみに、これを書いた時点の Alpine の最終バージョンは 3.9 だが、PHP5.6系のリポジトリが充実しているのは 3.7 なので、3.7 をベースとした。
# BUILDER ( xdebug, ssh2 をビルドするため)
# php5.6 が使えるのは3.7まで
FROM alpine:3.7 as builder
MAINTAINER ytyng
# pecl コマンドは pear をインストールすると使える
RUN apk --no-cache add \
gcc\
libc-dev\
autoconf\
make\
libssh2-dev\
php5\
php5-cli\
php5-pear\
php5-openssl\
php5-dev
# そのままだと php コマンドがないため pecl できない。
RUN ln -s /usr/bin/php5 /usr/bin/php
RUN pecl channel-update pecl.php.net
# pecl でビルド
RUN pecl install xdebug-2.5.5
RUN pecl install ssh2-0.13
# 実運用コンテナ
FROM alpine:3.7
RUN apk --no-cache add \
php5\
apache2\
php5-apache2\
php5-mysql\
php5-imap\
php5-zlib\
php5-pdo_mysql\
php5-iconv\
php5-mcrypt\
php5-exif\
php5-gd\
php5-xml\
php5-cli\
php5-pear\
php5-pdo\
php5-curl\
php5-openssl
RUN mkdir /run/apache2
RUN rm /etc/apache2/conf.d/userdir.conf /etc/apache2/conf.d/info.conf
COPY --from=builder /usr/lib/php5/modules/xdebug.so /usr/lib/php5/modules/
COPY --from=builder /usr/lib/php5/modules/ssh2.so /usr/lib/php5/modules/
RUN echo "zend_extension=/usr/lib/php5/modules/xdebug.so" > /etc/php5/conf.d/xdebug.ini
RUN echo "extension=ssh2.so" > /etc/php5/conf.d/ssh2.ini
COPY site.conf /etc/apache2/conf.d/site.conf
COPY php-extends.ini /etc/php5/conf.d/php-extends.ini
EXPOSE 80 443
CMD ["httpd", "-D", "FOREGROUND"]
phpinfo() を見てみると
別コンテナでビルドしたモジュールが読み込めている。
参考までに、他のファイル
version: '2'
services:
php56-alpine:
build: .
image: php56-alpine:0.1
container_name: php56-alpine
privileged: true
ports:
- 80:80
- 443:443
volumes:
- ./src:/var/src
[date]
date.timezone = "Asia/Tokyo"
[xdebug]
xdebug.remote_enable=1
xdebug.remote_host=10.200.10.1
xdebug.remote_port=9001
xdebug.remote_autostart=0
xdebug.force_display_errors=1
xdebug.force_error_reporting=1
xdebug.idekey="PHPSTORM"
# リモートデバッグ用
# sudo ifconfig lo0 alias 10.200.10.1/24 しておく
DocumentRoot "/var/src/htdocs"
<Directory "/var/src/htdocs">
AllowOverride All
Require all granted
</Directory>
<?php
phpinfo();
Author And Source
この問題について(Alpine Linux + PHP5.6 の Docker コンテナで、xdebug や ssh2 モジュールをマルチステージビルドする), 我々は、より多くの情報をここで見つけました https://qiita.com/ytyng/items/03dbeacdaa50438414b2著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .