はじめに
Docker Machine で AWS と Microsoft Azure 上に Docker ホストを作成する手順をまとめておきます。
Docker Machine とは?
ローカルマシン上やクラウド上に Docker のホストを作成するツールです。
Docker ホストの作成以外に、ホストの停止・開始、Docker のアップグレードなどができます。
環境
今回の検証環境は以下です。
Docker Machine のインストール
ローカルのPCに Docker Machine をインストールします。
$ wget https://github.com/docker/machine/releases/download/v0.5.0/docker-machine_linux-amd64.zip
$ unzip docker-machine_linux-amd64.zip
$ rm docker-machine_linux-amd64.zip
$ sudo mv docker-machine* /usr/local/bin/
Docker ホストの作成
AWS に作成する場合
以下のコマンドを実行すると Docker Engine がインストールされた EC2 インスタンスが作成されます。
$ docker-machine create \
--driver amazonec2 \
--amazonec2-access-key AKIXXXXX \
--amazonec2-secret-key XXXXX \
--amazonec2-vpc-id vpc-XXXXXXXX \
--amazonec2-subnet-id subnet-XXXXXXXX \
--amazonec2-region ap-northeast-1 \
--amazonec2-instance-type t2.micro \
docker-aws01
Microsoft Azure に作成する場合
まず、Azure へ API を発行するための証明書を作成します。
openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout azure.pem -out azure.pem
openssl pkcs12 -export -out azure.pfx -in azure.pem -name "My Azure Cert"
openssl x509 -inform pem -in azure.pem -outform der -out azure.cer
そして、作成した証明書(ここでは azure.cer) を Azure のポータルサイトからインポートします。
ここまで準備が出来たら、Docker ホストを作成します。
$ docker-machine create -d azure \
--azure-subscription-id="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" \
--azure-subscription-cert="azure.pem" \
--azure-location "Japan East" \
docker-azure01
コマンドの最後に指定する名前(上記の docker-azure01)は、Azure 上のクラウドサービス名としても使われるため、Azure 全体でユニークな名前である必要があります。
作成したホストの確認
次のコマンドで、作成した Docker ホストの一覧を確認できます。
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
docker-aws01 * amazonec2 Running tcp://54.250.148.168:2376
docker-azure01 - azure Running tcp://docker-azure01.cloudapp.net:2376
Docker Machine のコマンド
Docker Machine は基本的に Docker ホストを操作するためのツールですが、リモートから Docker Engine を制御しやすくしたり、Docker ホストに SSH 接続する機能もあります。
コンテナの作成
例えばローカルPCから、AWS の Docker ホスト上でコンテナを起動させるには次のようにします。
# リモートの Docker Engine の情報を環境変数にセット
$ eval docker-machine env docker-aws01
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://54.250.148.168:2376"
export DOCKER_CERT_PATH="/home/ubuntu/.docker/machine/machines/docker-aws01"
export DOCKER_MACHINE_NAME="docker-aws01"
# ローカルの Docker コマンドから、リモート(この場合は AWS)の Docker エンジンを操作
$ docker run -itd --name aws busybox
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
39bd49c3fb49 busybox "sh" 4 seconds ago Up 3 seconds aws
同じことを以下のように実行することもできます。
$ docker $(docker-machine config docker-azure01) run -itd --name azure busybox
$ docker $(docker-machine config docker-azure01) ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dab1a0bad67f busybox "sh" 6 seconds ago Up 5 seconds azure
SSH での接続
Docker Machine から、作成した Docker ホストに SSH 接続できます。
$ docker-machine ssh docker-aws01
参考サイト
Docker Machine
Azure で docker マシンを使用する方法
Docker Machine リファレンス