Dockerでamazon linux + php7 + apache2.2
イメージを作成
作業環境
Windows10 pro(64ビット)
Git Bash
※Docker For Windowsがインストール済です。
思い立ったのはプロジェクト人数が増減する中で初期のコストを抑えるためにDockerの導入を検討しました。
携わっているプロジェクトがAWSを利用していてAmazonLinuxなのでDocker Hub にOSの同じリリースバージョンも存在したこともあり目的はできる限り本番と同じ環境を作るようにするということでやってみることにしました。
※以下、コマンド実行時に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コンテナとの接続を試したいと思います。
コメント
コメントを投稿