はじめに
DigitalOceanの管理ツール(dioc)を作成したので、ご紹介します。(利用については自己責任でお願いします。)
操作は、Ubuntu上で、DockerとPython3.5を用います。Windowsの方は、Ubuntuを入れてDockerを使う方法を参考に、VirtualBox、Ubuntu14、Docker1をインストールしてください。
Dockerが使えれば、Dockerイメージdioc-python-3.5を用いてすぐに始められます。
用語
- DigitalOcean: AWSのEC2のようなクラウドサービス。
- Droplet: 仮想OSのインスタンス。
- Snapshot: Dropletの状態を保存したもの。Snapshotを元にDropletを作成できます。
- Image: Dropletの元になるもの。公式のものと、Snapshotで作成した私的なものから選べます。公式なものは、OSだけのものや、アプリ2込み(下図)のものがあります。
- 課金: 1月当たり5$, 10$, 20$, 40$, 80$, 160$, 320$, 480$, 640$のプランがあり、メモリは価格に比例しています。Dropletを作成すると、停止(PowerOff)しても破棄(Destroy)するまで、課金されます。不要な課金を避けるためには、Droplet停止、DropletからSnapshot作成、Droplet破棄を行えばよいです。現在、Snapshotを作成しても無料ですが、将来は課金されるようです。また、データ転送量がリミットを超えても課金が発生します。
- Cassandra: NoSQLデータベース
- Discourse: フォーラム管理
- Django: Webフレームワーク
- Docker: コンテナ管理
- Dokku: Heroku(無料クラウドサーバー)クローン
- Drone: 継続的インテグレーション
- Drupal: コンテンツマネジメントシステム
- Elixir: プログラミング言語
- ELK: Elasticsearch, Logstash, Kibana
- Ghost: ブログシステム
- GitLab: プライベートGitHub
- Joomla: コンテンツマネジメントシステム
- LAMP: Linux, Apache, MySQL, PHP
- LEMP: Linux, Nginx, MySQL, PHP
- Magento: ECプラットフォーム
- MEAN: MongoDB, Express, AngularJS, Node
- MediaWiki: プライベートWikipedia
- MongoDB: NoSQLデータベース
- Mumble: ボイスチャット
- node: プログラミング言語
- ownCloud: ファイル共有
- PHPMyAdmin: MySQL管理ツール
- Redis: インメモリデータストア
- Redmine: プロジェクト管理
- Ruby on Rails: Webフレームワーク
- WordPress: ブログシステム
なぜDigitalOceanか?
- 安い。支払いの上限あり。1ヶ月5$から。
- 早い。1分以内の起動。全てSSD。
- 簡単。シンプルな管理画面。
- 利用者が多い。
- 今なら10$の特典つき!?
DigitalOceanのデメリット
- 東京リージョンがありません。シンガポールを選びましょう。
- AWSに比べて下記の機能がないため、大規模な場合は一手間かかります。
- Reserved Instance
- Marketplace
- AvailabilityZone
- SecurityGroup
- ElasticIP
- ELB
- VPC
参考:
AWSのインスタンス高過ぎワロタ。探せば安くて美味いところはあります。
使う前に知りたかったDigitalOceanまとめ
DigitalOceanでDockerを使うメリット
- アプリケーションを配布するのに比べて、より確実に稼働させることができます。
- 課金のかからないローカルで実行環境を作成できます。
- CoreOSを使えば、デプロイも簡単です。
- 軽快に動作します。
参考:Docker公式OS一覧
DigitalOceanのアカウント作成
ここからは、クレジットカードまたはPayPalが必要になり、課金が発生しますのでご注意ください。
- DigitalOcean3を開いて、e-mailとパスワードを入力し、[Create Account]を押します。
- メールが送られてくるので、リンク先をクリックし、クレジットカードなどの方法を入力します。
DigitalOceanを使ってみよう
通常、Dropletのログインパスワードはメールで送られてきます。(数分待って)メールでパスワード確認してからログインするのは、手間がかかるので、SSH Keyを用いる方法を説明します。
SSH Keyの設定
- Ubuntuで下記を実行します。パスフレーズは、ログインで必要になりますので覚えてください。
- ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa
- ssh-add
- 下記を実行し、表示される内容をコピーしてください。
- cat ~/.ssh/id_rsa.pub
- DigitalOceanにログインし、右上のからSettingsを選んでください。
- 左の[Security]を選び、[Add SSH Key]を押してください。
- [Name]を[id_rsa]にし、[Public SSH Key]にコピーした内容を貼り付けて、[Create SSH Key]を押してください。
最初のDropletを作成してみる
- [Create Droplet]を押します。
- [Choose an image]は[CoreOS]に変えましょう。
- [Choose a size]は一番安い"$5/mo"に変えましょう。
- [Choose a datacenter region]は、日本に近い"Singapore"に変えましょう。
- [Add your SSH keys]は"id_rsa"をチェックしてください。
- [Create]ボタンを押してください。課金が始まります。
- 数十秒ほどで起動します。
- [IP Address]をコピーしてください。
- Ubuntuで下記を実行してください。初回はパスフレーズを聞かれます。
- ssh core@[コピーしたIP Address]
- 下記を実行するとスペックがわかります。
- cat /proc/cpuinfo
- ログアウトしてください。
- Droplet画面で作成したDropletをDestroyしてください。
- Destroyしないと、ずっと課金されますので注意してください。
APIトークンの発行
プログラムからDigitalOceanを操作するには、APIトークンが必要になります。下記の方法でトークンを取得してください。トークンがあれば、自由にDigitalOceanを利用できます。トークンは大事に管理してください。
参考:初心者がAWSでミスって不正利用されて$6,000請求、泣きそうになったお話。
- DigitalOceanにログインし、上部のAPIを選んでください。
- [Generate new token]を押してください。
- [Token Name]に"apitok"を入れてください。[Write]はチェックしたままにしてください。
- [Generate Token]を押してください。
- 画面に表示されたトークンを適宜メモしてください。この画面を閉じると同じトークンは、2度と表示されません。
- トークンを忘れてしまったら、削除して再作成してください。
Diocの紹介
環境構築
- cryptographyをインストールしてください。Anacondaであれば、下記のようにしてください。
- "conda install -y cryptography"
- ローカルで実行したい場合
- Python3.5を使える状態で"pip install dioc"としてください。その後で、下記のように".bashrc"に追記してください(一度だけでOK)。
- Dockerコンテナ内で実行したい場合
- ローカルで下記のように".bashrc"に追記してください(一度だけでOK)。その後で、"docker run -it -v ~:/root tsutomu7/dioc-python-3.5
"としてください。
- ローカルで下記のように".bashrc"に追記してください(一度だけでOK)。その後で、"docker run -it -v ~:/root tsutomu7/dioc-python-3.5
cat << eof >> .bashrc
export DIOC_TOKEN=「DigitalOceanのAPIトークン」
export DIOC_DEFAULT_SSHKEY=id_rsa
export DIOC_DEFAULT_SIZE=512mb
export DIOC_DEFAULT_REGION=sgp1
if [ -x /usr/local/bin/dio -o -x /opt/conda/bin/dio ]; then
eval "$(_DIO_COMPLETE=source dio)"
fi
eof
source ~/.bashrc
Bashで使う場合
Bashの操作では、コマンドは"dio"です。bash-completionが使えるようになっています。
"イメージ名"は、例えば、「'899.17.0 (stable)'」としてください。
"dio list image"でイメージの一覧が表示されます。
# Dropletの作成
dio create "Droplet名" "イメージ名"
# SnapshotからDropletの作成
dio create "Droplet名" "Snapshot名"
# SSHでコマンド実行
dio ssh "Droplet名" "コマンド"
# ファイルコピー
dio scp "Droplet名:ファイルバス" "Droplet名:ファイルバス"
# IPアドレス確認
dio ip "Droplet名"
# Droplet一覧確認
dio list
# その他の一覧確認(対象は、droplet, image, private, ssh, size, regionが選べます)
dio list "対象"
# Dropletの削除
dio destroy "Droplet名"
## Mongodbサーバーの起動例
dio create test
dio ssh test
mkdir mongo
docker run -d -p 27017:27017 -v ~/mongo:/data/db --name mongo mongo
# docker exec -it mongo mongo
exit
dio destroy test
Webサーバーの起動例
DigitalOceanなら簡単にサーバーの起動もできます。
下記では、GoTourのサーバーを起動しています。
dio create test '' user_data='"#!/bin/bash\ndocker run -p 80:8080 tsutomu7/gotour"'
firefox `dio ip test`
# do something
dio destroy test
Python3.5から使う場合
基本的にpython-digitaloceanのラッパーなので、メソッドはそちらを参照してください。DropletメソッドでDropletの起動もします。SSHクライアントは自動的に6回までリトライします。
from dioc import *
# Dropletの作成
d = Droplet('dgoc') # dgocという名前のCoreOSのDropletを作成
# SnapshotからDropletの作成
d = Droplet('dgoc', 'test') # testというsnapshotから名前dgocのDropletを作成
# IPアドレスの確認
print(d.ip_address)
# SSHクライアントの作成
c = ssh_client(d)
# SSHでコマンド実行
c.exec_command(コマンド)
# Dropletの削除
d.destroy()
以上
-
Linuxでは、"wget -qO- https://get.docker.com/ | sh" ↩
-
DigitalOceanで用意されているアプリ ↩
-
このURLから登録すると私にポイントが入ります。 ↩