Posted at

Macでdockerを動かす

More than 3 years have passed since last update.

https://docs.docker.com/installation/mac/ のページを参考にしてます。

dockerはlinuxカーネルの特別な機能を使っているらしくOS Xでは動かせないとのことなので、Boot2Dockerというツールを使ういいようです。

Boot2Dockerはコンテナを配置するLinux仮想マシンを作成するツールで、Macでコンテナを動かすために必要らしいのでインストールします。

$ brew install docker

==> Downloading https://homebrew.bintray.com/bottles/docker-1.6.2.yosemite.bottle.tar.gz
######################################################################## 100.0%
==> Pouring docker-1.6.2.yosemite.bottle.tar.gz
==> Caveats
Bash completion has been installed to:
/usr/local/etc/bash_completion.d

zsh completion has been installed to:
/usr/local/share/zsh/site-functions
==> Summary
🍺 /usr/local/Cellar/docker/1.6.2: 9 files, 7.3M
$ brew install boot2docker
==> Downloading https://homebrew.bintray.com/bottles/boot2docker-1.6.2.yosemite.bottle.tar.gz
######################################################################## 100.0%
==> Pouring boot2docker-1.6.2.yosemite.bottle.tar.gz
==> Caveats
To have launchd start boot2docker at login:
ln -sfv /usr/local/opt/boot2docker/*.plist ~/Library/LaunchAgents
Then to load boot2docker now:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.boot2docker.plist
==> Summary
🍺 /usr/local/Cellar/boot2docker/1.6.2: 3 files, 7.3M


boot2dockerを初期化

boot2docker init

上記コマンドを実行すると~/.boot2docker/boot2docker.iso, ~/.ssh/id_boot2docker, ~/.ssh/id_boot2docker.pub

のファイルが作成されます。


boot2dockerのVMを起動

$ boot2docker up

Waiting for VM and Docker daemon to start...
...................ooo
Started.
Writing /Users/daichi/.boot2docker/certs/boot2docker-vm/ca.pem
Writing /Users/daichi/.boot2docker/certs/boot2docker-vm/cert.pem
Writing /Users/daichi/.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/daichi/.boot2docker/certs/boot2docker-vm
export DOCKER_TLS_VERIFY=1


dockerでつかう環境変数をbashに設定する

$ eval "$(boot2docker shellinit)"

boot2docker shellinitを実行すると

Writing /Users/daichi/.boot2docker/certs/boot2docker-vm/ca.pem

Writing /Users/daichi/.boot2docker/certs/boot2docker-vm/cert.pem
Writing /Users/daichi/.boot2docker/certs/boot2docker-vm/key.pem
export DOCKER_HOST=tcp://192.168.59.103:2376
export DOCKER_CERT_PATH=/Users/daichi/.boot2docker/certs/boot2docker-vm
export DOCKER_TLS_VERIFY=1

が標準出力に表示されるのでevalで評価している。

boot2docker upでVMが起動していないとboot2docker shellinitはエラーするので、VMを起動するたびにeval "eval "$(boot2docker shellinit)"を実行する必要がある。

また新しいターミナルを立ち上げる時は環境変数をセットし直す必要が有るためにeval "$(boot2docker shellinit)"を実行する必要がある。

ここまでするとdockerコマンドでboot2dockerで作成したVMにコンテナを配置することができる。


サンプルに書いて有るnginxを立ち上げてみました。

$ docker run -d -P --name web nginx

Unable to find image 'nginx:latest' locally
latest: Pulling from nginx
39bb80489af7: Pull complete
df2a0347c9d0: Pull complete
dc2e1697e33e: Pull complete
e21d523a1481: Pull complete
5ec936b59c11: Pull complete
3ec5f57e729c: Pull complete
1f1cfc8b4072: Pull complete
514f4db63e53: Pull complete
e2fde5e7e71f: Pull complete
8cac0c007422: Pull complete
72d73c46937a: Pull complete
a785ba7493fd: Already exists
nginx:latest: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security.
Digest: sha256:88f8d82bc9bc20ff80992cdeeee1dd6d8799cd36797b3653c644943e90b3acdf
Status: Downloaded newer image for nginx:latest
fa0d0969c7cff2e59d502e85d48531e03c352def9b4f5dc9d2be31a69505ac63

docker runで指定したimageがないとdocker hubに登録されているものをダウンロードしてそれを起動するみたいです。

-ddocker runコマンドが終了してもコンテナが起動し続けさせるフラグ。

-PEXPOSEで公開するとしたポートをランダムなポートに設定して公開するフラグ。Macからnginxにアクセスするのに必要。

--nameはコンテナに名前を割り当てる。

VMで起動しているポートとipを調べる

$ boot2docker ip

192.168.59.103
$ docker port web
443/tcp -> 0.0.0.0:32771
80/tcp -> 0.0.0.0:32770

この場合はhttp://192.168.59.103:32770/でnginxにアクセスできます。

最後にboot2docker downでVMを終了します.

とりあえずここまででdockerの動作確認出来たので自作のDockerfileを作成して動かしてみようと思います。