tl;dl
Docker Toolbox を Windows 8.1 にインストール(boot2docker からの移行)してみたが、すんなりいかなかったのでメモしてみた。(ほぼ docker-machine 周りのお話)
尚、詳細は以下のドキュメントに記載されている。
memo
検証環境
既に boot2docker を利用している環境に Docker Toolbox をインストールする。
boot2docker-vm からの移行
意外に時間が掛かるので気長に待とう。
Docker Toolbox のインストールウィザードの最後に boot2docer-vm が存在する場合には移行するか否かを問われるので迷わず移行を選んだは良かったのだが、上記の画面が出るまで(移行完了まで)に 20 分位かかったので気長に待つと良さそう。
Docker Toolbox には Virtualbox も同梱されている
VirtualBox のバージョンは 5.0.1 だった。(2015/08/15 現在)
Docker Toolbox のインストール後は PC の再起動をした方が良さそう
全ての環境でこれが言えるか分からないけど、再起動せずに移行した VM を起動しようとすると以下のようなエラーが出た。(※ MsysGit 環境で実行した結果。)
kappa@KAPPAFACE ~ $ docker-machine.exe start default Error setting up host only network on machine start: exit status 1 Started machines may have new IP addresses. You may need to re-run the `docker-machine env` command.
PC を再起動することで正常に起動することを確認した。
kappa@KAPPAFACE ~ $ docker-machine.exe ls NAME ACTIVE DRIVER STATE URL SWARM default virtualbox Stopped kappa@KAPPAFACE ~ $ docker-machine.exe start default Starting VM... Started machines may have new IP addresses. You may need to re-run the `docker-machine env` command.
docker-machine env で環境変数を確認する
何も考えず(ドキュメントもろくすっぽ読まず)に docker ps
を叩くと…
kappa@KAPPAFACE ~ $ docker ps Get http://127.0.0.1:2375/v1.20/containers/json: dial tcp 127.0.0.1:2375: ConnectEx tcp: No connection could be made because the target machine actively refused it.. * Are you trying to connect to a TLS-enabled daemon without TLS? * Is your docker daemon up and running?
上記のようなエラーとなるので docker-machine env ${NAME}
で DOCKER_HOST
等の環境変数を確認する。
kappa@KAPPAFACE ~ $ docker-machine.exe env default export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://xxx.xxx.xxx.xxx:2376" export DOCKER_CERT_PATH="C:Userskappa.dockermachinemachinesdefault" export DOCKER_MACHINE_NAME="default" # Run this command to configure your shell: # eval "$(c:Program FilesDocker Toolboxdocker-machine.exe env default)"
コマンドプロンプトの場合には --shell cmd
引数を付けて実行する。
C:Userskappa>docker-machine.exe env --shell cmd default set DOCKER_TLS_VERIFY=1 set DOCKER_HOST=tcp://xxx.xxx.xxx.xxx:2376 set DOCKER_CERT_PATH=C:Userskappa.dockermachinemachinesdefault set DOCKER_MACHINE_NAME=default # Run this command to configure your shell: # copy and paste the above values into your command prompt
尚、docker-machine config
を実行すると docker
コマンドの引数として出力してくれるので有り難い。
kappa@KAPPAFACE ~ $ docker-machine.exe config default --tlsverify --tlscacert="C:\Users\kappa\.docker\machine\machines\default\ca.pem" --tlscert="C:\Users\kappa\.docker\machine\machines\default\cert.pem" --tlskey="C:\Users\kappa\.docker\machine\machines\default\key.pem" -H=tcp://xxx.xxx.xxx.xxx:2376
DigitalOcean に Docker VM マシンを作ってみる
docker-machine ではローカルホストの VirtualBox 以外の VM 環境にも VM を作成、管理することが出来るので DigitalOcean 環境に Docker VM マシンを作成してみたい。
以下のように docker-machine create
コマンドを実行して作成する。(※ -D
オプションを付けて Debug 出力を有効にしている。)
kappa@KAPPAFACE ~ $ docker-machine -D create > --driver digitalocean > --digitalocean-access-token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx > ocean-vm Creating SSH key... Creating Digital Ocean droplet... Created droplet ID 6599565, IP address xxx.xxx.xxx.xx (snip) Using SSH client type: external About to run SSH command: if grep -xq 127.0.1.1.* /etc/hosts; then sudo sed -i 's/^127.0.1.1.*/127.0.1.1 ocean-vm/g' /etc/hosts; else echo '127.0.1.1 ocean-vm' | sudo tee -a /etc/hosts; fi &{C:Program Files (x86)Gitbinssh.exe [C:Program Files (x86)Gitbinssh.exe -o PasswordAuthentication=no -o IdentitiesOnly=yes -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=quiet -o ConnectionAttempts=3 -o ConnectTimeout=10 -i C:Userskappa.dockermachinemachinesocean-vmid_rsa -p 22 root@104.236.247.40 if grep -xq 127.0.1.1.* /etc/hosts; then sudo sed -i 's/^127.0.1.1.*/127.0.1.1 ocean-vm/g' /etc/hosts; else echo '127.0.1.1 ocean-vm' | sudo tee -a /etc/hosts; fi] [][] false [] [] [] [] } SSH cmd err, output: exit status 255: Error creating machine: exit status 255 You will want to check the provider to make sure the machine and associated resources were properly removed.
マシンを作成したら環境変数を確認してみる。
kappa@KAPPAFACE ~ $ docker-machine.exe env ocean-vm open C:Userskappa.dockermachinemachinesocean-vmca.pem: The system cannot find the file specified.
上記のようなエラーが出る場合には docker-machine regenerate-certs
を実行して証明書、秘密鍵を生成する必要があった。
kappa@KAPPAFACE ~ $ docker-machine.exe regenerate-certs ocean-vm Regenerate TLS machine certs? Warning: this is irreversible. (y/n): y Regenerating TLS certificates
再度確認。
kappa@KAPPAFACE ~ $ docker-machine.exe env ocean-vm export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://xxx.xxx.xx.xxx:2376" export DOCKER_CERT_PATH="C:Userskappa.dockermachinemachinesocean-vm" export DOCKER_MACHINE_NAME="ocean-vm" # Run this command to configure your shell: # eval "$(c:Program FilesDocker Toolboxdocker-machine.exe env ocean-vm)"
docker コマンドを叩いてみる。
kappa@KAPPAFACE ~ $ docker $(docker-machine config ocean-vm) version Client: Version: 1.8.0 API version: 1.20 Go version: go1.4.2 Git commit: 0d03096 Built: Tue Aug 11 17:17:40 UTC 2015 OS/Arch: windows/amd64 Server: Version: 1.8.1 API version: 1.20 Go version: go1.4.2 Git commit: d12ea79 Built: Thu Aug 13 02:35:49 UTC 2015 OS/Arch: linux/amd64
尚、今回は触れていないが DigitalOcean 以外にも Amazon EC2 や Azure 等の各種クラウド環境や OpenStack 等の IaaS 環境にも構築出来るので、予算が許す限り試してみたいということで EC2 用のヘルプを掲載。
kappa@KAPPAFACE ~ $ docker-machine.exe create --help 2>&1 | grep amazon --amazonec2-access-key AWS Access Key [$AWS_ACCESS_KEY_ID] --amazonec2-ami AWS machine image [$AWS_AMI] --amazonec2-iam-instance-profile AWS IAM Instance Profile [$AWS_INSTANCE_PROFILE] --amazonec2-instance-type "t2.micro" AWS instance type [$AWS_INSTANCE_TYPE] --amazonec2-monitoring Set this flag to enable CloudWatch monitoring --amazonec2-private-address-only Only use a private IP address --amazonec2-region "us-east-1" AWS region [$AWS_DEFAULT_REGION] --amazonec2-request-spot-instance Set this flag to request spot instance --amazonec2-root-size "16" AWS root disk size (in GB) [$AWS_ROOT_SIZE] --amazonec2-secret-key AWS Secret Key [$AWS_SECRET_ACCESS_KEY] --amazonec2-security-group "docker-machine" AWS VPC security group [$AWS_SECURITY_GROUP] --amazonec2-session-token AWS Session Token [$AWS_SESSION_TOKEN] --amazonec2-spot-price "0.50" AWS spot instance bid price (in dollar) --amazonec2-ssh-user "ubuntu" set the name of the ssh user [$AWS_SSH_USER] --amazonec2-subnet-id AWS VPC subnet id [$AWS_SUBNET_ID] --amazonec2-vpc-id AWS VPC id [$AWS_VPC_ID] --amazonec2-zone "a" AWS zone for instance (i.e. a,b,c,d,e) [$AWS_ZONE] --driver, -d "none" Driver to create machine with. Available drivers: amazonec2, azure, digitalocean, exoscale, generic, google, hyper-v, none, openstack, rackspace, softlayer, virtualbox, vmwarevcloudair, vmwarevsphere
複数の Docker VM マシン環境での運用
以下のように Docker VM マシンが複数作成されているので環境変数を切り替えてアクセスしてみる。
kappa@KAPPAFACE ~ $ docker-machine.exe ls NAME ACTIVE DRIVER STATE URL SWARM default virtualbox Running tcp://xxx.xxx.xx.xxx:2376 ocean-vm digitalocean Running tcp://xxx.xxx.xx.xx:23
default の環境にアクセスしてみる。
# default の環境変数をセットする kappa@KAPPAFACE ~ $ eval $(docker-machine.exe env default) # docker image を実行 kappa@KAPPAFACE ~ $ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE inokappa/fluentd latest 31062c8970e4 14 hours ago 1.652 GB hello-world latest af340544ed62 8 days ago 960 B (snip) ubuntu latest 9bd07e480c5b 8 months ago 192.7 MB centos centos6 25c5298b1a36 8 months ago 215.8 MB centos latest 34943839435d 8 months ago 224 MB kiyoto/fluentd 0.10.56-2.1.1 655fdf622847 9 months ago 1.652 GB
boot2docker からの移行なので既にコンテナイメージが存在している。
次に DigitalOcean の環境にアクセスしてみる。
# --unset オプションで default の環境変数を unset する kappa@KAPPAFACE ~ $ eval $(docker-machine.exe env default --unset) # ocean-vm の環境変数をセットする kappa@KAPPAFACE ~ $ eval $(docker-machine.exe env ocean-vm) # docker image を実行 kappa@KAPPAFACE ~ $ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
作りたての Docker VM マシンなのでコンテナイメージは存在していない。
後片付け
ローカルホストの VirtualBox 以外の VM は後片付けしたいので以下のように VM を削除する。
kappa@KAPPAFACE ~ $ docker-machine.exe rm ocean-vm Successfully removed ocean-vm
以下のように DigitalOcean の VM については削除されていることが判る。
kappa@KAPPAFACE ~ $ docker-machine.exe ls NAME ACTIVE DRIVER STATE URL SWARM default virtualbox Running tcp://xxx.xxx.xxx.xxx:2376
念の為 DigitalOcean の API でも確認。
kappa@KAPPAFACE ~ $ curl -X GET -H 'Content-Type: application/json' -H 'Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' "https://api.digitalocean.com/v 2/droplets?page=1&per_page=1" {"droplets":[],"links":{},"meta":{"total":0}}
削除 OK 牧場。
ということで
Docker Toolbox いいなあと思ったところ
- docker-machine を使えば VirtualBox をはじめ DigitalOcean や EC2 等に Docker VM 環境をサクッと構築できる
- 必要なツールが一発でインストール出来る
ちょっとツライと思ったところ
- boot2docker-vm の移行が時間が掛かるなあ(移行中にステータス表示が無いのが辛かった)→何度か中断してしもた
- VirtualBox のバージョンを選びそう…
マスコット
インストーラーの最初に表示されるマスコットに癒やされる。