Moved from Arukas to hyper.sh
Arukasのベータサービスが終了したので移住先を探さねばなりません。
そこで、少し前に会社のSlackでDockerマンが呟いてるのを見てオッとなったhyper.shを使ってみます。
hyper.shもArukasのようなContainer-as-a-Serviceで、特徴は通常のLinuxコンテナは同一ホスト上のカーネルから複数立ち上げるのに対し、hyper.shはコンテナ毎に独立したカーネル上で動かしている点です。これにより、セキュアなコンテナ環境の提供を可能にしているようです。
また、コンテナの利点である起動スピードを殺さないように特別なハイパーバイザが使われているようです。
あとはDockerボリュームを使えるのがありがたい(Arukasはβ版なのもありボリュームを使えなかった)。データ永続化できる!やった!
お値段。結構細かく課金される。記事の最後の方で1コンテナ立てた際の細かい月額料金を計算しています。
サービス登録すると1ヶ月のフリー期間が始まるんだけど、クレジットカードを登録するとフリー期間が3ヶ月に延長されるので登録しておくと良さそう(最初から3ヶ月かも?うる覚え)。
フリー期間に対象となるリソースは以下。コンテナを稼働させるのに必要なもの一式一セットって感じですね。
- 1 container
- 1 image
- 1 Floating IP (FIP)
- 1 Volume
- 1 Set of credentials
フリー期間が終わると課金が開始される。
during the free tier period, you will incur no costs for the following resources: 1 Container (<= S4), 1 Image, 1 Volume, 1 Floating IP.
Once the free tier period ends, you will be charged accordingly each month for all resources.
ログイン後のダッシュボードより引用
フリー期間中に使えるコンテナの最大スペックであるS4は、メモリ512MB、CPUは1コア。基本的にメモリのサイズとCPUのコア数でコンテナのスペックが上がっていく感じですね。ルートボリュームはどのコンテナも10GBでこいつも課金対象なので注意。ネットワークはどのコンテナでも無料。
インストール
install方法。
brew install hyper
ヘルプを見ると、dockerコマンドをラップしたような印象。dockerコマンドと大体同じ感覚で使えるぽい(しかし動くのはローカルではなくhyper上!)。
Usage: hyper [OPTIONS] COMMAND [arg...]
hyper [ --help | -v | --version ]
A self-sufficient runtime for containers.
Options:
--config=~/.hyper Location of client config files
-D, --debug Enable debug mode
-H, --host=[] Daemon socket(s) to connect to
-h, --help Print usage
-l, --log-level=info Set the logging level
-v, --version Print version information and quit
Commands:
attach Attach to a running container
commit Create a new image from a container's changes
compose Define and run multi-container applications with Hyper.sh
config Config access key and secret key to Hyper server
create Create a new container
cron Manage cron service of Hyper.sh
exec Run a command in a running container
fip Manage Hyper.sh floating IPs
func Manage func service of Hyper.sh
history Show the history of an image
images List images
info Display system-wide information
inspect Return low-level information on a container or image
kill Kill a running container
load Load a local image or a tar file
login Register or log in to a Docker registry
logout Log out from a Docker registry
logs Fetch the logs of a container
port List port mappings or a specific mapping for the CONTAINER
ps List containers
pull Pull an image or a repository from a registry
push Push an image or a repository to a registry
rename Rename a container
restart Restart a container
rm Remove one or more containers
rmi Remove one or more images
run Run a command in a new container
search Search the Docker Hub for images
service Manage service of Hyper.sh
sg Manage security group of Hyper.sh
snapshot Manage Hyper.sh snapshots
start Start one or more stopped containers
stats Display a live stream of container(s) resource usage statistics
stop Stop a running container
update Update resources of one or more containers
version Show the Hyper.sh version information
volume Manage Hyper.sh volumes
wait Block until a container stops, then print its exit code
Run 'hyper COMMAND --help' for more information on a command.
hyperの設定
まずはクレデンシャルの作成。
hyperコマンドで認証。
$ hyper config
WARNING: null cloud config
Enter Access Key: XXXXXXXX
Enter Secret Key: YYYYYYYY
WARNING: Your login credentials has been saved in /Users/lorentzca/.hyper/config.json
これだけ。
もしくはHYPER_ACCESS
とHYPER_SECRET
環境変数があればそれを使ってくれる。
コンテナの起動
dockerコマンドと同じ。
/var/vault
にボリュームをマウントしている(ボリュームは無料期間が終わると課金対象になる)
hyper run -d --name vault -v /var/vault -p 8200:8200 lorentzca/vault_on_docker
実行結果はこんな感じ。
$ hyper run -d --name vault -v /var/vault -p 8200:8200 lorentzca/vault_on_docker
Unable to find image 'lorentzca/vault_on_docker:latest' in the current region
latest: Pulling from lorentzca/vault_on_docker
0a8490d0dfd3: Pull complete
7c27cd5dccf7: Pull complete
1ab9185c3189: Pull complete
ec203001e1a0: Pull complete
Digest: sha256:df6dd50de552521f04d2362742ee7975dd6f2f86e1ae98a2d30f1e529d2c8313
Status: Downloaded newer image for lorentzca/vault_on_docker:latest
15663fe66c5f3527689efbec1c44972914b5a55f3087c4592262ed6f2212140e
起動しました。✨
$ hyper ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES PUBLIC IP
15663fe66c5f lorentzca/vault_on_docker "/usr/local/bin/vault" 9 minutes ago Up 9 minutes 0.0.0.0:8200->8200/tcp vault
デフォルトのコンテナのサイズはs4で、--size
オプションを使うことで指定できるとのこと。
起動したコンテナのサイズの情報は以下のようにinspect内にある。
$ hyper inspect vault | jq '.[].Config.Labels.sh_hyper_instancetype'
"s4"
コンテナの削除
コンテナ周りの削除をやってみます。
- コンテナの停止、ボリュームの削除、イメージの削除
$ hyper stop vault
vault
$ hyper rm vault
vault
NOTICE : attached volume(1366da82761d2640cf3ab618d9536c28ac95c626ae10233adc8b43e791fb1b3) is not deleted
$ hyper volume rm 1366da82761d2640cf3ab618d9536c28ac95c626ae10233adc8b43e791fb1b3
1366da82761d2640cf3ab618d9536c28ac95c626ae10233adc8b43e791fb1b3
$ hyper rmi lorentzca/vault_on_docker
Untagged: lorentzca/vault_on_docker:latest
Deleted: sha256:0d8d6211595dd87f14dc444836378243212c7d327d6be613eccedc3af596a16f
Deleted: sha256:44e876c5395ac9ce29eed7c1eb02e2cf2119c1ed23e082728861f3c2dc8eead7
Deleted: sha256:6e59fa059f99d5537154319a7b1ca30615a1779ffb13d7b130589e12ccd069a0
Deleted: sha256:71a6df77b898cead95efd1d03e18503837a315df8d4bbe7796dc6ffb18e25183
ボリュームに名前をつけて作成
ボリュームは単体で作成可能で、名前もつけられます。後から変更はできない。たぶん。
hyper volume create --size=10 --name=vault-data
できた。
$ hyper volume ls
DRIVER NAME SIZE CONTAINER
hyper vault-data 10 GB
こんな感じでコンテナを起動するときに指定(-v vault-data:/var/vault
)できます。
hyper run --size=s1 -d --name vault -v vault-data:/var/vault -p 8200:8200 lorentzca/vault_on_docker
コンテナに紐付けられました。
$ hyper volume ls
DRIVER NAME SIZE CONTAINER
hyper vault-data 10 GB 1b98009e650b54364b7e1860c5de8021112d236b79889f3dad188f2d7a7ca052
FIPをアタッチする
FIP(Floating IP)はコンテナ間で付け替え可能なグローバルIPアドレスです。
まずFIPを作成します。
hyper fip allocate 1
以下のような警告が出ます。
Please note that Floating IP (FIP) is billed monthly. The billing begins when a new IP is allocated, ends when it is released. Partial month is treated as a entire month. Do you want to continue? [y/n]:
hyper.shは基本的に秒単位で課金されますが、FIPは取得した瞬間1ヶ月分の請求(1ドル)が発生します。
コンテナにアタッチします。
hyper fip attach <割り当てたいFIP> vault
hyper ps
でFIPが割り当てられたか確認できます。
費用
無料期間なのでわかりませんが、ここまでで使ってきたリソースから計算すると、
- s1サイズのコンテナ代: $0.0000004/second = $1.03/month
- s1コンテナの10GBのルートファイルシステム代: $0.1/GB/month * 10 = $1/month
- 10GBのボリューム代: $0.1/GB/month * 10 = $1/month
- lorentzca/vault_on_docker のボリューム代(59.68MBなので100MBに切り上げ計算と思われる): 1GB@$0.0000000386/GB/second $0.1/GB/month = $0.01/month
- FIP代: $1/month
なので合計すると1ヶ月で発生する請求は$4.04くらいと思われます(そこはかとなく不吉な数字w)。
感想
最初見たときは1ヶ月1ドルかと思ってウオオって思ったけど実際は5ドル弱でござった…。5ドルなら良いけどね!
課金体系がかなり細かいので注意が必要そう。特にDocker Hubから引っ張ってきたイメージにも課金が発生するのは気をつけなければ…。色々コンテナ建てて掃除して〜ってやってたら実はイメージが数GB分溜まっちゃってましたみたいなのがありそう。
とりあえず使いやすいし最小構成なら5ドル以内に収まりそうなのでArukasの移住先として使っていくぞ!