*** Docker って [#yaf51c52]
- 以前から興味があったけどなんとなく敷居が高かったので敬遠してた仮想化技術の[[LXC (Linux Containers)>http://ja.wikipedia.org/wiki/LXC]] ですが、DockerがCentOSでも動くよ!と記事を見かけたので導入してみました。
-- [[docker公式サイト>https://www.docker.io/]]
-- [[LXCで軽量仮想環境の活用>http://gihyo.jp/admin/serial/01/ubuntu-recipe/0226]]
** Docker のインストール [#ueede910]
- と、以下のコマンドでインスコ
# wget -P /etc/yum.repos.d http://www.hop5.in/yum/el6/hop5.repo
# yum install xz docker-io -y
# service docker start
** コンテナ実行するときにハマったw [#zcf07ddd]
- Dockerfile ファイルを作成してコンテナ実行をします…が、ここでちょっとハマりどころが「CMD」コマンド。こいつでコンテナ環境のサービス(sshなど)を立ち上げる指定をするのだけどね。下記みたいにずらずら書けません…
CMD ["service","nginx","start"]
CMD ["/usr/sbin/sshd","-D"]
- docker inspect でimageファイルの定義を見てみるとCMDは、複数行書いても最後のコンテナが指定されるっていうオチでした。
"Cmd": [
"/bin/sh",
"-c",
"#(nop) ADD file:e7b145f3252b16f295068ed6a20edc0febc656d536d0d0dae2e2afe93e110116 in /"
],
- そんなわけで、[[supervisor>http://qiita.com/yushin/items/15f4f90c5663710dbd56]] を使って複数サービスを起動しているのだと理解するまで小1時間…
** LAMP環境の設定 [#i0ab688b]
- ssh, apache, ntp のLAMP環境を作成してみました。本格的に環境を構築しようと思うとこんなんじゃ駄目ですがntpdとtimezone位は設定してます。もちろんサービスは、supervisor にてssh, apache, ntp を立ち上げてます。
+ GitHubから ソースをcloneします。GitHub - [[docker-lamp>https://github.com/murachi1208/docker-lamp]]
% git clone https://github.com/murachi1208/docker-lamp.git
+ dockerには sshで接続するのでssh鍵ペアを事前に作成しておくこと
% cd docker-lamp
% ssh-keygen -t rsa -C "メールアドレス"
% cp ~/.ssh/id_rsa.pub > authorized_keys
+ Dockerfile を編集し、USERNAME 部分にアカウントを指定(コンテナ内で使用するアカウント)
ENV USERNAME __your_id__
↓
ENV USERNAME hoge
+ コンテナのビルドと起動
% sudo docker build -t centos:lamp .
% sudo docker run -d -t -p 8888:22 -p 9999:80 centos:lamp
++ port forwardの意味
-p 8888:22 -p 9999:80
コンテナ内のsshd(22) を、ホストOSの 8888 にマッピング
コンテナ内のhttpd(80)を、ホストOSの 9999 にマッピング
++ sudo docker ps でみると
0.0.0.0:8888->22/tcp, 0.0.0.0:9999->80/tcp
+ 起動したコンテナにsshで接続
% ssh -p8888 hoge@localhost
** コマンド色々 [#r5b38b77]
- コンテナにアクセス
% sudo docker run -i -t {REPOSITORY}:{TAG} /bin/bash
- 起動したコンテナの停止
# docker ps | awk 'NR>1 {print $1}' | xargs docker kill
- コンテナの削除
# docker ps -a | egrep 'ago' | awk 'NR>1 {print $1}' | xargs docker rm
- イメージの削除
# docker rmi $(docker images | awk '/^<none>/ { print $3 }')
- コンテナのコミット / [[docker のコンテナイメージに ssh でアクセスしてみる>http://inokara.hateblo.jp/entry/2013/09/29/090500]]
# docker commit ${ID} {REPOSITORY}:{TAG}
- コンテナの IP
# docker inspect $(docker ps -q) | grep IPAddress
** 参考にさせて頂いたサイト [#r23227fe]
- [[仮想環境構築に docker を使う>http://apatheia.info/blog/2013/06/17/docker/]]
- [[これから始める「DockerでかんたんLAMP環境 for CentOS」>http://knowledge.sakura.ad.jp/tech/1811/]]
- [[DockerでPlay Frameworkの環境をつくってみる for CentOS>http://shigemk2.hatenablog.com/entry/2014/05/06/Docker%E3%81%A7Play_Framework%E3%81%AE%E7%92%B0%E5%A2%83%E3%82%92%E3%81%A4%E3%81%8F%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B_for_CentOS]]
- [[Dockerってなんじゃ?(docker+nginxで複数コンテナにWEBサーバーをたてる)>http://blog.cloudpack.jp/2014/02/server-news-docker-nginx-web.html]]