blog

はじめての Docker シリーズはじめてのDocker:ウェブデザイナーでも覚えておきたいMac向けDocker環境構築と使い方

    • Ryuichi Nonaka
    この記事は書かれてから1年以上経過しており、内容が古い場合があります。

    仕事でDocker環境を作る機会があったので環境構築と使い方についてメモしておきます。

    Dockerとは

    Dockerとは、Docker社が開発しているオープンソースのコンテナ型仮想化ソフトウェアである。Linux上でLXC(Linux Container)の技術を活用し、コンテナ型の仮想環境を作成するものだ。

    簡単にまとめると仮想環境を提供するソフトウェアで、一つのホストOS上で複数の仮想OS(コンテナ)を動かすことができリソースを節約できると。ただし、対応しているのがLinuxOS限定でMacOSで使うにはLinux環境を作るためにVirtualBoxが必要だそうだ。

    Mac OSXにDocker環境を構築する

    Mac OSX上にDocker環境を作るには先で挙げたとおりVirtualBoxが必要です。VirtualBox上のLinuxでDockerを動かす訳ですがVirtualBox上で動かすために作られたBoot2dockerというディストリビューションを使います。このあたりの説明ははじめてのDocker on Mac OS Xに詳しく説明が載っています。

    インストールの前に必要なソフトウェア

    Dockerをインストールする前に2つ用意しておくソフトウェアがあります。 VirtualBoxHomebrewです。ここでは詳しい説明は省きますがそれぞれの環境を用意します。

    DockerとBoot2dockerのインストール

    DockerとBoot2dockerはHomebrewでインストール可能です。ここでは失敗例も載せていますがHomebrewを最新版にしておければすんなりインストールできるはずです。

    $ brew install docker boot2docker
    ==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/docker-1.5.0.yosemite.bottle.tar.gz
    ######################################################################## 100.0%
    ==> Pouring docker-1.5.0.yosemite.bottle.tar.gz
    Error: undefined method `[]' for nil:NilClass
    Warning: Bottle installation failed: building from source.
    ==> Installing docker dependency: go
    ==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/go-1.4.2.yosemite.bottle.tar.gz
    ######################################################################## 100.0%
    ==> Pouring go-1.4.2.yosemite.bottle.tar.gz
    Error: undefined method `[]' for nil:NilClass
    Warning: Bottle installation failed: building from source.
    ==> Downloading https://storage.googleapis.com/golang/go1.4.2.src.tar.gz
    ######################################################################## 100.0%
    ==> ./make.bash --no-clean
    Error: File exists - /usr/local/Cellar/go/1.4.2/libexec
    

    なにやらめっちゃ怒られてます。

    $ sudo brew install docker boot2docker
    Password:
    Error: Cowardly refusing to `sudo brew install`
    You can use brew with sudo, but only if the brew executable is owned by root.
    However, this is both not recommended and completely unsupported so do so at
    your own risk.
    

    sudoでもない。もう一度たたいてみる。

    $ brew install docker boot2docker
    Warning: docker-1.5.0 already installed, it's just not linked
    Error: You must `brew link docker' before boot2docker can be installed
    

    インストールはされているけどlinkされてないよと。これはよろしくなさそうなのでHomebrewのパッケージを更新(少し時間がかかります)して改めて試してみます。

    $ brew uninstall docker boot2docker
    Uninstalling /usr/local/Cellar/docker/1.5.0... (9 files, 7.2M)
    Uninstalling /usr/local/Cellar/boot2docker/1.5.0... (3 files, 7.3M)
    

    アップデートとアップグレードを実行。

    $ brew update 
    $ brew upgrade
    

    もう一度インストールを試して見ます。

    $ brew install docker boot2docker
    ==> Downloading https://homebrew.bintray.com/bottles/docker-1.5.0.yosemite.bottle.tar.gz
    Already downloaded: /Library/Caches/Homebrew/docker-1.5.0.yosemite.bottle.tar.gz
    ==> Pouring docker-1.5.0.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
    beer  /usr/local/Cellar/docker/1.5.0: 9 files, 7.2M
    ==> Downloading https://homebrew.bintray.com/bottles/boot2docker-1.5.0.yosemite.bottle.tar.gz
    Already downloaded: /Library/Caches/Homebrew/boot2docker-1.5.0.yosemite.bottle.tar.gz
    ==> Pouring boot2docker-1.5.0.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
    beer  /usr/local/Cellar/boot2docker/1.5.0: 3 files, 7.3M
    

    うまくいったようです。

    インストールの確認

    $ 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.5.0, build a8a31ef
    

    問題なさそうですね。

    Boot2dockerのマシンイメージをダウンロード

    Dockerを動かすためのVirtualBoxマシンイメージをダウンロードします。少し時間がかかるので待ちましょう。

    $ boot2docker init
    Latest release for boot2docker/boot2docker is v1.5.0
    Downloading boot2docker ISO image...
    

    これで準備完了です。

    Boot2dockerの起動

    Boot2dockerを起動してDocker環境を動かします。

    $ boot2docker up
    Waiting for VM and Docker daemon to start...
    ........................oooooooooooooooooooo
    Started.
    Writing /Users/nukos/.boot2docker/certs/boot2docker-vm/ca.pem
    Writing /Users/nukos/.boot2docker/certs/boot2docker-vm/cert.pem
    Writing /Users/nukos/.boot2docker/certs/boot2docker-vm/key.pem
    
    To connect the Docker client to the Docker daemon, please set:
        export DOCKER_TLS_VERIFY=1
        export DOCKER_HOST=tcp://192.168.59.103:2376
        export DOCKER_CERT_PATH=/Users/nonakaryuichi/.boot2docker/certs/boot2docker-vm
    

    最後の部分でDocker clientからDocker daemonにアクセスするために環境変数をセットしろと言われているので.bashrc.zshrcに下記の内容を追記します。

    export DOCKER_TLS_VERIFY=1
    export DOCKER_HOST=tcp://192.168.59.103:2376
    export DOCKER_CERT_PATH=/Users/nonakaryuichi/.boot2docker/certs/boot2docker-vm
    

    最後にコンソールを再起動しておきます。これでDockerを試せるようになりました。 私の場合はデザイナー的な立場なのでDockerのコンテナを作ることはありませんが、インフラエンジニアから受け取ったコンテナを立ち上げたり止めたり、ブラウザからBoot2dockerを経由してコンテナにアクセスするといった使い方になります。

    覚えておきたいDocker・Boot2dockerコマンド

    デザイナーがDocker/Boot2dockerを操作するために覚えておきたいコマンドをまとめておきます。

    Boot2dockerのIPアドレスを確認する

    このIPアドレスを使ってコンテナで動いているサーバーにアクセスします。

    $ boot2docker ip
    192.168.59.103
    

    Boot2dockerのステータスを確認

    Boot2dockerが動いているか確認できます。

    $ boot2docker status
    running
    

    Boot2dockerの停止

    Boot2dockerを停止させます。

    $ boot2docker stop
    

    コンテナを作成する

    $ docker run [options] <image> [command] [arg...]
    

    コンテナを起動する

    $ docker start <container_id>
    

    コンテナを再起動する

    $ docker restart <container_id>
    

    コンテナを停止する

    $ docker stop <container_id>
    

    今動いているDockerコンテナの情報を確認する

    コンテナを起動している時に動いているコンテナの情報を確認したいときに使うコマンドです。

    $ docker ps
    CONTAINER ID        IMAGE                                COMMAND                CREATED              STATUS              PORTS                    NAMES
    334f5ffb1102        xxxxx-webclient-middleman:latest   "/usr/local/bundle/b   About a minute ago   Up About a minute   0.0.0.0:4567->4567/tcp   xxxxx-webclient-middleman-server
    

    ローカルに保存されているDockerイメージを確認する

    ローカルに保存されているイメージを確認するためのコマンドです。

    $ docker images
    REPOSITORY                    TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
    xxxx-webclient-middleman   latest              db26d399a575        10 minutes ago      880.3 MB
    ruby                          2.1.4               766162a99b23        5 months ago        799.2 MB
    

    より詳しいDocker/Boot2dockerコマンドはこちら。

    加えてこちらのサイトも勉強になります。

    今回はここまで。
    これからはデザイナーでも黒い画面が使えないとどんどん置いて行かれてしまいますからね。怖がらず使って行きたいものです。

    参考サイト

    シリーズ

    1. はじめてのDocker:ウェブデザイナーでも覚えておきたいMac向けDocker環境構築と使い方
    2. はじめてのDocker:Docker上で動かしているMiddlemanにアクセスしてLiveReloadを使う(小ネタ)

    コメント・フィードバック