blog @arfyasu

プログラミングとか趣味のこととか

Mac OS X に Docker の環境作った

今更ながら、Mac に Docker の環境を構築しました。
忘れないうちに手順をまとめてきます。

f:id:kanz-labs:20150917211941p:plain

環境

OSX Ysemite 10.10.5
VirtualBox 5.0.4
Docker Machine 0.4.1
Docker 1.8.1

事前作業

brew のインストール

各種インストール

brew cask
$ brew install caskroom/cask/brew-cask
VirtualBox
$ brew cask install virtualbox
Docker
$ brew install docker
$ docker -v
Docker version 1.8.1, build d12ea79
Docker Machine
$ brew install docker-machine
$ docker-machine -v
docker-machine version 0.4.1 (HEAD)

brew バンザイ!

VirtualBox上にDockerホストマシンを作成

Dockerホストマシンの一覧確認
$ docker-machine ls
NAME   ACTIVE   DRIVER   STATE   URL   SWARM

まだマシンを作成してないので何も出ません。

Dockerホストマシンを作成
$ docker-machine create --driver virtualbox docker-m
Creating VirtualBox VM...
Creating SSH key...
Starting VirtualBox VM...
Starting VM...

--driver オプションに virtualbox を指定し、引数にマシン名 docker-m を指定。

$ docker-machine ls
NAME       ACTIVE   DRIVER       STATE     URL                         SWARM
docker-m            virtualbox   Running   tcp://192.168.99.102:2376   

docker-m というマシンが作らたことが確認できます。

VirtualBox マネージャからも、docker-m が作成されたことがわかります。 f:id:kanz-labs:20150917212246p:plain

Dockerホストマシンにsshで接続
$ docker-machine ssh docker-m
                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/
 _                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 1.8.2, build master : aba6192 - Thu Sep 10 20:58:17 UTC 2015
Docker version 1.8.2, build 0a8c2e3

接続できました。
くじらをみると、どうしてもTwitterを連想してしまいます。

Docker Machine コマンド

マシンを起動する
$ docker-machine start <NAME>
マシンを停止する
$ docker-machine stop <NAME>
マシンを再起動する
$ docker-machine restart <NAME>
マシンを削除する
$ docker-machine rm <NAME>

docker コマンドを実行する前に...

$ docker-machine env docker-m
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.102:2376"
export DOCKER_CERT_PATH="/Users/master/.docker/machine/machines/docker-m"
export DOCKER_MACHINE_NAME="docker-m"
# Run this command to configure your shell: 
# eval "$(docker-machine env docker-m)"
$ docker-machine config docker-m
--tlsverify --tlscacert="/Users/master/.docker/machine/machines/docker-m/ca.pem" --tlscert="/Users/master/.docker/machine/machines/docker-m/cert.pem" --tlskey="/Users/master/.docker/machine/machines/docker-m/key.pem" -H=tcp://192.168.99.102:2376

docker コマンドは「eval "$(docker-machine env docker-m)"」で環境変数を登録するか、
docker コマンドのオプションの形で出力される docker-machine config コマンドを使って

docker $(docker-machine config docker-m) command名

のどちらかで実行します。

タイプが面倒なので、環境変数を登録してしまいます。

$ eval "$(docker-machine env docker-m)"

コンテナ作成

hello world

コンソールに hello world を出力します。

$ docker run busybox echo hello world
Unable to find image 'busybox:latest' locally
latest: Pulling from library/busybox
cf2616975b4a: Pull complete 
6ce2e90b0bc7: Pull complete 
8c2e06607696: Pull complete 
library/busybox: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:9fbfab5715af5aba7322931ec1f03c6b3978109b68053f4b0ba1d97abb93e21c
Status: Downloaded newer image for busybox:latest
hello world

hello world と表示されました。
うん、見ればわかりますね。

上記のコマンドで busybox のイメージファイルを pull(ダウンロード)し、
ダウンロードしたイメージからコンテナを作成し、echo hello world を実行します。

イメージファイルのダウンロードは初回に1度だけ行われます。

Docker で使用可能なイメージは https://registry.hub.docker.com で検索できます。

CentOS のコンテナ作成

イメージは、CentOS6 を選択。
処理が完了すると、bash のコンソールが立ち上がります。

$ docker run -i -t centos:6 /bin/bash
[root@10c61dd72ccd /]# 

exit 等で適当に終了してください。

ダウンロードしたイメージは、images コマンドで確認できます。

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos              6                   72703a0520b7        9 days ago          190.6 MB
busybox             latest              8c2e06607696        5 months ago        2.433 MB

busybox は流石に小さいw

コンテナのすべての一覧を表示
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS                      PORTS               NAMES
7951e2c1f199        centos:6            "/bin/bash"          54 seconds ago      Exited (0) 32 seconds ago                       boring_jones
834b813e5fc8        busybox             "echo hello world"   8 minutes ago       Exited (0) 8 minutes ago                        sick_fermat

コンテナ名(boring_jones,sick_fermat)は runコマンドを実行する際に指定しないと勝手に付けられます。

Docker コマンド

コンテナを起動する
$ docker start <CONTAINER ID or NAME>
コンテナを停止する
$ docker stop <CONTAINER ID or NAME>
コンテナを再起動する
$ docker restart <CONTAINER ID or NAME>
コンテナに接続する
$ docker attach <CONTAINER ID or NAME>
$ docker exec -it <CONTAINER ID or NAME> /bin/bash

attach コマンドでの接続は、exit するとコンテナが終了します。
exit してもコンテナを落としたくない場合、[Ctrl+p, Ctrl+q] するか
後者の exec コマンドを使います。

コンテナを削除する
$ docker rm <CONTAINER ID or NAME>

起動中のコンテナがあると、削除に失敗します。
削除するコンテナが停止していることを確認してから削除してください。

所感

Docker ってそもそもよく分かってなくて、仮想環境の構築・削除を簡単に
してくれる便利なものくらいの理解しかなかった。

実際に構築して、分からない所とか調べながら何となく理解できた。
やっぱり、実際に手を動かさないとダメだなと実感。

それにしても、LinuxMySQLの仮想環境がコマンド一発で作れるなんて便利すぎ!

構築にあたり Docker のセキュリティ問題を解決したといわれてる
CoreOS の rkt(rocket) と迷ったけど、Docker の方が便利
ってことだったので Docker を選択。

Dockerとrktの比較はこちらを読むと良いと思います。 qiita.com

次回は、作成した CentOS のコンテナに ApacheMySQL をインストールして
実行するところをまとめたいと思います。

それでは!

参考

Docker Machine を使って VirtualBox に Dockerホストを立てる - Qiita
Dockerコマンドメモ - Qiita
http://www.bunkei-programmer.net/entry/2015/05/20/021518