fugafuga.write

日々のログ

Mac OSX で Docker 入門 (Docker Toolbox版)

Docker に入門する

OSX 上で Docker を動かす時の仕組みについて

Docker は、Linux カーネルの機能を使っているので、OSX の上に直接 Docker コンテナを作成することはできない。 なので、OSX 上で Linux VM を起動し、Linux VM 上に Docker コンテナを作成する。

起動した Linux VM には、自動的にIPアドレスが割り当てられる。 また、Linux VM 上に作成した Docker コンテナと Linux VM 間のポートフォワーディングも自動的に設定される。

Linux VM を作成したり、Linux VM の中の Docker コンテナを操作したりする機能が、Docker Toolbox をインストールすることによって使用可能となる。

Docker Toolbox のインストール

Docker Toolbox とは、Docker を使うためのツールセット。

VirtualBox がインストールされていることが前提。

https://www.docker.com/docker-toolbox

上記からインストーラをダウンロードしてインストールする。

f:id:tokoyax:20151122015406j:plain

Linux VM を起動する

Docker Toolbox のインストールが完了すると、Docker Quickstart Terminal がアプリケーションとして登録されているので実行する。

f:id:tokoyax:20151122014925j:plain

Linux VM が存在しなければ作成し、起動していなければ起動し、起動していればターミナルが立ち上がるだけとなる。

Creating Machine default...
...
Setting environment variables for machine default...


                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/


docker is configured to use the default machine with IP 192.168.99.100
For help getting started, check out the docs at https://docs.docker.com

以上のように表示されれば完了。default という名前の Linux VM が作成され、 docker コマンドが使用可能になる。

docker-machine コマンドで Linux VM を操作する

docker-machine コマンドを使うと Linux VM の操作を行うことができる。

Linux VM を作成する場合は、

% docker-machine create --driver virtualbox default

default は VM の名前。

コマンドで Linux VM を起動する場合は、

% docker-machine start default

停止は、

% docker-machine stop default

VM のリストを確認する場合は、

% docker-machine ls
NAME      ACTIVE   DRIVER       STATE     URL                         SWARM
default   *        virtualbox   Running   tcp://192.168.99.100:2376

状態とIPが確認できるので、困ったら ls コマンドする。

Docker コンテナを動かす

動作確認用の hello-world コンテナがあるので、それを動かしてみる。

 % docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
b901d36b6f2f: Pull complete
0a6ba66e537a: Pull complete
Digest: sha256:8be990ef2aeb16dbcb9271ddfe2610fa6658d13f6dfb8bc72074cc1ca36966a7
Status: Downloaded newer image for hello-world:latest

Hello from Docker.
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker Hub account:
 https://hub.docker.com

For more examples and ideas, visit:
 https://docs.docker.com/userguide/

Docker イメージがローカルマシン上にない場合、DockerHub https://hub.docker.com から探してきて自動的に Pull してくれる。

nginx コンテナを動かす

hello-world コンテナは、起動、実行してすぐ終了してしまうので、Webサーバーを動かしてみる。

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

各オプションの意味は以下の通り

オプション 意味
-d コンテナをバックグラウンドで起動した状態にする
-P コンテナ 〜 ホスト間のポートフォワーディングの設定を行う
--name <コンテナ名> コンテナに名前をつける

動いているコンテナ一覧を確認する。

% docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                           NAMES
8d58d4a468f2        nginx               "nginx -g 'daemon off"   7 seconds ago       Up 6 seconds        0.0.0.0:32769->80/tcp, 0.0.0.0:32768->443/tcp   web

だいたいの情報はこれでわかる。 PORTS0.0.0.0:32769 は OSX のポートではなく、VM のポートのことなので気をつけること。

指定のコンテナのポート設定を確認する。

% docker port web
 443/tcp -> 0.0.0.0:32768
 80/tcp -> 0.0.0.0:32769

VM の ポート32769 が コンテナの ポート80 に設定されている。

Web ブラウザでサーバーが動いているか確認する。

VM の IPアドレスは、docker-machine ip default で確認できる。

f:id:tokoyax:20151122015112j:plain

コンテナを停止する

% docker stop web

コンテナを削除する

% docker rm web

プログラマのためのDocker教科書 インフラの基礎知識&コードによる環境構築の自動化

プログラマのためのDocker教科書 インフラの基礎知識&コードによる環境構築の自動化

プログラマのためのDocker教科書 インフラの基礎知識&コードによる環境構築の自動化

プログラマのためのDocker教科書 インフラの基礎知識&コードによる環境構築の自動化

Webエンジニアが知っておきたいインフラの基本

Webエンジニアが知っておきたいインフラの基本

Webエンジニアが知っておきたいインフラの基本 ~インフラの設計から構成、監視、チューニングまで~

Webエンジニアが知っておきたいインフラの基本 ~インフラの設計から構成、監視、チューニングまで~

<参考>
https://docs.docker.com/engine/installation/mac/