Docker の イメージを作ってみたい
Docker のイメージを使うのはいたって簡単だった。WordPress を使うまでを blog にまとめてみた。
Docker + WordPress 試してみた
ちょっと欲が出て、Docker のオレのイメージを作りたくなった。tutum/wordpress はよくできているのだが、パーミッションがよくない。postfix も入っていない。
tutum/lamp をパクる
パクっても訴えられたリ、涙の記者会見をする必要がないところがオープンソースのいいところ。
おおもとの tutum/lamp
今気が付いたけどパクるというより公式に Fork すればいいのか。
Dockfile を修正
tutum/lamp は
txt:Dockfile
FROM ubuntu:trusty
となっている。trusty = 14.04 のことらしいが、現時点の Docker の ubuntu:latest は 16.04 なのでそれをベースに変更を掛ける。
FROM の変更
FROM ubuntu:16.04
ついでに MAINTAINER も自分にする。まるで自分で作ったみたいに偽装する(オープンソースだから、、、いいんです)
apt-get を修正
ここでつまずいた。
RUN apt-get -qq update
RUN apt-get -q -y install supervisor git \
apache2 libapache2-mod-php \
mysql-server php-mysql pwgen php-apcu php-mcrypt
というのも PHP7 になっていた。PHP5.5 から一気に 7 へ。この先大丈夫か?と思いつつも修正。あと、勝手に
ENV DEBIAN_FRONTEND noninteractive
を削ると、mysql-server のインストールで root のパスワードを聞いてくるところで止まってしまった。コンソールからリターンを入力しても先に進まない。Ctrl-C で止めました。docker kill とかの方がスマートだったのかも。
ということで、こういうのを意味なく削らないこと。理解してから削りましょう>自分
build
tutum/lamp の環境丸ごと+一部 Dockerfile 修正。でとりあえず build する環境は出来た。
docker build -t="sinby/lamp:v161005-2" .
と、途中、何度も build 失敗。これ、最初に bash 起動して手で apt-get した方がいいことに気が付くのに 1h くらいかかった。あと、うまくいったところで、適当に commit でスナップショットをとるとかね。
docker run -it ubuntu:16.04 /bin/bash
気になるスクリプトもあるけどそのまま
もとにしたシェルプロでは MySQL のインストール時の環境を丸ごと rm して構築しなおしたり(もっとスマートな方法がありそうな)、/app とかつくってたり、シェル・プロが / に散在したりと気になるところはいくつかあるのですが、そのままです。ハイ。
MySQL 5.7 はセキュリティ・チェックが厳しい(らしい)
これで動くと思いきや、MySQL でこけていることがわかりました。まず、MySQL にroot でログインできません。これは空パスワードをうけつけなくなって、自動的にパスワードを付与したためのようです。noninteractive でパスワードを聞かなくなった代わりにめんどうなことになってしまいました。
幸い、/var/log/mysql/ の下のログに残っていました。これで入れます。本当は
sudo debconf-set-selections <<< 'mysql-server-5.6 mysql-server/root_password password your_password'
sudo debconf-set-selections <<< 'mysql-server-5.6 mysql-server/root_password_again password your_password'
とする必要があったみたいです(未確認)。よくみると 5.6 の記述です。5.7 に変えればいいのでしょうか?誰か確認してください。
次に、
CREATE USER 'admin'@'%' IDENTIFIED BY '$PASS'
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION
を mysql でログインしたうえで実行しようとすると($PASS は適当に変えている)エラーになりました。root のパスワードを変えないといけないようです。
参考:mysql5.7でパスワードを変更する
set password for root@localhost=password('passwordPASSWORD@999');
これでうまくいきました!かも。
イメージは出来たが、、、、その先が見えない
あとは自動化を本格的にして確かめて Docker hub に登録すればみんなの役に立ちそうですが、そこまでできてません。無念。
この先は恐らく Ningx への置き換えや WordPress を入れたいのですが、ちょっと無理ぽ。