これ(https://hub.docker.com/_/wordpress/)みながら、
macでwordpressのテスト環境を作らなければならなかった時の自分用の覚え書き
事前知識
- Dockerバージョン1.8(2015年8月)から、Boot2Docker(非推奨)ではなく、Docker ToolBox、Docker Machineを利用するようになった (既存のboot2dockerからのマイグレーションは可能)
- Dockerは基本的にLXC(Linux Container)の上で動作するので、Linuxのみに対応する。しかし、OS Xはそれに対応できない。そのため、LXCの代わりにVirtual Boxを利用する。
- そのVirtual BoxをMac上で簡単に使用するためのものがDocker-machineである。
- 因みにdocker for macもあるのでそっちでも良さげ
必要なもの
名前 | 概要 |
---|---|
docker | dockerの本体 |
docker-machine | Dockerがインストールされたdockerホストマシンを作成するもの。作成先はローカルのVM、クラウドサービスともに可能。 |
docker-compose | yml形式の設定ファイルに従ってdockerホスト上に複数のDockerコンテナで構成される環境を構築したり操作したりするツール |
virtualbox | linuxコンテナを起動するにはlinux環境が必要なのでそれ用 |
インスコ
$ brew install docker
$ brew install docker-machine
$ brew install docker-toolbox
Dockerホストの作成
$ docker-machine rm default # 一様過去のを削除する
$ docker-machine create --driver virtualbox default # defaultという名前のVMをVirtualBoxで作る
$ docker-machine ls # 稼働中のdockerホストの確認
$ docker-machine env default
$ docker-machine start default
Dockerホストのcertificate(認証書)のエラーが出た時の修正
$ docker-machine env default # 以下のエラーが出た
Error checking TLS connection: Error checking and/or regenerating the certs: There was an error validating certificates for host
$ docker-machine regenerate-certs default # 認証書の再作成
Dockerコンテナを一斉起動
$ mkdir ~/sandbox && cd ~/sandbox
$ $EDITOR docker-compose.yml # 下の貼り付ける
$ eval $(docker-machine env default) # 別ターミナル使う時用の環境設定
$ docker-compose up # Create and start containers
docker-compose.yml
version: '2'
services:
wordpress:
image: wordpress
ports:
- 8080:80
environment:
WORDPRESS_DB_PASSWORD: example
mysql:
image: mariadb
environment:
MYSQL_ROOT_PASSWORD: example
dockerホスト操作
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
default * virtualbox Running tcp://192.168.99.101:2376
$ docker-machine rm default # dockerホストの削除
$ docker-machine stop default # dockerホストの停止
$ docker-machine start default # dockerホストの起動
$ docker-machine ssh # dockerホストに接続
$ docker-machine ip # dockerホストのIPアドレスの表示
192.168.99.101
$ docker-machine restar # dockerホストの再起動
コンテナの一覧
docker-compose.ymlに記述したのがコンテナとして起動する
$ docker-compose up -d # バックグラウンドで起動
$ docker-compose ps
Name Command State Ports
-------------------------------------------------------------------------
sandbox_db_1 docker-entrypoint.sh mysqld Exit 1
sandbox_web_1 apache2-foreground Up 0.0.0.0:80->80/tcp
$ docker-compose start
$ docker-compose stop
ローカルからコンテナへの接続
$ docker-machine ssh
$ eval $(docker-machine env default) # 別ターミナル使うとき
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1394bcba40e2 wordpress "/entrypoint.sh apach" 7 minutes ago Up 7 minutes 0.0.0.0:8080->80/tcp sandbox_wordpress_1
df94ad96dbe7 mariadb "docker-entrypoint.sh" 7 minutes ago Up 7 minutes 3306/tcp sandbox_mysql_1
$ sudo docker exec -i -t 1394bcba40e2 /bin/bash #by ID
$ sudo docker exec -i -t sandbox_wordpress_1 /bin/bash #by Name
$ export TERM=xterm # ターミナル設定
コンテナ内での操作
$ apt-get update
$ apt-get install vim git
$ cd /var/www/html
$ vim index.php # <?=phpinfo();?>を入れる
$ cd && pwd
/root
$ git clone https://github.com/mgoldchild/dotfiles.git
$ # bashとvimの設定をする
dockerコマンドの流れmemo
$ docker search <image_name> # imageの検索
$ docker pull <image_id> # imageのDL
$ docker images # ローカルにあるimageの確認
$ docker run # imageからコンテナ起動
$ docker inspect # コンテナspecの確認
$ docker ps -a # コンテナの確認
$ docker attach # 起動中コンテナにアタッチ
$ docker exec # 起動中コンテナの編集
$ docker stop/kill # 起動中コンテナの停止
$ docker start # 停止中のコンテナのスタート
$ docker rm # コンテナの削除
wordpressの起動確認
$ docker-machine ip
192.168.99.100
$ open http://192.168.99.100:8080
ファイルのコピーmemo
$ eval $(docker-machine env default) # 別ターミナル使うとき
$ docker ps
1394bcba40e2 wordpress "/entrypoint.sh apach" 7 minutes ago Up 7 minutes 0.0.0.0:8080->80/tcp sandbox_wordpress_1
df94ad96dbe7 mariadb "docker-entrypoint.sh" 7 minutes ago Up 7 minutes 3306/tcp sandbox_mysql_1
$ docker cp FILENAME 1394bcba40e2:/ # FILENAMEをコンテナの/に入れる。
参考文献
http://qiita.com/kiida/items/059e34ea53c16e6bc9ec
http://hacknote.jp/archives/17376/
http://qiita.com/segawa/items/a8ba4af33ddf39eafa95
http://askubuntu.com/questions/505506/how-to-get-bash-or-ssh-into-a-running-container-in-background-mode
http://qiita.com/kooohei/items/d370701d6c39727334f3
http://qiita.com/gologo13/items/7e4e404af80377b48fd5