はじめての Docker シリーズはじめてのDocker:ウェブデザイナーでも覚えておきたいMac向けDocker環境構築と使い方
仕事で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つ用意しておくソフトウェアがあります。 VirtualBoxとHomebrewです。ここでは詳しい説明は省きますがそれぞれの環境を用意します。
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コマンドはこちら。
加えてこちらのサイトも勉強になります。
今回はここまで。
これからはデザイナーでも黒い画面が使えないとどんどん置いて行かれてしまいますからね。怖がらず使って行きたいものです。
参考サイト
- Homebrewの仕組みについてまとめておく
- 【個人メモ】docker image を作っていく流れ
- コンテナに入りたい?それ docker exec でできるよ
- Dockerコンテナを非専門家でも使えるようにした学生プロジェクトKitematicをDockerが買収
シリーズ
- はじめてのDocker:ウェブデザイナーでも覚えておきたいMac向けDocker環境構築と使い方
- はじめてのDocker:Docker上で動かしているMiddlemanにアクセスしてLiveReloadを使う(小ネタ)