LinuxのDocker管理ツール「rancher」の紹介


rancher」はWeb UIを使ってDockerクラスタを管理するためのツールです。今回は日本リージョンのあるVPSサービス「Vultr」に環境構築を行う手順を紹介します。

😀 rancherのサーバ構成

rancherの管理画面や立ち上げたDockerのインスタンスなどを管理する「rancher server」とユーザーが設定したアプリケーションが起動する「rancher agent」によって構成されます。

🎃 rancher内の用語

Rancherで使われている単語や定義を簡単に説明します。

用語 説明
Service 用途別のコンテナをグループ化。web, application, dbなど
Stack Serviceのグループ化。一連のアプリケーションを関連付け。ひとつのサービスやシステムなど
Environment 環境。Production, Staging, Developmentなどの使い分け

😎 Vultrにインスタンスを作成

Vultr」にiPXEブートでRancherOSを起動します。

#!ipxe
# Boots RancherOS in Ramdisk with persistent storage on disk /dev/vda

# Location of Kernel/Initrd images
set base-url http://releases.rancher.com/os/latest

kernel ${base-url}/vmlinuz rancher.state.formatzero=true rancher.state.autoformat=[/dev/vda] rancher.password=[初回ログインパスワード]

initrd ${base-url}/initrd

boot

[初回ログインパスワード]」にはパスワードを記入します。

🤔 sshでサーバにログイン

インスタンスが立ち上がったら、sshでサーバにログインします。パスワードはさきほどiPXEブートのスクリプトに記述した物を使います。

ssh rancher@[サーバのIPアドレス]

ログインしたらcloud-config.ymlを作成します。

#cloud-config
ssh_authorized_keys:
- ssh-rsa AAAA......(SSH公開鍵)

次のコマンドでRancherOSをインストールします。

sudo ros install -c cloud-config.yml -d /dev/vda

次にrancher serverをインストールします。

mkdir ~/data
docker run -d -v data:/var/lib/mysql --restart=always -p 8080:8080 rancher/server

dockerのプロセスが立ち上がったら、ブラウザからhttp://[サーバのIPアドレス]:8080/にアクセスします。

🗻 アクセス制限を行う

rancher serverのメニューのADMIN > Access ControlからGitHubログインでのアクセス制限を行います。

まずはGitHubの「Profile > Developer settings > OAuth Application > Register a new application」を選択します。

Client ID、Client Secretを使ってGitHubログインを行うように設定します。

🐯 Docker Hostを選択

Rancher severのメニューの「Infrastracture > Hosts > Add Host」でホストを追加します。Vultrは初期メニューには出てこないので「Manage available machine drivers」からVultrを追加します。

入力項目は次のとおりです。

項目 説明
Name 任意の名前を入力
apiKey Vultrのコンソール > Account > APIかはら発行できます
endPoint(URL?) https://api.vultr.com/
osId 初期設定のまま、RancherOSが起動
planId 202 (2GBメモリプラン)などを選択。https://api.vultr.com/v1/plans/list に一覧
priavateNetWorking 「オン」Private Networkに入れるかどうか
pxeScript そのまま
regionId 25 (Tokyo)などを選択。https://api.vultr.com/v1/regions/list に一覧
sshKeyId 本来はSSH keyのID。私が試したときにはうまくうごいてくれなかった

入力してしばらく待つとHostが起動してくれます。

😼 Rancherのスタック画面からアプリケーションを登録

あとは「Stacks > User > Add Stack」からお望みのアプリケーションのdocker-composeをstackから登録するだけです。今回はTrelloクローンのwekanを立ち上げてみます。

version: '2'
services:
wekan:
image: wekanteam/wekan:meteor-1.4
links:
- wekandb
environment:
- MONGO_URL=mongodb://wekandb/wekan
- ROOT_URL=http://localhost:80
ports:
- 80:80
wekandb:
image: mongo:3.2.12
volumes:
- /home/johndue/docker/data/mongodb-wekan:/data/db

🏈 コンテナ内でコマンドを実行する

Dockerコンテナ内でshellコマンドを実行したり、Rakeタスク等を実行するための手順です。

  • メニューのStack => 対象のStack(アプリケーション一式)を選択
  • コマンドを実行したいサービスを選択
  • メニューの中に「Execute shell」コマンドがあるのでクリック
  • コンソールでコマンドを実行できます

🐮 補足:Rancher OS内でコマンドを実行する

Rancher OS内でコマンドを実行する場合はdockerベースでコマンド実行するのが良さそうです。

# git
alias git="docker run -ti --rm -v $(pwd):/git bwits/docker-git-alpine"

# rancherコマンド
alias rancher="docker run -ti --rm -v $(pwd):/rancher rancher/cli"

🐞 補足:rancher CLIコマンド

Rancher CLIコマンドを追加します。まず以下を~/.zshrc~/.bash_profileに登録します。API KeyなどはRancherの管理画面から取得できます。

alias rancher="docker run -ti --rm -v $(pwd):/rancher rancher/cli"

export RANCHER_URL=http://:8080
export RANCHER_ACCESS_KEY=
export RANCHER_SECRET_KEY=

rancherコマンドは「Rancher CLI commands」で確認できます。

👽 補足:rancher crontabの実行

Rancherのスタックでcronで一定期間毎に実行するにはまず、Rancher管理画面のCATALOGから「Rancher Container Cron」を追加します。

そしてstackのdocker-compose.ymlに次の内容を追記します。

version: '2'
services:
jobs:
image: centos:7
command: date
labels:
cron.schedule: 0 0 */1 * * * # 1時間毎に起動
io.rancher.container.start_once: 'true'
io.rancher.container.pull_image: 'always'

rancher-comose.ymlは次のように記述します。

version: '2'
services:
jobs:
scale: 1
start_on_create: true

これでrancher up -dでデプロイすると定期的にスクリプトを実行できます。(動いていない間は停止します)

cronの設定はわかりやすい設定の説明です。

Tipsですが、cronを1分、6分、11分のように少し切りの悪いタイミングで動かす場合は次のように記述します。

01-59/5 * * * * command

🍣 補足:ScalewayでRancher Agent起動

Scaleway」でサーバを借りてRancher Agentをインストールするまでの手順です。
ScalewayのDockerイメージは少し古いDockerが入っているので、Dockerをバージョンアップしたうえで、Rancher Agentを導入しましょう。

sudo apt-get autoremove --purge docker-engine

# Nothing worked until I added this step
sudo rm -rfv /var/lib/docker

# 再起動
reboot

# 再起動後
sudo apt-get update

# Dockerのインストール
curl -sSL https://get.docker.com/ | sh

# Systemdの作成(起動用のコマンド)
sudo mkdir /etc/systemd/system/docker.service.d
sudo vi /etc/systemd/system/docker.service.d/docker.conf

docker.confに次の内容を記述します。

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// -D --tls=true --tlscert=/var/docker/server.pem --tlskey=/var/docker/serverkey.pem -H tcp://192.168.59.3:2376

変更を反映します。

# 変更の反映
sudo systemctl daemon-reload
sudo systemctl restart docker

# 起動確認
ps aux | grep docker | grep -v grep

🍄 補足:Cloud GarageでRancherを導入

  • Web画面からインスタンスを作成
  • コンソール画面からrancherユーザーのパスワードを変更
  • ローカルでssh rancher@IPアドレスでログイン

🐝 参考リンク

🖥 VULTRおすすめ

VULTR」はVPSサーバのサービスです。日本にリージョンがあり、最安は512MBで2.5ドル/月($0.004/時間)で借りることができます。4GBメモリでも月20ドルです。 最近はVULTRのヘビーユーザーになので、「ここ」から会員登録してもらえるとサービス開発が捗ります!

📚 おすすめの書籍