Dockerのインストールが終わってしまえば後はDocker Hubから
使いたいDockerイメージを持ってきてコンテナを作成するだけなのですが・・・・
Concrete5のコンテナを作成するときに問題があったため少しメモを。。。
1.発覚した問題
Concrete5の移行手順を調べているときに分かったのですが・・・
最新の5.7では下位互換がなくなっていたのです!!
今運用しているのは5.6・・・これじゃ移行できないよ・・・・・
5.6を探すもなかなか見つからず・・
さらにDocker Hub上のconcrete5のイメージは大半が本家のソースをDLして作られているために
運よく5.6のイメージが見つかっても日本語表示に不安が・・・・
2.だったら作ればいいじゃない!
そんなわけで、Concrete5のイメージは自分で作成することにしました。
で、作成したDockerfileが以下
FROM chriswayg/apache-php RUN apt-get update && \ apt-get install -y wget unzip php5-mysql php5-gd && \ apt-get clean && \ apt-get -yq autoremove && \ rm -rf /var/lib/apt/lists/* RUN cd /tmp && \ wget -O concrete.zip http://concrete5-japan.org/index.php/download_file/view/1920/45/ && \ unzip concrete.zip && \ rm /tmp/concrete.zip && \ cp -rp /tmp/concrete5.6.3.4.ja/* /var/www/html && \ chown www-data:www-data -R /var/www/html && \ chmod 777 -R /var/www/html/config && \ chmod 777 -R /var/www/html/files && \ chmod 777 -R /var/www/html/packages && \ chmod 777 -R /var/www/html/themes && \ chmod 777 -R /var/www/html/updates && \ rm -rf /var/www/html/index.html RUN echo php_value default_charset UTF-8 >> /var/www/html/.htaccess && \ echo php_value mbstring.language neutral >> /var/www/html/.htaccess && \ echo php_value mbstring.internal_encoding UTF-8 >> /var/www/html/.htaccess && \ echo php_flag mbstring.encoding_translation Off >> /var/www/html/.htaccess EXPOSE 80 443
GitHub⇒gittrname/concrete56-ja
バージョン番号などがファイルに含まれる場合は、
バージョンアップ時に変わることを考慮した作りにするのですが今回は考慮していません。
(5.6がバージョンアップされることはそうそう無いでしょう)
このDockerfileをbuildすることでイメージが作成されます。
3.docker-composeで一括作成
最後に自前のDockerfileと公式のMySQLイメージを使って
Concrete5のコンテナ環境を作成していきましょう。
- フォルダの構成
以下のようにファイルを配置します。
作業Root/ ├ docker-compose.yml ├ concrete56-ja/ | └ Dockerfile └ mysql/ └ initdb.d/ └ create_concrete_database.sql
- docker-compose.ymlの中身
version: '2' services: ##################### # concrete5.6-ja ##################### concrete: build: concrete56-ja container_name: concrete links: - mysql ##################### # mysql ##################### mysql: image: mysql/mysql-server container_name: mysql volumes: - mysqldata:/var/lib/mysql - ${PWD}/mysql/initdb.d:/docker-entrypoint-initdb.d environment: - MYSQL_ROOT_PASSWORD={rootユーザーのパスワード} volumes: mysqldata: driver: local
MySQL公式コンテナはdocker-entrypoint-initdb.d配下のSQLやシェルスクリプトをコンテナ作成時に実行するので
それを利用し初期DBと接続用ユーザーの作成を行っています。
SQLはこんな感じ
-- Concrete CREATE DATABASE IF NOT EXISTS concrete CHARACTER SET utf8; GRANT all ON concrete.* TO 'concrete'@'%' identified by 'concrete';
linksでMySQLコンテナを指定していますので、
IPアドレスを調べなくてもコンテナ名を使ってDockerコンテナ間の通信が可能になっています。
あとは、docker-compose.ymlファイルがある階層で
docker-composeを起動するだけでビルドからコンテナ作成まで一通りやってくれます。
// コンテナ起動 $ docker-compose up -d // 起動確認 $ docker ps -a
作成が終わったら公式のインストール手順に従ってブラウザから初期設定を行うだけです。