Helloooo Adachinです。
2月はdockerを勉強しよう!と目標を作っていたのですが、
なかなか勉強できてなかったので、無念・・・
とりあえずエンジニアの先輩、友人に
「絶対に導入したほうがいい」「インフラやってるなら勉強しないとアカンよ!」
などとよく言われていたので、Macで環境構築してみました。
そもそもdockerってなに?からブログしていきたいと思います。
■dockerとは
はい。クジラですw
Linuxのコンテナ系技術を利用してアプリケーションのビルド、デプロイ、実行を行うコンテナ管理ソフトウェア。
Docker社(旧dotCloud社)のSolomon Hykes氏によってGo言語で作成され、
Apacheライセンスで配布されているオープンソースソフトウェア。
とりあえずコンテナというワードが重要です!
仮想実行環境って今までだとハイパーバイザ型やホスト型があると思うんですが、
ゲストOSを稼働しないといけないし、時間もかかるし、CPUやメモリ、ディスクなどのリソースも多く消費して運営が大変・・・
dockerだと展開や起動は素早いし、ゲストOSの実行やハードウェアのエミュレーションなどのオーバーヘッドはありません。
つまり軽くてやたらと早いインフラコンテナ技術と覚えておきましょう!
■docker-machineってなんなの
dockerホストを様々な仮想化環境に構築できる。
AWSでも、VirtualBoxでも、ESXiでもDocker deamonがインストールされたVMを作成できる。
去年(2015年)くらいに発表されたもので、簡単にdocker環境をつくることができるようになりました。
僕はとりあえずvagrantにdockerいれて・・・メンドクサイ。この作業がなくなります。
こんな感じでMac上にdocker-machineの中にcentosやらubuntuやら素早くインフラ環境が作れるというわけです。
もちろんテスト環境なんて一瞬で、複製や削除も一瞬です。
テスト環境はvagrantなのですが、dockerでよさそう。。
では構築してみましょう!
■Macにdocker環境を構築する
・homebrewでインストール
1 |
adachin-mac$ brew install docker |
・docker-machineをインストール/実行権限追加
1 2 |
adachin-mac$ curl -L https://github.com/docker/machine/releases/download/v0.7.0/docker-machine-`uname -s`-`uname -m` > /usr/local/bin/docker-machine && \ ※最近ではbrew install docker-machine でOKです! |
1 |
adachin-mac$ chmod +x /usr/local/bin/docker-machine |
・docerホストの作成
1 |
adachin-mac$ docker-machine create --driver virtualbox test-docker |
test-dockerというホスト名で作りました。1分もかからず作成されます。
ここでエラーが出た人はvirtualboxのバージョンが4系じゃないとダメなので公式サイトからダウンロードしましょう!
・環境変数をセット
1 |
adachin-mac$ eval "$(docker-machine env test-docker)" |
docerホストがcreateされた時にこのコマンド打つんやで!!と言われるのでセットします。
永続的に設定したい場合は~/.bash_profileに記入しましょう。
・dockerホストの確認
1 2 3 |
adachin-mac$ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM test-docker * virtualbox Running tcp://192.168.xxx.xxx:2376 |
1 2 3 4 |
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ホストにログイン
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
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のコンテナを作成してみましょう。
イメージファイルは公式からです。
1 |
adachin-mac$ docker $(docker-machine config test-docker) run centos:6 echo test-server01 |
1 |
adachin-mac$ docker $(docker-machine config test-docker) run centos:7 echo test-server02 |
・ホスト上からイメージを叩く場合
1 |
docker@docker:~$ sudo docker pull centos:6 |
1 |
docker@docker:~$ sudo docker pull centos:7 |
・イメージファイルの確認
1 |
adachin-mac$ docker-machine ssh |
1 2 3 4 |
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 |
・コンテナにログインしてみる
1 2 |
docker@docker:~$ sudo docker run -i -t centos:6 /bin/bash [root@39fc4bc343ed /]# |
できた。
exitするとプロセスが終了してしまうため、Ctl+p Ctl+qで脱出すればすぐにログインできます。
ちょっと特殊ですがやってみますね。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
[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 ↑プロセスがある |
・起動中のコンテナにログインする場合
1 2 |
docker@docker:~$ docker attach eff483b031f9 [root@eff483b031f9 /]# |
tmuxみたいですがこんな感じです。
・コンテナイメージをコピーしたい場合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
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というコンテナが作成できてますね。
これでじゃんじゃ作れる感じです。
ちなみにコンテナの履歴は消さないと残り続けるてディスク圧迫してしまうので、
クリーンしときましょう。
・現在起動しているコンテナを削除
1 |
docker@docker:~$ sudo docker rm -f $(sudo docker ps -a -q) |
■まとめ
今回はdockerってこんな感じなのかでOKです。
dockerを使うことで、サーバ移行したときにそのままコンテナをコピーできたり、
Dockerfileを使用してレシピのように管理もできます。
なんといっても複数台コンテナ作ってもまったくMacが重くならないのがすごい。
次回はDockerfileを使って、ユーザ作成、パッケージインストール、
LAMP環境構築方法をブログしたいと思います。
dockerコマンドたくさんあるので使い方も書きますね。(・∀・)b
ちなみにdockerはCoreOSが最適みたい。
・追記
1 2 3 4 |
・保存 # docker commit -m "fix nginx" 現在動いているID(docker psで) adachin/nginx6 ・古いコンテナ削除 # docker rmi -f 古いリポジトリ名 |
これをしないとMacを再起動した時にパッケージ等消えます
参考:https://docs.docker.com/machine/
0件のコメント