WordPress のテーマをカスタマイズするローカル環境が欲しかった.

Docker を利用すれば, お気楽お手軽に実現できるという都市伝説を聞い た.Docker はもともと試してみたかったし, 以前 Docker Hub のアカウント も取得したのだけれども, 利用していなかった.

これを機に, Docker の勉強も兼ねて, 以下の都市伝説を検証してみた.

“WordPress ローカル環境が 3 分で構築できるか?”

Docker とは

Docker とは, OSS の Linux コンテナエンジン.

特徴

  • Go でかかれている.
  • Linux カーネルにのみ依存.
  • デプロイの作業が自動化できる.
    • github, bitbucket とも連携.
  • Docerfile によってインフラをコードとして扱える.
  • ゲスト OS がなくカーネルを共有しているのでオーバヘッドが非常に少ない
    • ディスク使用量は少ない.
    • インスタンス作成やインスタンス起動は速い
    • 性能劣化がほとんどない
  • Linux コンテナ上ならば同じ環境が再現できる (Java と同じ考え)
  • クライアント・サーバ型のアーキテクチャ

Linux コンテナとは

いくつかのユーザプロセスをまとめて閉じ込めたユーザ空間. コンテナ内で動くプロセスは通常のプロセスと同じもの.

ハイパーバイザとの比較

From: コラム - クラウド時代のオープンソース実践活用 | 第 41 回 Linux コンテナ (LXC) の基礎をまとめ直す|CTC 教育サービス 研修/ トレーニング

  • コンテナ
    • 1 つの OS.
    • カーネル空間共有, ユーザ空間が別々
  • ハイパーバイザ
    • 独立した複数 OS
    • カーネル空間, ユーザ空間が別々

Dockerfile とは

OS のスクラッチイメージからアプリが動くまでを書いたコード.

Bookmarks

Docker で Hello World

インストールから Hello, World まで.

Install

ArchLinux

  • Docker (日本語) - ArchWiki

    # インストール
    $ sudo pacman -S docker
    # サービス登録. Docker は OS のサービスとして動作する.
    $ sudo systemctl start docker
    # 動作確認 docker がクライアントコマンド
    $ dockker info
    # 一般ユーザを sudo なしで docker をつかえるようにする
    $ sudo gpasswd -a tsu-nera docker
    

使ってみる

Hello, World

まずは, 定番の Hello World をしてみる. コマンドラインから,

$ sudo docker run ubuntu /bin/echo 'Hello World'

これを叩くと, ローカルに docker のイメージがない場合は, Docker Hub か ら勝手にダウンロードしてくれる.

docker は image からコンテナを生成する. (クラスからインスタンスを生成するように)

% sudo docker run ubuntu /bin/echo 'Hello World'
Unable to find image 'ubuntu' locally
Pulling repository ubuntu
c4ff7513909d: Download complete 
er.io/v1/ 9d: Pulling image (latest) from ubuntu 
511136ea3c5a: Download complete 
1c9383292a8f: Download complete 
9942dd43ff21: Download complete 
d92c3c92fa73: Download complete 
0ea0d582fd90: Download complete 
Hello World

bash を起動

bash を起動して, インタラクティブに操作

$ sudo docker run -t -i ubuntu /bin/bash

イメージとコンテナ

現在保持している image は docker images で確認できる.

$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ubuntu              14.04               c4ff7513909d        3 days ago          213 MB
ubuntu              latest              c4ff7513909d        3 days ago          213 MB

また, 過去に生成したコンテナも含めて一覧を確認するコマンドは docker ps -a.

 % docker ps -a
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS                      PORTS               NAMES
78941163261a        ubuntu:14.04        /bin/bash              12 minutes ago      Exited (0) 11 minutes ago                       clever_perlman       
894d649c27d4        ubuntu:14.04        /bin/echo 'Hello Wor   13 minutes ago      Exited (0) 13 minutes ago                       stupefied_rosalind   
9d34b4889593        ubuntu:14.04        /bin/echo 'Hello Wor   14 minutes ago      Exited (0) 14 minutes ago                       romantic_bohr        
a986cb096871        ubuntu:14.04        /bin/echo 'Hello Wor   15 minutes ago      Exited (0) 15 minutes ago                       tender_sinoussi      
cbbca1119327        ubuntu:14.04        /bin/echo 'Hello Wor   15 minutes ago      Exited (0) 15 minutes ago                       mad_babbage          
c6824e447da7        ubuntu:14.04        /bin/echo 'Hello Wor   17 minutes ago      Exited (0) 17 minutes ago                       sleepy_bardeen       

とりあえず, すべてを一旦削除したい.コンテナをすべて削除.

$ sudo docker rm $(sudo docker ps -a -q)

続いて, イメージもすべて削除.

$ sudo docker rmi $(sudo docker images -q)

秀逸なガイダンス.

Docker Architecture.

Docker で WordPress 環境を構築

さて, 本題.

wordpress image を取得

もちろん, Docker Hub に wordpress のイメージがあった. tutum/wordpress というリポジトリが導入が導入が簡単だとの評判.

ローカル環境に落として実行.

$ sudo docker run -d -p 80:80 tutum/wordpress

まつこと数分・・・ https://localhost にアクセスしてみると・・・

インストール完了!! 都市伝説は本当だった!

ssh でもやっぱりアクセスしたい

しばらく喜んでたけど, なんだか ssh でコンテナにアクセスしたくなって きたので, 設定.

まずは, コンテナの中に入る.

$ sudo docker run -t -i tutum/wordpress /bin/bash

コンテナの中で openssh-server を立ち上げ.パスワードを設定.

apt-get install openssh-server
mkdir /var/run/sshd
/usr/sbin/sshd
passwd root
exit

root でアクセスできるように設定変更.

vi /etc/ssh/sshd_config
PermitRootLogin  yes

run.sh に sshd が勝手に起動するように修正.

vi run.sh

# 追加
/usr/sbin/sshd -D &

ここまでの作業を commit.

docker commit ${ID} tsune/wordpress

自分で作成したイメージを起動. -p 20 で ssh 用のポートを別のものに割り 当てる.

docker run -d -p 22 -p 80:80 tsune/wordpress

最後に, ifconfig で docker0 に割り当てられている ip と, docker ps で 22 に割当たっているポートナンバをしらべて, ssh.

$ ifconfig
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
inet 172.17.42.1  netmask 255.255.0.0  broadcast 0.0.0.0

$ docker ps
0.0.0.0:49157->22/tcp

$ ssh root@172.17.42.1 -p 49157

Docker 関連技術まとめ

Docker Hub

Docker コンテナをクラウドサービス上で共有できる.

Boot2Docker

Boot2Docker を利用すると, Windows 上で Docker を動かすことが可能となる. Very Cool Feature.

- Microsoft Windows - Docker Documentation

Panamax

Docker コンテナを GUI で利用することができる.Very Cool Feature.

おわりに

本当に, あっという間に WordPress の環境が手に入った. しかし, この記事を書くのに, 2 時間かかった!

プロセスは通常時のものとほぼ同等リソースを食わないというところが, VirtualBox よりも気に入った. VM 環境は重くてリソースを喰うのが嫌い.

普段 Linux を利用している自分としては, 発想次第でいろいろ応用できそうだ.