Helloooo Adachinです。
2月はdockerを勉強しよう!と目標を作っていたのですが、
なかなか勉強できてなかったので、無念・・・
とりあえずエンジニアの先輩、友人に
「絶対に導入したほうがいい」「インフラやってるなら勉強しないとアカンよ!」
などとよく言われていたので、Macで環境構築してみました。![4P9pfv_Txb]()
そもそもdockerってなに?からブログしていきたいと思います。
■dockerとは
はい。クジラですw
Linuxのコンテナ系技術を利用してアプリケーションのビルド、デプロイ、実行を行うコンテナ管理ソフトウェア。
Docker社(旧dotCloud社)のSolomon Hykes氏によってGo言語で作成され、
Apacheライセンスで配布されているオープンソースソフトウェア。
とりあえずコンテナというワードが重要です!
仮想実行環境って今までだとハイパーバイザ型やホスト型があると思うんですが、
ゲストOSを稼働しないといけないし、時間もかかるし、CPUやメモリ、ディスクなどのリソースも多く消費して運営が大変・・・
dockerだと展開や起動は素早いし、ゲストOSの実行やハードウェアのエミュレーションなどのオーバーヘッドはありません。![docker-vm-container]()
つまり軽くてやたらと早いインフラコンテナ技術と覚えておきましょう!
■docker-machineってなんなの
dockerホストを様々な仮想化環境に構築できる。
AWSでも、VirtualBoxでも、ESXiでもDocker deamonがインストールされたVMを作成できる。
去年(2015年)くらいに発表されたもので、簡単にdocker環境をつくることができるようになりました。![docker-machine_w_450]()
僕はとりあえずvagrantにdockerいれて・・・メンドクサイ。この作業がなくなります。
図を書いてみました。![d01]()
こんな感じでMac上にdocker-machineの中にcentosやらubuntuやら素早くインフラ環境が作れるというわけです。
もちろんテスト環境なんて一瞬で、複製や削除も一瞬です。
テスト環境はvagrantなのですが、dockerでよさそう。。
では構築してみましょう!
■Macにdocker環境を構築する
・homebrewでインストール
adachin-mac$ brew install docker
・docker-machineをインストール/実行権限追加
adachin-mac$ curl -L https://github.com/docker/machine/releases/download/v0.2.0/docker-machine_darwin-amd64 > /usr/local/bin/docker-machine
adachin-mac$ chmod +x /usr/local/bin/docker-machine
・docerホストの作成
adachin-mac$ docker-machine create --driver virtualbox test-docker
test-dockerというホスト名で作りました。1分もかからず作成されます。
ここでエラーが出た人はvirtualboxのバージョンが4系じゃないとダメなので公式サイトからダウンロードしましょう!
・環境変数をセット
adachin-mac$ eval "$(docker-machine env test-docker)"
docerホストがcreateされた時にこのコマンド打つんやで!!と言われるのでセットします。
永続的に設定したい場合は~/.bash_profileに記入しましょう。
・dockerホストの確認
adachin-mac$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
test-docker * virtualbox Running tcp://192.168.xxx.xxx:2376
adachin-mac$ env | grep -i docker
DOCKER_HOST=tcp://192.168.xxx.xxx:2376
DOCKER_TLS_VERIFY=1
DOCKER_CERT_PATH=/Users/adachin/.docker/machine/machines/test-docker
できてる!
・dockerホストにログイン
adachin-mac$ docker-machine ssh
## .
## ## ## ==
## ## ## ## ===
/""""""""""""""""\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\______/
| |__ ___ ___ | |_|___ \ __| | ___ ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__| < __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 1.10.2, build master : 611be10 - Mon Feb 22 22:47:06 UTC 2016
Docker version 1.10.2, build c3959b1
クジラ!
他のホストにログインする場合は$ docker-machine ssh ホスト名でOK
・dockerコンテナを作成
ホスト上でdockerコマンドを叩いても問題ないのですが、
Macからdockerホストに直接コマンドを叩けるので、今回はこっちでいきます。
とりあえずcent6とcent7のコンテナを作成してみましょう。
イメージファイルは公式からです。
adachin-mac$ docker $(docker-machine config test-docker) run centos:6 echo test-server01
adachin-mac$ docker $(docker-machine config test-docker) run centos:7 echo test-server02
・ホスト上からイメージを叩く場合
docker@docker:~$ sudo docker pull centos:6
docker@docker:~$ sudo docker pull centos:7
・イメージファイルの確認
adachin-mac$ docker-machine ssh
docker@docker:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 6 d0a31e3494fe xx hours ago 228.9 MB
centos 7 d0e7f81ca65c xx hours ago 196.6 MB
・コンテナにログインしてみる
docker@docker:~$ sudo docker run -i -t centos:6 /bin/bash
[root@39fc4bc343ed /]#
できた。
exitするとプロセスが終了してしまうため、Ctl+p Ctl+qで脱出すればすぐにログインできる。
ちょっと特殊ですがやってみますね。
[root@39fc4bc343ed /]# exit
exit
docker@docker:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
NAMES
プロセスがない
docker@docker:~$ sudo docker run -i -t centos:6 /bin/bash
[root@eff483b031f9 /]# docker@docker:~$ Ctl+p Ctl+q 脱出
docker@docker:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
eff483b031f9 centos:6 "/bin/bash" 7 seconds ago Up 6 seconds nostalgic_varahamihira
↑プロセスがある
・起動中のコンテナにログインする場合
docker@docker:~$ docker attach eff483b031f9
[root@eff483b031f9 /]#
tmuxみたいですがこんな感じです。
・コンテナイメージをコピーしたい場合
docker@docker:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
eff483b031f9 centos:6 "/bin/bash" 8 minutes ago Up 8 minutes nostalgic_varahamihira
docker@docker:~$ sudo docker commit eff483b031f9 adachin-centos:6
sha256:172a330445105bc03eb3d20f544cb030c61ee46f417e51cdb5efe7457ab276ea
docker@docker:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
adachin-centos 6 172a33044510 4 seconds ago 228.9 MB
centos 6 d0a31e3494fe 16 hours ago 228.9 MB
centos 7 d0e7f81ca65c 16 hours ago 196.6 MB
docker@docker:~$ sudo docker run -i -t adachin-centos:6 /bin/bash
[root@cc5c5175ce0f /]#
adachin-centos6というコンテナが作成できてますね。
これでじゃんじゃ作れる感じです。
ちなみにコンテナの履歴は消さないと残り続けるてディスク圧迫してしまうので、
クリーンしときましょう。
docker@docker:~$ sudo docker rm $(sudo docker ps -a -q)
■まとめ
今回はdockerってこんな感じなのかでOKです。
次回はDockerfileを使って、ユーザ作成、パッケージインストール、
LAMP環境構築方法をブログしたいと思います。
dockerコマンドたくさんあるので使い方も書きますね。(・∀・)b
ちなみにdockerはCoreOSが最適みたい。
参考:https://docs.docker.com/machine/