gendosu流、dockerの使い方
以前よりローカルでの仮想環境の生成・破棄は容易になったような気がしますが
Vagrantでは、インスタンスの生成、破棄のコストが高い気がするので
そこのところをDockerを使ってやってみるようにしてみました。
まずは、ベースになるマシンとしてUbuntu Server 14.10 64bitの仮想マシンを立ち上げます。
これは、VagrantでもVMwareでも問題ないです。
今後、頻繁にアクセスすることになるので、vmのIPをhostsに登録してしまいます。
hostsには
192.168.?.? local-vm
として登録しちゃいます。
これで、vmに
ssh root@local-vm
という感じでログインできるようになりました。
ここから、dockerのセットアップをします。
ubuntu14では、
http://docs.docker.com/installation/ubuntulinux/
にあるとおりに
sudo apt-get update sudo apt-get install docker.io source /etc/bash_completion.d/docker.io
とやってインストールします。
これで、入ったので、dockerにコンテナを作ってみます。
ただ、普通にやるとコンテナ内へのアクセスが面倒なので
各コンテナ内にsshを起動してしまいます。
これで、ポート指定で外部からssh接続できるコンテナになります。
やり方ですが
Dockerfileを作ってイメージを作成するようにします。
# => Dockerfile
# sshd # # VERSION 0.0.1 FROM ubuntu:14.04.1 MAINTAINER gendosu "gendosu@hoge.hoge" RUN apt-get update RUN apt-get install -y openssh-server supervisor vim build-essential git RUN mkdir -p /var/run/sshd RUN sed -ibak -e "s/^PermitRootLogin.*$/PermitRootLogin yes/" /etc/ssh/sshd_config ADD supervisord/sshd.conf /etc/supervisor/conf.d/sshd.conf RUN echo 'root:root' |chpasswd EXPOSE 22 CMD ["/usr/bin/supervisord"]
というファイルを作成します。
同じ階層にsupervisord/ssh.conf
を作成します。
こちらは
[supervisord] nodaemon=true [program:sshd] command=/usr/sbin/sshd -D
とします。
このDockerfileをdocker buildでイメージにします。
docker build --rm -q -t my/ubuntu-ssh:latest .
これで、sshdが起動するdockerコンテナのイメージが作成されました。
このイメージを元に、「run-ubuntu-ssh」という名前でコンテナを起動します。
docker run -d -p 2200:22 -p 3000:3000 -v ~/products:/products --name=run-ubuntu-ssh -h run-ubuntu-ssh my/ubuntu-ssh:latest
これで、2200番のポートを指定してssh接続が出来るようになりました。
各コンテナでsshが起動するのは無駄な気がしますが
アクセスが容易になる分、開発環境では便利になるのではないでしょうか。
さて、sshdは起動しましたが、たいていの場合MySQLとかも同時に入れたりしたくなったりします。
MySQLの場合は、別のコンテナでMySQLだけが入ったものを用意します。
これは、Docker.ioのdockerhubから持ってきます。
https://registry.hub.docker.com/
この中に、MySQLというリンクがあるので、ここを開いて、手順通りにやると
MySQLの入ったコンテナが起動できます。
先ほど、「run-ubuntu-ssh」コンテナを起動したときに使ったコマンド
docker runに、別のコンテナへのリンクを追加するというオプションがあります。
今回はそのオプションを追加します。
※先ほどのdocker runを実行している場合、一度docker stop、docker rmでコンテナを破棄します。
docker run -d -p 2200:22 -p 3000:3000 -v /products:/products --link mysql:mysql --name=run-ubuntu-ssh -h run-ubuntu-ssh my/ubuntu-ssh:latest
mysqlという名のコンテナに対してリンクを張っています。
run-ubuntu-sshコンテナの内部からは、mysqlという名前でmysqlコンテナへ接続できるようになっています。
mysql -uroot -p -hmysql
というコマンドでMySQLへ接続できていればOKです。
別のコンテナを起動する場合、先ほどのdocker runのコマンドで、-p 2200:22のところを2201:22という感じにインクリメントしていくことで、比較的容易にコンテナを管理できると思います。