DrupalがインストールされたDockerイメージを作成する
はじめに
本記事ではDrupal on Docker - Rob Knight's blogの記事をもとに、DrupalがインストールされたDockerイメージを作成する手順を説明します。本記事の説明は、読み手の端末にDockerがインストールされていることを前提としています。DockerがプリインストールされたVagrant boxは、以下のリンクより取得頂けます。(Vagrant boxファイルへの直接リンクです。私がPackerにて作成したものになります。)本記事にて記載しているコマンドは、現時点でのDockerの最新安定版である0.7.6にて動作確認を行っております。
https://s3-ap-northeast-1.amazonaws.com/yosssi/vagrant-boxes/ubuntu-13.10-server-amd64-docker.box
なお、今回作成したDockerイメージは、Docker Index上にリポジトリyosssi/lampとして格納しています。
事前準備
VagrantからDockerを起動する場合は、下記の通り、ゲストOSのポート番号80をホストOSの任意のポート番号(以下の例では8080)へ転送するようVagrantfileを設定し、Vagrantを起動します。
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.box = "ubuntu-13.10-server-amd64-docker" config.vm.box_url = "https://s3-ap-northeast-1.amazonaws.com/yosssi/vagrant-boxes/ubuntu-13.10-server-amd64-docker.box" config.vm.network :forwarded_port, guest: 80, host: 8080 end
手順
runコマンドを実行し、centosイメージをベースにコンテナを作成し、シェルを起動します。
$ docker run -i -t centos /bin/bash
コンテナ内で、必要なライブラリをインストールします。
bash-4.1# yum install httpd php php-common php-cli php-pdo php-mysql php-xml php-mbstring mysql mysql-server
コンテナのシェルを終了し、commitコマンドを実行してコンテナからイメージを作成します。
bash-4.1# exit $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b5a7b1bfaf46 centos:6.4 /bin/bash 5 minutes ago Exit 0 cranky_lumiere $ docker commit b5a7b1bfaf46 yosssi/lamp 659ab11532a0cbcd9569eef72e0f77482507a0ae2ad67b2c0227887c98028714 $ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE yosssi/lamp latest 659ab11532a0 23 seconds ago 426.8 MB centos 6.4 539c0211cd76 10 months ago 300.6 MB centos latest 539c0211cd76 10 months ago 300.6 MB
以上により、PHP、MySQL、Apacheがインストールされているyosssi/lampというイメージが作成されました。
このイメージをもとにコンテナを作成し、コンテナ上でApacheを起動します。
$ docker run -i -t -p 80:80 yosssi/lamp /bin/bash bash-4.1# /sbin/service httpd start
ブラウザよりローカルホストへアクセスし、Apacheがコンテナ上で正常に起動されていることを確認します。
コンテナのシェルを終了し、insertコマンドを実行してファイルをyosssi/lampイメージへ追加します。
bash-4.1# exit $ docker insert yosssi/lamp http://ftp.drupal.org/files/projects/drupal-7.22.tar.gz /root/drupal.tar.gz 71ebfc254213526d298719384e0fc359f43f2b24f0215d07951163cd0e8dd726 $ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE <none> <none> 71ebfc254213 4 minutes ago 430 MB yosssi/lamp latest 659ab11532a0 19 minutes ago 426.8 MB centos 6.4 539c0211cd76 10 months ago 300.6 MB centos latest 539c0211cd76 10 months ago 300.6 MB
tagコマンドを実行し、新規に作成されたイメージに対してリポジトリ、タグを設定します。
$ docker tag 71ebfc254213526d298719384e0fc359f43f2b24f0215d07951163cd0e8dd726 yosssi/lamp:drupal $ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE yosssi/lamp drupal 71ebfc254213 7 minutes ago 430 MB yosssi/lamp latest 659ab11532a0 22 minutes ago 426.8 MB centos 6.4 539c0211cd76 10 months ago 300.6 MB centos latest 539c0211cd76 10 months ago 300.6 MB
作成したイメージyosssi/lamp:drupalをベースにコンテナを作成・起動し、Drupalの設定を行います。
$ docker run -i -t -p 80:80 yosssi/lamp:drupal /bin/bash bash-4.1# tar zxf /root/drupal.tar.gz --strip=1 -C /var/www/html bash-4.1# echo "NETWORKING=yes" > /etc/sysconfig/network bash-4.1# /sbin/service mysqld start bash-4.1# mysql -uroot mysql> create database drupal; Query OK, 1 row affected (0.00 sec) mysql> grant all privileges on drupal.* to 'drupal'@'localhost' identified by 'drupal'; Query OK, 0 rows affected (0.00 sec) mysql> flush privileges; mysql> exit Bye bash-4.1# cp /var/www/html/sites/default/default.settings.php /var/www/html/sites/default/settings.php # database settingsのdatabase、username、passwordを全て 'drupal'へ修正します bash-4.1# vi /var/www/html/sites/default/settings.php bash-4.1# mkdir /var/www/html/sites/default/files bash-4.1# chown apache:apache /var/www/html/sites/default/files bash-4.1# /sbin/service httpd start
ブラウザよりローカルホストへアクセスし、Drupalのサービスへ正常にアクセスできることを確認します。