はじめに
最近注目されているにもかかわらず、使ったことがないDocker
をMacに入れてみました。
その過程をメモに残しておきます。
最後にSSH接続しようと思って断念してますので、この記事はあまり役に立たないと思います。
上級者の方が見て、素人はここではまるんだなぁ・・・と思っていただければと思います。(笑)
よくわらないけど入れてみる
とりあえず、文献を読むと。
- VirtualBox
- HomeBrew
があればできると書かれている。
この記事を書く際にどっちも入れているので早速やってみる。
$ brew install docker boot2docker
boot2docker
がコンテナを支えるためのVMを管理しているっぽい。
で、Docker
がそのコンテナに対してアクセスできるっぽい。
よくわからないので突き進めてみる。
$ boot2docker
Usage: boot2docker [<options>] {help|init|up|ssh|save|down|poweroff|reset|restart|config|status|info|ip|shellinit|delete|download|upgrade|version} [<args>]
$ docker -v
Docker version 1.8.1, build d12ea79h
とりあえず入った事は確認できた。
VMを入れてみる。
$ boot2docker init
WARNING: The 'boot2docker' command line interface is officially deprecated.
Please switch to Docker Machine (https://docs.docker.com/machine/) ASAP.
Docker Toolbox (https://docker.com/toolbox) is the recommended install method.
Latest release for github.com/boot2docker/boot2docker is v1.9.1
Downloading boot2docker ISO image...
Success: downloaded https://github.com/boot2docker/boot2docker/releases/download/v1.9.1/boot2docker.iso
to /Users/****/.boot2docker/boot2docker.iso
Generating public/private rsa key pair.
Your identification has been saved in /Users/****/.ssh/id_boot2docker.
Your public key has been saved in /Users/****/.ssh/id_boot2docker.pub.
The key fingerprint is:
80:98:1b:22:41:a3:a2:d5:c9:60:88:9d:8d:c0:c5:c2 ***.local
The key's randomart image is:
+--[ RSA 2048]----+
|B*== |
|+E=B.o |
|= * = . |
|+o o . |
|. . S |
| |
| |
| |
| |
+-----------------+
Initialization of virtual machine "boot2docker-vm" complete.
ウダウダと何か出てきたが、一番きになるのはThe 'boot2docker' command line interface is officially deprecated.
のメッセージ。
非推奨なだけで使えない事は無いと思うので、ここでは一旦気にしない。
よくわからないけど起動してみる
そのままVM立ち上げます。
$ boot2docker up
WARNING: The 'boot2docker' command line interface is officially deprecated.
Please switch to Docker Machine (https://docs.docker.com/machine/) ASAP.
Docker Toolbox (https://docker.com/toolbox) is the recommended install method.
Waiting for VM and Docker daemon to start...
........................ooooooooooooo
Started.
Writing /Users/****/.boot2docker/certs/boot2docker-vm/ca.pem
Writing /Users/****/.boot2docker/certs/boot2docker-vm/cert.pem
Writing /Users/****/.boot2docker/certs/boot2docker-vm/key.pem
To connect the Docker client to the Docker daemon, please set:
export DOCKER_HOST=tcp://192.168.59.103:2376
export DOCKER_CERT_PATH=/Users/****/.boot2docker/certs/boot2docker-vm
export DOCKER_TLS_VERIFY=1
Or run: `eval "$(boot2docker shellinit)"`
ここでもdeprecated
が出ているけど、今はまだ無視。
最後に設定をしろと言われているので、設定。
$ vi ~/.bash_profile
# 一番最後に設定
eval "$(boot2docker shellinit)"
# 反映
$ soruce ~/.bash_profile
IPアドレスの確認
$ boot2docker ip
192.168.59.103
起動の確認
$ boot2docker status
Dockerの中身を見てみる
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
何もない。
イメージもみてみる。
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
何もない。
止めてみる。
$ boot2docker stop
docker-machineを入れてみる
非推奨のboot2docker
を使い続けるのも・・・と思って調べて見るとdocker-machine
を使えば良い事を知ったのでこっちを入れてみる。
$ brew install docker-machine
入った事を確認
$ docker-machine -v
docker-machine version 0.4.1 (HEAD)
VMも入れてみる。
$ docker-machine create --driver virtualbox dev
Creating CA: /Users/****/.docker/machine/certs/ca.pem
Creating client certificate: /Users/****/.docker/machine/certs/cert.pem
Image cache does not exist, creating it at /Users/****/.docker/machine/cache...
No default boot2docker iso found locally, downloading the latest release...
Downloading https://github.com/boot2docker/boot2docker/releases/download/v1.9.1/boot2docker.iso to /Users/****/.docker/machine/cache/boot2docker.iso...
Creating VirtualBox VM...
Creating SSH key...
Starting VirtualBox VM...
Starting VM...
To see how to connect Docker to this machine, run: docker-machine env dev
言われるままにコマンドを叩く
$ docker-machine env dev
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="/Users/****/.docker/machine/machines/dev"
export DOCKER_MACHINE_NAME="dev"
# Run this command to configure your shell:
# eval "$(docker-machine env dev)"
言われるままに設定する。
$ vi ~/.bash_profile
# 一番最後に設定
eval "$(docker-machine env dev)"
# 反映
$ soruce ~/.bash_profile
IPアドレスの確認
$ docker-machine ip dev
192.168.99.100
VMの確認
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
dev * virtualbox Running tcp://192.168.99.100:2376
なんかいる。
VMに入ってみる。
$ docker-machine ssh dev
## .
## ## ## ==
## ## ## ## ## ===
/"""""""""""""""""\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\_______/
_ _ ____ _ _
| |__ ___ ___ | |_|___ \ __| | ___ ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__| < __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
$ exit
入れた事を確認して出る。
イメージを入れてみる
$ docker run hello-world
存在しないイメージを指定すると、、、勝手にダウンロードしてくれた。
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
hello-world latest 0a6ba66e537a 7 weeks ago 960 B
ubuntu
を試しに探してみる。
$ docker search ubuntu
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Ubuntu is a Debian-based Linux operating s... 2761 [OK]
ubuntu-upstart Upstart is an event-based replacement for ... 48 [OK]
...
いろいろ出てくる。
検索できる事を確認してcentos
の最新バージョンを入れてみる。
終わったらHello World
を出力してもらう。
$ docker run centos:latest echo "Hello World"
Unable to find image 'centos:latest' locally
latest: Pulling from library/centos
fa5be2806d4c: Pull complete
0cd86ce0a197: Pull complete
e9407f1d4b65: Pull complete
c9853740aa05: Pull complete
e9fa5d3a0d0e: Pull complete
Digest: sha256:c96eeb93f2590858b9e1396e808d817fa0ba4076c68b59395445cb957b524408
Status: Downloaded newer image for centos:latest
Hello World
イメージ確認
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
hello-world latest 0a6ba66e537a 7 weeks ago 960 B
centos latest e9fa5d3a0d0e 7 weeks ago 172.3 MB
いる!
消してみる(失敗)
不要なイメージを消してみる。
$ docker rmi hello-world
Error response from daemon: conflict: unable to remove repository reference "hello-world" (must force) - container abb2146a2881 is using its referenced image 0a6ba66e537a
消えない・・・
あ、イメージIDを指定するのか・・・
$ docker rmi 0a6ba66e537a
Error response from daemon: conflict: unable to delete 0a6ba66e537a (must be forced) - image is being used by stopped container abb2146a2881
Error: failed to remove images: [0a6ba66e537a]
止めないとダメ・・・?
$ docker stop hello-world
Error response from daemon: no such id: hello-world
$ docker stop 0a6ba66e537a
Error response from daemon: no such id: 0a6ba66e537a
Error: failed to stop containers: [0a6ba66e537a]
状況を見ると。。。
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
<none> <none> 0a6ba66e537a 7 weeks ago 960 B
centos latest e9fa5d3a0d0e 7 weeks ago 172.3 MB
なんか不思議な状況に・・・
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
38f47d2577f6 centos:latest "echo 'Hello World'" 3 hours ago Exited (0) 3 hours ago mad_poitras
abb2146a2881 0a6ba66e537a53a5ea94f7c6a99c534c6adb12e3ed09326d4bf3b38f7c3ba4e7 "/hello" 3 hours ago Exited (0) 3 hours ago adoring_swartz
指定するものがまちがっているっぽい。
NAMES
のカラムの値を設定。
$ docker stats mad_poitras
CONTAINER CPU % MEM USAGE/LIMIT MEM % NET I/O
mad_poitras 0.00% 0 B/0 B 0.00% 0 B/0 B
おぉ・・・見ずらい。。。
$ docker rm mad_poitras
mad_poitras
お?
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
abb2146a2881 0a6ba66e537a53a5ea94f7c6a99c534c6adb12e3ed09326d4bf3b38f7c3ba4e7 "/hello" 3 hours ago Exited (0) 3 hours ago adoring_swartz
消えた?
$ docker rmi 0a6ba66e537a
Error response from daemon: conflict: unable to delete 0a6ba66e537a (must be forced) - image is being used by stopped container abb2146a2881
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
<none> <none> 0a6ba66e537a 7 weeks ago 960 B
centos latest e9fa5d3a0d0e 7 weeks ago 172.3 MB
削除はまたあとで実験してみる。
イメージに入ってみる
起動させる。
イメージを実行
$ docker run -itd centos:latest /bin/bash
6d9f7dae6d915c5eab5a256014466c2961330fabba47124b1fb738ac2b911669
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6d9f7dae6d91 centos:latest "/bin/bash" 6 seconds ago Up 5 seconds naughty_payne
abb2146a2881 0a6ba66e537a53a5ea94f7c6a99c534c6adb12e3ed09326d4bf3b38f7c3ba4e7 "/hello" 3 hours ago Exited (0) 3 hours ago adoring_swartz
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
<none> <none> 0a6ba66e537a 7 weeks ago 960 B
centos latest e9fa5d3a0d0e 7 weeks ago 172.3 MB
あ、なるほど。
image
を実態化させた状態がコンテナでps
で見れるんだ!
(今更ですが・・・)
とりあえず、入り込む
$ docker attach naughty_payne
ん?
動かない。。。Enterを押してみると
[root@6d9f7dae6d91 /]#
入れたっぽい。
[root@6d9f7dae6d91 /]# exit
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6d9f7dae6d91 centos:latest "/bin/bash" 4 minutes ago Exited (0) 6 seconds ago naughty_payne
abb2146a2881 0a6ba66e537a53a5ea94f7c6a99c534c6adb12e3ed09326d4bf3b38f7c3ba4e7 "/hello" 3 hours ago Exited (0) 3 hours ago adoring_swartz
抜けると止まってる。
削除続き
なんとなくわかってきたので、hello worldを消してみる続きを行う。
$ docker stop adoring_swartz
adoring_swartz
$ docker rm adoring_swartz
adoring_swartz
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
<none> <none> 0a6ba66e537a 7 weeks ago 960 B
centos latest e9fa5d3a0d0e 7 weeks ago 172.3 MB
$ docker rmi 0a6ba66e537a
Deleted: 0a6ba66e537a53a5ea94f7c6a99c534c6adb12e3ed09326d4bf3b38f7c3ba4e7
Deleted: b901d36b6f2fd759c362819c595301ca981622654e7ea8a1aac893fbd2740b4c
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
centos latest e9fa5d3a0d0e 7 weeks ago 172.3 MB
消せた!
コンテナがある場合はイメージが消せない。
当たり前といえば当たり前だけど、、、僕はこれだけ苦戦した事でやっと意味がわかった。
先ほど終了したコンテナを再起動したりコンテナを増やしてみる
だんだん理解してきた。
$ docker start naughty_payne
$ docker attach naughty_payne
[Enter]
これでコンテナを起動して入れるのか。
もう一つコンテナを増やしてみる。
$ docker run -itd centos:latest /bin/bash
070984ac1cb806085e4cf19a98660779e07b0b0881af0517266d92eca3e2a463
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
070984ac1cb8 centos:latest "/bin/bash" 6 seconds ago Up 6 seconds big_kowalevski
6d9f7dae6d91 centos:latest "/bin/bash" 15 minutes ago Exited (0) About a minute ago naughty_payne
中に入って、ファイルを作成してみる。
$ docker attach big_kowalevski
$ touch test
$ ll
...
-rw-r--r-- 1 root root 0 Dec 4 06:04 test
...
作成したファイルがある事を確認する。
$ docker start big_kowalevski
$ docker attach big_kowalevski
$ ll
...
-rw-r--r-- 1 root root 0 Dec 4 06:04 test
...
ある。
けど毎回コンテナを起動するの面倒だな・・・
もう一個のコンテナに存在するかみてみる。
$ docker start naughty_payne
$ docker attach naughty_payne
$ ll
...
コンテナが違うので、もちろん存在しなかった。
SSHでDockerに接続してみる(失敗)
気を取り直して、新しいイメージを取ってきてSSHで接続してみる。
$ docker pull dhrp/sshd
$ docker run -d -p 22 dhrp/sshd /usr/sbin/sshd -D
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
centos latest e9fa5d3a0d0e 7 weeks ago 172.3 MB
dhrp/sshd latest 2bbfe079a942 2 years ago 321.8 MB
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d8072ab1aef9 dhrp/sshd "/usr/sbin/sshd -D" 27 seconds ago Up 27 seconds 0.0.0.0:32768->22/tcp boring_chandrasekhar
どうでもいいけど、、この名前ってどうやって決まってるんだろうか・・・?
SSHで接続してみる。
$ ssh 127.0.0.1 -p 32768
ssh: connect to host 127.0.0.1 port 32768: Connection refused
ん??
docker attach boring_chandrasekhar
ん??
返答がない・・・。
$ docker stop boring_chandrasekhar
他のコンソールからストップさせてやっと止まった。
MacOSXからDockerコンテナへのssh接続ではまったところ
同じように困っている人発見!
で、、、入れるようになったけどパスワードがわからない・・・。
コンテナイメージのコミット・・・?
うーん。
今日はここまで。(って、しばらく触らないきがするけど・・・)
感想
Vagrantよりはるかに敷居が高い・・・。
慣れてないせいかもしれないけど、結局業務で使えるレベルまで把握できなかった・・・。
実験的に環境を構築したりするためには使えるかもしれないけど、、、chef
の実験とかを考えるとVagrantのほうが簡単にできる。