※ サンドボックスとして環境構築や動作検証をしたいケースには役立ちますが、実運用時は別の記事を参考にしてください。
ホストOSと同様の操作で環境構築を何度でも試せて、フレームワーク同士の競合を回避できるサンドボックスとして Docker を利用する方法を紹介します。
ベースイメージからコンテナを作成
--privileged
をつけて /sbin/init を起動コマンドにすることで、systemctlが利用可能になります。
sudo docker run --privileged -d --name con -p 8080:80 ubuntu:16.04 /sbin/init
コンテナに入る
sudo docker exec -it con bash
必要なものをインストールする
コンテナの中で実行します。
apt update
apt upgrade -y
apt install -y vim git curl apache2 mariadb-server mariadb-client
apacheを起動する
systemctl start apache2
コミットしてコンテナをイメージ化する
念の為、環境が壊れたときにコンテナを即座に作り直すためのイメージを作っておきます。
※ run 時の起動コマンドに /sbin/init を指定しているため、exitしてもコンテナは起動したままです。
exit
ホストOSで
sudo docker commit con con
コンテナを作り直す
環境構築に失敗してコンテナを作り直す場合は、下記のコマンドを実行します。
sudo docker rm -f con
sudo docker run --privileged -d --name cake -p 8080:80 con /sbin/init
起動したら、再度apacheを起動してから環境構築に挑みます。
疎通確認
ホストOSのブラウザで http://localhost:8080/ にアクセスして、ページが表示されれば成功です。
記事を書いた理由
Googleで apache の構築手順を調べると、「httpd イメージを使ってみよう!」「docker-composeを使って〜」みたいな記事が多いです。
既存のイメージを使えばすぐに構築できますし、運用上は docker compose などを使って1プロセス1コンテナにすることで個別に最新バージョンにアップデートできるなどの利点はありますが、求めているものがそうでないことも多々あります。
例えば、自分はこのフレームワークってどんなものだろう?という単純な疑問が出たときに、その都度ホストOSを汚していたらキリがありません。だから仮想環境を使います。
とはいえ、そのフレームワーク以外の知識が求められるのが不便でならないという思いを何度もしてきました。
それを少しでも解消できればなぁと思いながら書きました。
少しでも気楽に環境構築ができる人が増えることを願っています。