Concrete5(バージョン8)のDockerイメージを作成し、Docker HubにPushしました!

  |   2018/09/14 ( 2018/12/31 ) | 157 views
 0

こんにちはー、ニアです!

Dockerfile作成の復習を兼ねて作っていた、Concrete5(バージョン8)のDockerイメージ「niatn1012/concrete5」をDocker Hubに公開しました!

Concrete5は、PHPとMySQLで動作するコンテンツ管理システム(CMS)です。どちらかというとホームページやポータルサイト寄りかな。

1. イメージ構成とDockerタグ

リポジトリへのリンク Docker Hub / GitHub
OS Debian Stretch-slim
HTTPサーバー Apache 2
PHP 7.2, 7.1, 7.0, 5.6
Concrete5 v8.4.2, v8.4.1, v8.4.0,
v8.3.2, v8.2.1, v8.1.0, v8.0.3
Dockerタグ Concrete5 主なミドルウェア Dockerfileのリンク
v8.4.2-php72, v8.4.2, v8.4-php72, v8.4, v8-php72, v8, php72, latest Ver. 8.4.2 Apache2, PHP7.2 (v8.4.2-php72)
v8.4.1-php72, v8.4.1 Ver. 8.4.1 Apache2, PHP7.2 (v8.4.1-php72)
v8.4.0-php72, v8.4.0 Ver. 8.4.0 Apache2, PHP7.2 (v8.4.0-php72)
v8.3.2-php72, v8.3.2, v8.3-php72, v8.3 Ver. 8.3.2 Apache2, PHP7.2 (v8.3.2-php72)
v8.2.1-php72, v8.2.1, v8.2-php72, v8.2 Ver. 8.2.1 Apache2, PHP7.2 (v8.2.1-php72)
v8.1.0-php72, v8.1.0, v8.1-php72, v8.1 Ver. 8.1.0 Apache2, PHP7.2 (v8.1.0-php72)
v8.0.3-php72, v8.0.3, v8.0-php72, v8.0 Ver. 8.0.3 Apache2, PHP7.2 (v8.0.3-php72)
Dockerタグ Concrete5 主なミドルウェア Dockerfileのリンク
v8.4.2-php71, v8.4-php71, v8-php71, php71 Ver. 8.4.2 Apache2, PHP7.1 (v8.4.2-php71)
v8.4.1-php71 Ver. 8.4.1 Apache2, PHP7.1 (v8.4.1-php71)
v8.4.0-php71 Ver. 8.4.0 Apache2, PHP7.1 (v8.4.0-php71)
v8.3.2-php71, v8.3-php71 Ver. 8.3.2 Apache2, PHP7.1 (v8.3.2-php71)
v8.2.1-php71, v8.2-php71 Ver. 8.2.1 Apache2, PHP7.1 (v8.2.1-php71)
v8.1.0-php71, v8.1-php71 Ver. 8.1.0 Apache2, PHP7.1 (v8.1.0-php71)
v8.0.3-php71, v8.0-php71 Ver. 8.0.3 Apache2, PHP7.1 (v8.0.3-php71)
Dockerタグ Concrete5 主なミドルウェア Dockerfileのリンク
v8.4.2-php70, v8.4-php70, v8-php70, php70 Ver. 8.4.2 Apache2, PHP7.0 (v8.4.2-php70)
v8.4.1-php70 Ver. 8.4.1 Apache2, PHP7.0 (v8.4.1-php70)
v8.4.0-php70 Ver. 8.4.0 Apache2, PHP7.0 (v8.4.0-php70)
v8.3.2-php70, v8.3-php70 Ver. 8.3.2 Apache2, PHP7.0 (v8.3.2-php70)
v8.2.1-php70, v8.2-php70 Ver. 8.2.1 Apache2, PHP7.0 (v8.2.1-php70)
v8.1.0-php70, v8.1-php70 Ver. 8.1.0 Apache2, PHP7.0 (v8.1.0-php70)
v8.0.3-php70, v8.0-php70 Ver. 8.0.3 Apache2, PHP7.0 (v8.0.3-php70)
Dockerタグ Concrete5 主なミドルウェア Dockerfileのリンク
v8.4.2-php56, v8.4-php56, v8-php56, php56 Ver. 8.4.2 Apache2, PHP5.6 (v8.4.2-php56)
v8.4.1-php56 Ver. 8.4.1 Apache2, PHP5.6 (v8.4.1-php56)
v8.4.0-php56 Ver. 8.4.0 Apache2, PHP5.6 (v8.4.0-php56)
v8.3.2-php56, v8.3-php56 Ver. 8.3.2 Apache2, PHP5.6 (v8.3.2-php56)
v8.2.1-php56, v8.2-php56 Ver. 8.2.1 Apache2, PHP5.6 (v8.2.1-php56)
v8.1.0-php56, v8.1-php56 Ver. 8.1.0 Apache2, PHP5.6 (v8.1.0-php56)
v8.0.3-php56, v8.0-php56 Ver. 8.0.3 Apache2, PHP5.6 (v8.0.3-php56)
docker pull niatn1012/concrete5

2. docker-compose

Concrete5に必要なWebコンテナとMySQLコンテナを管理できるdocker-composeも用意しています。

ファイル名 対応しているConcrete5のDockerイメージ
concrete5-v8-php72-docker-compose.ja-JP.zip v8-php72
concrete5-v8-php71-docker-compose.ja-JP.zip v8-php71
concrete5-v8-php70-docker-compose.ja-JP.zip v8-php70
concrete5-v8-php56-docker-compose.ja-JP.zip v8-php56

ダウンロードしたzipファイルを解凍し、そのディレクトリ内で「docker-compose up -d」を実行するだけで、Concrete5の環境が立てられるよ!

3. 開発の裏話

3.1. きっかけは勤務先の社内ポータルの候補決め

勤め先での社内用ポータルに何を使おうかというお話があり、良さげなCMSを探しにWordPressやDrupal、Concrete5などをDocker上で動かしていました。

Concrete5にて最新のバージョン8のDockerイメージが見つからなかったので、

Nia10.png
ないのなら、自分で作ろう!

とDockerfile作成の復習も兼ねて、Concrete5(バージョン8)のDockerイメージを作成することにしました。

Nia02.png
なお、選ばれたのは綾鷹WordPressでした
Myoga04.png
えっ、WordPressってどちらかと言えばブログ寄りだよね!?
どんな感じで使うの?
Nia01.png
固定ページをメインに、社内の告知とかは投稿ページと使い分けて行こうかと

3.2. 工夫した点

OSイメージの選定〜ミドルウェアのインストールの部分を独立したDockerイメージ「niatn1012/apache_php_cc5」として共通化させることで、同一のミドルウェア構成での複数のConcrete5のバージョンをdocker pullする時の効率を向上させました。

また、万一Apacheの設定ファイル(000_default.conf)やPHPの設定ファイル(php.ini)が破損してコンテナが利用不能になった時、それらのファイルの中身を空にすることで、あらかじめイメージ内にバックアップしている設定ファイルをコピーして復元する機能を搭載しています。

3.3. 苦労した点

Dokerイメージの管理がすごく大変でした。

当初は、OSイメージを3パターン(Debian stretch-slimの他にCentOSとAlpine Linux)とPHPを4パターン(Alpine Linuxのみ1パターン)、Concrete5バージョン8の全バージョン(現時点で13パターン)を全て組み合わせたDockerイメージを構築しようとしました。
しかし、合計でなんと117個も作成する必要があり、これからのことを考えると、あまりにも多すぎて(ローカル上でもDocker Cloud上でも)ビルド作業が大変なので、必要な組み合わせの分だけを作成し、残りはGitHub上でDockerfileを公開する方針にしました。

幸い、ベースイメージの「niatn1012/apache_php_cc5」の方は全パターンがDocker Hub上に上げてあるので、ビルドするタイミングでミドルウェアのバージョンが変わっちゃうなんていう問題は起こらない・・・はず。

公開するバージョンの選定は大切ですね。

あと今回の経験で気づいたのですが、Docker Cloudの自動ビルド(Automated Builds)のビルドルール(BUILD RULES)で追加できる項目数は、1リポジトリあたり25項目までです。はじめ私は不具合かなと思っていたのですが、25項目設定されている時に試しに1項目削除したら新たに1項目が追加できたので、おそらく仕様みたいです。(※Docker Hub側の自動ビルドの方では未検証です。)

Docker HubへのPushや自動ビルド周りで色々と壁にぶつかりまくりでしたが、無事に公開することができました。
また、Docker HubDocker Cloudの基本的な使い方やShields.ioのサービスを使ったバッジの使い方など色々と良い経験になりました。

私のエンジニアキャリアとして、フロントエンド(クライアントアプリ)、サーバーサイド、データベース、インフラなどの幅広い領域で活躍できるフルスタックエンジニアを目指しており、エンジニア2年目の今はインフラやCI/CDツール周りの技術を習得すべく奮闘しています。

DockerはローカルPC上で気軽にOSイメージやミドルウェアを動かせるので、インフラ周りの勉強にもなります。

あと、せっかくConrete5を知ったので、空いた時間にちょっと使ってみようっと!

この記事をシェアする
Chronoir.netのRSSフィードを購読する

ニア(Nia)

ゲーム系の開発&運用エンジニア(目指すはフルスタック)。主にC#(Unity)/PHPを使っています。最近はDockerやKubernetes、プライベートではAndroid Wearアプリやモバイルアプリ開発(Xamarin)を探求中。好物は紅茶とコーヒー、シラス丼、趣味は写真撮影と音ゲーです

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください