今回も、Docker実践ガイド 第2版 (impress top gear) を参考にDockerfileからWikipediaサイトを構築してみました。
いろいろ試行錯誤しましたが、MariaDBを含むCentOS7コンテナへのApacheコンテナからのデーターベース接続がどうしても失敗します。
そこで代替案としてMariaDBコンテナを直接runすることにしました。(mysqlデータベースの設定はしていないので問題あり)
まず、docker ネットワークを作成します。
# docker network create mw000net1
下記コマンドでMariaDBコンテナをポート指定なしで起動しています。ホストOSの永続化ボリュームは/var/lib/mysqlじゃなくて適宜、(/root/mariadb/mysql でも)作っても動きました。
# docker run -dit -e MYSQL_DATABASE=testdb -e MYSQL_USER=mariadbuser -e MYSQL_PASSWORD=mariadbuserpass -e MYSQL_ROOT_PASSWORD=mysqlPassword -v /var/lib/mysql:/var/lib/mysql:rw --name mariadb0001 --net=mw000net1 mariadb --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-authentication-plugin=mysql_native_password
コンテナ起動を確認します。
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a199e483727f mariadb "docker-entrypoint.s…" 55 minutes ago Up 55 minutes 3306/tcp mariadb0001
データベースの確認をします。
# docker exec -it mariadb0001 ls -l /var/lib/mysql
total 140560 -rw-rw----. 1 mysql mysql 18046976 Mar 24 08:36 aria_log.00000001 -rw-rw----. 1 mysql mysql 52 Mar 24 08:36 aria_log_control -rw-rw----. 1 mysql mysql 16384 Mar 24 08:50 ddl_recovery.log -rw-rw----. 1 mysql mysql 868 Mar 24 08:36 ib_buffer_pool -rw-rw----. 1 mysql mysql 100663296 Mar 24 08:38 ib_logfile0 -rw-rw----. 1 mysql mysql 12582912 Mar 24 08:36 ibdata1 -rw-rw----. 1 mysql mysql 12582912 Mar 24 08:36 ibtmp1 -rw-rw----. 1 mysql mysql 0 Mar 24 08:35 multi-master.info drwx------. 2 mysql mysql 4096 Mar 24 08:36 mysql -rw-r--r--. 1 mysql mysql 14 Mar 24 08:35 mysql_upgrade_info drwx------. 2 mysql mysql 20 Mar 24 08:35 performance_schema drwx------. 2 mysql mysql 8192 Mar 24 08:35 sys drwx------. 2 mysql mysql 8192 Mar 24 08:50 testdb
続いて、Mediawikiを含むDockerイメージ作成をDockerfileで行います。
ここで参考書と離れてMediaWiki最新版1.37.1をインストールしようとしましたが、SQLITEが古いといわれて、これもデーターベース接続できませんでした(- -);
# mkdir mediawiki # cd mediawiki # vi Dockerfile
FROM centos:7.5.1804 RUN yum -y remove php* \ && yum -y install \ http://rpms.famillecollet.com/enterprise/remi-release-7.rpm \ && yum -y install --enablerepo=remi,remi-php74 \ php php-devel php-common php-mbstring php-pdo php-gd php-xml php-mcrypt php-mysql gd-devel libxml2-devel mysql-devel php-opcache php-mysqli php-mysqlnd php74-php-mysqlnd php-fpm php-pecl-zip pkgconfig php-pear ImageMagick ImageMagick-devel ImageMagick-perl php-pecl-imagick php-pecl-apcu php-intl httpd git \ && curl -O \ https://releases.wikimedia.org/mediawiki/1.31/mediawiki-1.31.0.tar.gz \ && tar zxvf /mediawiki-1.31.0.tar.gz -C /var/www/html/ WORKDIR /var/www/html RUN ln -sf ./mediawiki-1.31.0 wiki \ && systemctl enable httpd
docker buildしてPHP, MediaWiki, ApacheコミコミのCentOS7イメージを作ります。(コーヒーでも飲んでディスプレイをゆっくり眺める余裕があります。)
# docker build -t centos:mw0001 ./
イメージが出来上がったら、linkオプションを使ってsystemd入りのCentOS7コンテナを起動。
# docker run -dit --tmpfs /tmp --tmpfs /run --mount type=bind,src=/sys/fs/cgroup,dst=/sys/fs/cgroup,readonly --stop-signal SIGRTMIN+3 -v /var/www/html --name mw0001 -h mw0001 --link mariadb0001:db0001 --net=mw000net1 -p 80:80 centos:mw0001 /sbin/init
コンテナのIPアドレスを確認します。
# docker exec -it mw0001 cat /etc/hosts
ブラウザでhttp://’mw0001コンテナのIPアドレス’/wiki に接続して設定画面に入ります。
# docker exec -it mariadb0001 cat /etc/hosts
上記コマンドで表示されるデーターベースホストのアドレス、データベース名、ユーザー、パスワードなどパラメータを入力します。(ここでのアドレスは172.21.0.2)
データーベースのホスト | 172.21.0.2 |
データーベース名 | testdb |
ユーザー名 | root |
データベースのパスワード | mysqlPassword |
最後にブラウザからダウンロードされたLocalSettings.php をホストOSにアップロードしてコンテナのルートディレクトリにコピーしてインストール完了します。
# docker cp /root/Downloads/LocalSettings.php mw0001:/var/www/html/wiki/
ブラウザでメインページが表示されれば作業終了です。
お疲れ様でした。