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

以上により、PHPMySQLApacheがインストールされているyosssi/lampというイメージが作成されました。

このイメージをもとにコンテナを作成し、コンテナ上でApacheを起動します。

$ docker run -i -t -p 80:80 yosssi/lamp /bin/bash
bash-4.1# /sbin/service httpd start

ブラウザよりローカルホストへアクセスし、Apacheがコンテナ上で正常に起動されていることを確認します。

f:id:kysd:20140131234331p:plain

コンテナのシェルを終了し、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のサービスへ正常にアクセスできることを確認します。

f:id:kysd:20140201001254p:plain

参考資料