Vagrantを使ってIDCFクラウド上にDockerの環境を作成してみる例です。
IDCFクラウドの準備
この例ではIDCFクラウドを使用するためIDCFのアカウントを取得が必要です。
仮想マシンの作成にはお金がかかりますが最小構成では1時間1円程度です。キャンペーンが利用できる場合もあります。
動作確認とSSH鍵の登録
アカウントが作成できたら仮想マシンの作成とSSHの接続が正しくできることを確認しておきます。
方法はドキュメントを参照してください。
作成したSSH鍵の名前を控えておいてください。
SSH接続が正しくできることが確認できたら仮想マシンは削除してかまいません。
IPアドレスのID取得
IDCFの管理画面のサイドバーのIPアドレス > network1をクリックします。
表示される画面の「ID」を控えます。(「関連ネットワークID」ではないので注意。)
APIの情報の取得
IDCFの管理画面のサイドバーのAPIをクリックしAPI Key、Secret Keyの情報を控えておきます。
プラグインのインストール
IDCFクラウドはCloudStackというソフトウェアを基盤としているためCloudStack用のプラグインをインストールします。
$ vagrant plugin install vagrant-cloudstack
VagrantfileにCloudStack用の設定を追加
VirtualBoxをプロバイダーとして使用していた場合には既にVagrantfileがあると思いますのでCloudStack用の設定を追加してみます。
例として以下のようなUbuntu14.04の仮想マシンを起動するVagrantfileがあったとします。
Vagrant.configure(2) do |config|
config.vm.box = "ubuntu/trusty64"
end
このVagrantfileにIDCFクラウドでUbuntu 14.04の仮想マシンを起動する設定を追加します。
Vagrant.configure(2) do |config|
config.vm.box = "ubuntu/trusty64"
config.vm.provider :cloudstack do |cloudstack, override|
# ダミーBox
override.vm.box = "dummy"
override.vm.box_url = "https://github.com/klarna/vagrant-cloudstack/raw/master/dummy.box"
# CloudStackAPIを使用するためのエンドポイント・認証情報
cloudstack.host = "compute.jp-east.idcfcloud.com"
cloudstack.path = "/client/api"
cloudstack.port = "443"
cloudstack.scheme = "https"
cloudstack.api_key = "API Keyをここに記入"
cloudstack.secret_key = "Secret Keyをここに記入"
# 仮想マシン作成のパラメータ
cloudstack.display_name = "ubuntu"
cloudstack.template_name = "Ubuntu Server 14.04 LTS 64-bit"
cloudstack.zone_name = "tesla"
cloudstack.service_offering_name = "light.S1"
# 仮想マシンへの接続に必要なネットワークの設定
cloudstack.pf_ip_address_id = "IPアドレスのIDを記入"
cloudstack.pf_public_port = "22"
cloudstack.pf_private_port = "22"
cloudstack.keypair = "SSH鍵の名前を記入"
override.ssh.private_key_path = "SSHの秘密鍵のパスを記入"
override.ssh.username = "root"
end
end
IDCFクラウドに限らずクラウドを使用する場合、通常仮想マシンはクラウド上にあるイメージを使用して作成されます。
VirtualBoxを使用する際のようにイメージとしてのBoxは必要ないためダミーを使用します。
override.vm.box = "dummy"
override.vm.box_url = "https://github.com/klarna/vagrant-cloudstack/raw/master/dummy.box"
CloudStack APIを使用するためのエンドポイントおよび認証情報です。ここに控えておいたAPI Key、Secret Keyが入ります。
cloudstack.host = "compute.jp-east.idcfcloud.com"
cloudstack.path = "/client/api"
cloudstack.port = "443"
cloudstack.scheme = "https"
cloudstack.api_key = "API Keyをここに記入"
cloudstack.secret_key = "Secret Keyをここに記入"
作成する仮想マシンのスペック・イメージの設定です。
cloudstack.display_name = "ubuntu"
cloudstack.template_name = "Ubuntu Server 14.04 LTS 64-bit"
cloudstack.zone_name = "tesla"
cloudstack.service_offering_name = "light.S1"
クラウド上の仮想マシンにSSHで接続するための設定です。
cloudstack.pf_ip_address_id = "IPアドレスのIDを記入"
cloudstack.pf_public_port = "22"
cloudstack.pf_private_port = "22"
cloudstack.keypair = "SSH鍵の名前を記入"
override.ssh.private_key_path = "SSHの秘密鍵のパスを記入"
override.ssh.username = "root"
仮想マシンの起動
次の用にプロバイダーを指定することでIDCFクラウド上で仮想マシンを起動することができます。
$ vagrant up --provider=cloudstack
upした後のSSH、仮想マシンの削除等の操作についてはVirtualBoxの場合と同じです。
Docker Provisionerでコンテナを起動する
VagrantのDocker Provisionerを使用して作成した仮想マシン上でコンテナを起動してみます。
Vagrantfile
例としてMySQLのコンテナを起動する例を示します。先ほどのVagrantfileにProvisionerの設定を追加すると以下の様になります。
Vagrant.configure(2) do |config|
config.vm.box = "ubuntu/trusty64"
config.vm.provider :cloudstack do |cloudstack, override|
# ダミーBox
override.vm.box = "dummy"
override.vm.box_url = "https://github.com/klarna/vagrant-cloudstack/raw/master/dummy.box"
# CloudStackAPIを使用するためのエンドポイント・認証情報
cloudstack.host = "compute.jp-east.idcfcloud.com"
cloudstack.path = "/client/api"
cloudstack.port = "443"
cloudstack.scheme = "https"
cloudstack.api_key = "API Keyをここに記入"
cloudstack.secret_key = "Secret Keyをここに記入"
# 仮想マシン作成のパラメータ
cloudstack.display_name = "ubuntu"
cloudstack.template_name = "Ubuntu Server 14.04 LTS 64-bit"
cloudstack.zone_name = "tesla"
cloudstack.service_offering_name = "light.S1"
# 仮想マシンへの接続に必要なネットワークの設定
cloudstack.pf_ip_address_id = "IPアドレスのIDを記入"
cloudstack.pf_public_port = "22"
cloudstack.pf_private_port = "22"
cloudstack.keypair = "SSH鍵の名前を記入"
override.ssh.private_key_path = "SSHの秘密鍵のパスを記入"
override.ssh.username = "root"
end
# MySQLのコンテナを起動
config.vm.provision "docker" do |d|
d.run "mysql-server", image: "mysql",
args: "-e MYSQL_ROOT_PASSWORD=password"
end
end
Provisionerの実行
一度仮想マシンを削除して再度仮想マシンを作成すると、仮想マシンでDockerのインストールとコンテナの起動が行われているメッセージが表示されます。
(Docker Provisionerを使用した場合、VagrantによってDockerがインストールされます。)
$ vagrant destroy -f
$ vagrant up --provider=cloudstack
vagrant provision
コマンドでProvisionerのみを実行することも可能です。
コンテナの動作確認
仮想マシンにでログインし正常にコンテナが起動したことを確認してみます。
まず、SSHで仮想マシンにログインします。
$ vagrant ssh
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b6817f3c83eb mysql:latest "/entrypoint.sh mysq About a minute ago Up About a minute 3306/tcp mysql-server
MySQLサーバーに接続するためにlinkオプションを指定して新規のコンテナを起動しbashを実行します。
$ docker run -it --link mysql-server:mysql --rm mysql bash
linkによって設定された環境変数を確認してみます。
$ env | grep MYSQL
MYSQL_ENV_MYSQL_ROOT_PASSWORD=password
MYSQL_VERSION=5.6.22
MYSQL_PORT_3306_TCP_PORT=3306
MYSQL_PORT_3306_TCP=tcp://172.17.0.2:3306
MYSQL_ENV_MYSQL_VERSION=5.6.22
MYSQL_PORT_3306_TCP_PROTO=tcp
MYSQL_NAME=/drunk_nobel/mysql
MYSQL_MAJOR=5.6
MYSQL_PORT_3306_TCP_ADDR=172.17.0.2
MYSQL_ENV_MYSQL_MAJOR=5.6
MYSQL_PORT=tcp://172.17.0.2:3306
これらの環境変数を使ってMySQLサーバーに接続できることができます。
$ mysql -u root -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"
次のようにdocker run
コマンドを使って直接MySQLサーバーに接続することも可能です。
$ docker run -it --link mysql-server:mysql --rm mysql sh -c 'exec mysql -u root -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'