at backyard

Color my life with the chaos of trouble.

Docker for Macを用いたDockerことはじめ

Dockerを今更ながら触ってみることにした。

f:id:shinshin86:20161106212603p:plain

Dockerは日々ツールの名前が変わっていたり、
色々と更新されているので、この記事も数カ月後には古くなっていて使えないかもしれない。
あくまで個人の備忘録として残しておく。

なお、私の環境はMac OSX El Capitanである

www.docker.com

やること

  • "Dcoker for Mac"をダウンロードし、
  • "Get Started Tutorial"にて基本的なことをまずは実施してみる。

#Get Started with Docker for Mac

docs.docker.com

なお、以前はDocker Toolboxを入れて使う、という記事をよく見かけるが、
私が入れたのはDocker for Macであり、違いについては下記の記事にかかれている。
※英語で書かれているが、画像もあるので理解はしやすかった。

docs.docker.com

VirtualBoxを使わずに、Hypervisor.framework上に構築された、
軽量なmacOS環境の仮想ソリューションのHyperKitを使っていたりしているみたい。
HyperKitという単語も初めて知ったので、後で調べてみよう。

Docker for Macをインストール

といっても、特に書く必要もない。
こちらのページから インストール用のバイナリを落として、実行するだけ。

f:id:shinshin86:20161106212549p:plain

インストール後の自身の環境メモ

docker --version
Docker version 1.12.1, build 6f9534c

$docker-compose --version
docker-compose version 1.8.0, build f3628c7

$docker-machine --version
docker-machine version 0.8.1, build 41b3b25

nginxをdocker上で動かしてみる

"Get started"のページに書かれている内容をそのまま試す。

docker run -d -p 80:80 --name webserver nginx

localhostにアクセスすると、nginxが起動しているのが分かる。

docker ps
CONTAINER ID        IMAGE               COMMAND                 CREATED             STATUS              PORTS                         NAMES
2a3bc9f91988        nginx               "nginx -g 'daemon off"   5seconds ago       Up 3 seconds        0.0.0.0:80->80/tcp, 443/tcp   webserver

nginxを停止させる。

docker stop webserver

webserver(nginx)を削除する

docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              e43d811ce2f4        2 weeks ago         181.5 MB

# 下記のコマンドで削除できる。
docker rm -f webserver

が、この方法だとnginxのimageまでは削除されない。 これはDocker hubから再びそれらをpullする必要がないようにするため。

docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              e43d811ce2f4        2 weeks ago         181.5 MB

もしこのimageごと削除する場合は、下記のコマンドで削除できる。 なおドキュメントには"docker rmi |"と書かれており、IMAGE IDでの指定も可能。

docker rmi nginx

一旦ここまで。

hello-worldのimageが削除できない

余談だが、"Get started"の中に "docker run hello-world"を実行する項目がある。 試しに実行した後、imageを削除しようとすると下記の用にエラーとなる。

docker rmi {hello-world:image id}
Error response from daemon: conflict: unable to delete {hello-world:image id} (must be forced) - image is being used by stopped container {hello-world:container id}

普通に"docker ps"を実行すると、何も表示されないが、下記のように"-a"でコマンドを打つと、hello-worldのプロセスが見える。

docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
c3bf725ebedc        hello-world         "/hello"            19 minutes ago      Exited (0) 19 minutes ago                       angry_swanson

下記のコマンドでhello-worldのプロセスを削除する

docker rm -f angry_swanson  

その後、下記コマンドでimageを削除可能。

docker rmi {hello-world:image id}

たぶん最初触った時ならではのエラーだろうけど、一応こういうことがあったということもメモしておく。