Posted at

Docker Machine で AWS/Azure 上に Docker ホストを作成する

More than 3 years have passed since last update.


はじめに

Docker Machine で AWS と Microsoft Azure 上に Docker ホストを作成する手順をまとめておきます。


Docker Machine とは?

ローカルマシン上やクラウド上に Docker のホストを作成するツールです。

Docker ホストの作成以外に、ホストの停止・開始、Docker のアップグレードなどができます。


環境

今回の検証環境は以下です。

DockerMachine.png


Docker Machine のインストール

ローカルのPCに Docker Machine をインストールします。


LocalPC

$ 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 インスタンスが作成されます。


LocalPC

$ 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 を発行するための証明書を作成します。


LocalPC

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 ホストを作成します。


LocalPC

$ 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 ホストの一覧を確認できます。


LocalPC

$ 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 ホスト上でコンテナを起動させるには次のようにします。


LocalPC

# リモートの 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


同じことを以下のように実行することもできます。


LocalPC

$ 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 接続できます。


LocalPC

$ docker-machine ssh docker-aws01



参考サイト

Docker Machine

Azure で docker マシンを使用する方法

Docker Machine リファレンス