php_modが非推奨になったのね

昔のバージョンのphp環境でphpバージョンを上げるという対応中。 apache + PHP8のインスタンスを構築してドキュメントルートまで到達を確認。 対応する人にドキュメントルートまで到達するからプロジェクトのファイルを置いてバージョンアップのエラーを確認してもらうため依頼しましたが HTTP 503 Service Unavailable のエラーが出ているとのこと。 HTMLファイルはアクセスできているからPHPの実行ができていないと思い調べると Apache HTTP サーバーで使用するために PHP に提供されている mod_php モジュールが非推奨になりました。 php-fpmをインストールして起動し、リクエストを流してphp-fmpでphpを実行するようにして解決。 しばらくPHPを触っていなかったのでモジュールが非推奨になったことに気づかずでした。

Dockerを利用してamazon linux + php7 + apache2.2 の環境を構築

Dockerでamazon linux + php7 + apache2.2

イメージを作成

作業環境
Windows10 pro(64ビット)
Git Bash
※Docker For Windowsがインストール済です。

思い立ったのはプロジェクト人数が増減する中で初期のコストを抑えるためにDockerの導入を検討しました。
携わっているプロジェクトがAWSを利用していてAmazonLinuxなのでDocker Hub にOSの同じリリースバージョンも存在したこともあり目的はできる限り本番と同じ環境を作るようにするということでやってみることにしました。

まずはDocker Hubのamazonlinuxイメージをpullしてくる。

※以下、コマンド実行時にwinptyを付けて実行するようにメッセージが出るときがありますがwinptyはここではあえて省略します。出現時は先頭につけてください。
(winpty docker pull *** みたいに頭につけて実行します。コマンドプロンプトでは出ませんでした。)

#  docker pull amazonlinux:2017.09

※イメージ名:タグ名で指定します。指定しない場合はlatestになります。
※今回は環境を合わせるために指定しています。


任意の位置にDockerfileを作成

>>>>start fileここからファイルの内容です>>>>
> FROM amazonlinux:2017.03
>
> RUN yum update -y && \
>        yum clean all
> ## httpd
> RUN yum install -y httpd && \
>        yum clean all
>
> ### php70 prepare
> ## epel
> RUN yum install -y epel-release && \
>        yum clean all
> RUN sed -i -e "s/enabled *= *1/enabled=0/g" /etc/yum.repos.d/epel.repo
> ## remi
> RUN yum install -y http://rpms.famillecollet.com/enterprise/remi-release-6.rpm && \
>        yum clean all
> RUN sed -i -e "s/enabled *= *1/enabled=0/g" /etc/yum.repos.d/remi.repo
>
> ## php70 install
> # need library
> RUN yum install -y --enablerepo=epel --disablerepo=amzn-main libwebp && \
>         yum clean all
> RUN yum install -y libtiff libXpm libpng libwebp freetype fontconfig compat-libtiff3 libevent libtool-ltdl libxslt libedit compat-gmp4 && \
>        yum clean all
>
> #install gd-last
> RUN yum install -y --enablerepo=remi,remi-php70,epel --disablerepo=amzn-main gd-last && \
>        yum clean all
>
> # install php70
> RUN yum install -y --enablerepo=remi-php70,remi,epel --disablerepo=amzn-main php php-cli php-common php-gd php-mbstring php-mcrypt php-mysqlnd php-pdo php-pecl-igbinary php-pecl-memcached php-process php-xml php-gmp && \
>        yum clean all
> RUN echo "show text hellow." >> /var/www/html/index.html
<<<<end fileここまでのファイルを作ってください<<<<<<

 # docker build amazonlinux:apache2.2-php70

これでオリジナルのAmazon Linux + php7.0 + apache2.2 のイメージファイルが作成されました。

# docker run -it -p 8080:80 --name test amazonlinux:php70-apache2.2
ログインします
bash # /etc/rc.d/init.d/httpd start

http://localhost:8080

こちらでDokerfileに記述したテキストのページが表示されるはずです。
※コンテナ起動の際にhttpdの同時起動がまだできていないので手動実行です。。



以下補足です

Dockerfile作成中に躓いたこと
インストールするパッケージにより変わりますがDockerfileはまず素のamazonlinuxコンテナを立ち上げてそこで実際にコンテナ内にてインストールを試して依存関係のエラーを確認しながら作業しDokerfileに落とし込みました。

素のamazonlinuxからイメージ作成する場合の躓いた点は素のamazonlinuxのコンテナ内で

# yum install -y httpd

こちらを実行すると

udevd[114]: worker [174] did not accept message -1 (Operation not permitted), kill it

udevd[114]: worker [174] terminated by signal 9 (Killed)

とメッセージがループします。詳細は調べていませんが解決はまずはDockerfileで

>>>>>>>>ファイル内容>>>>>>>>>>
FROM amazonlinux:2017.03

RUN yum update -y && \
    yum clean all
## httpd
RUN yum install -y httpd && \
    yum clean all
<<<<<<<<ファイル内容<<<<<<<<<<

# docker build -t amazonlinux:apache2.2 .

のように初めにhttpdのイメージコンテナを作成してそこでphpのインストール作業してください。amazonlinux:apache2.2内でphpのインストールをしながらphp70+apache2.2のDockerfileを作成し、改めて上にあげた成功のものにたどり着きました。


もう一つ躓いたのは依存関係で足りないパッケージ等がありエラーがあると

REPOSITORY          TAG                 IMAGE ID 
<none>              <none>              ********

こんなイメージができてしまいます。成功コマンドをDokerfileに記録していけば問題ありません。

一部記憶のメモで手書きのためミスがありましたら申し訳ありません。

次は、プロジェクトファイルのマウントとmysqlコンテナとの接続を試したいと思います。

コメント

このブログの人気の投稿

nginxで画像が表示されない。。

AWSのS3バケットをマウントするs3fsでマウントが外れた件

CakePHP3でHTTPSにする