LoginSignup
16
12

More than 5 years have passed since last update.

DockerをMacに入れてみた時のメモ

Posted at

はじめに

最近注目されているにもかかわらず、使ったことがない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のほうが簡単にできる。

参考

16
12
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
12