WordPress のテーマをカスタマイズするローカル環境が欲しかった.
Docker を利用すれば, お気楽お手軽に実現できるという都市伝説を聞い た.Docker はもともと試してみたかったし, 以前 Docker Hub のアカウント も取得したのだけれども, 利用していなかった.
これを機に, Docker の勉強も兼ねて, 以下の都市伝説を検証してみた.
“WordPress ローカル環境が 3 分で構築できるか?”
Docker とは
Docker とは, OSS の Linux コンテナエンジン.
- Official: Docker - Build, Ship, and Run Any App, Anywhere
- github: docker/docker
- Docker - Wikipedia
特徴
- Go でかかれている.
- Linux カーネルにのみ依存.
- デプロイの作業が自動化できる.
- github, bitbucket とも連携.
- Docerfile によってインフラをコードとして扱える.
- ゲスト OS がなくカーネルを共有しているのでオーバヘッドが非常に少ない
- ディスク使用量は少ない.
- インスタンス作成やインスタンス起動は速い
- 性能劣化がほとんどない
- Linux コンテナ上ならば同じ環境が再現できる (Java と同じ考え)
- クライアント・サーバ型のアーキテクチャ
Linux コンテナとは
いくつかのユーザプロセスをまとめて閉じ込めたユーザ空間. コンテナ内で動くプロセスは通常のプロセスと同じもの.
ハイパーバイザとの比較
From: コラム - クラウド時代のオープンソース実践活用 | 第 41 回 Linux コンテナ (LXC) の基礎をまとめ直す|CTC 教育サービス 研修/ トレーニング
- コンテナ
- 1 つの OS.
- カーネル空間共有, ユーザ空間が別々
- ハイパーバイザ
- 独立した複数 OS
- カーネル空間, ユーザ空間が別々
Dockerfile とは
OS のスクラッチイメージからアプリが動くまでを書いたコード.
Bookmarks
- 今からでも間に合う Docker の基礎. コンテナとは何か, Dockerfile とは何か. Docker Meetup Tokyo #2 - Publickey
- Docker とは何か? どこで使うべきか? | SOTA
Docker で Hello World
インストールから Hello, World まで.
Install
ArchLinux
-
# インストール $ 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)
Links
秀逸なガイダンス.
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
Links
Docker 関連技術まとめ
Docker Hub
Docker コンテナをクラウドサービス上で共有できる.
- https://hub.docker.com/
- Docker Hub 発表. ビルド, テスト, デプロイの自動化, Docker イメージの管理など Publickey
- Docker Hub を始める - Docker User Guide - Qiita
Boot2Docker
Boot2Docker を利用すると, Windows 上で Docker を動かすことが可能となる. Very Cool Feature.
- Microsoft Windows - Docker Documentation
Panamax
Docker コンテナを GUI で利用することができる.Very Cool Feature.
- Panamax: Docker Management for Humans
- CenturyLink Labs
- Docker コンテナを GUI で管理する「 Panamax 」を使って WordPress をセットアップしてみた話 | ブログ :: Web notes.log
おわりに
本当に, あっという間に WordPress の環境が手に入った. しかし, この記事を書くのに, 2 時間かかった!
プロセスは通常時のものとほぼ同等リソースを食わないというところが, VirtualBox よりも気に入った. VM 環境は重くてリソースを喰うのが嫌い.
普段 Linux を利用している自分としては, 発想次第でいろいろ応用できそうだ.