at posts/single.html

さくらVPSでdocker環境 (1) CoreOSをインストール

前の日記に書いたとおり、引越し後のサーバはdocker環境で動かしたい。boot2dockerを使って docker にも慣れてきたので、引越し先の環境を準備する。

引越し先を選ぶ (VPS vs クラウドIaaS)

まずはサーバをどこで動かすか。このままさくらのVPSを使い続けてもいいし、AWSやDigitalOceanなどのクラウドIaaSを使う選択肢もある。ここは、趣味開発のためのVPS/クラウド活用術 // Speaker Deckが参考になった。

サーバ環境を頻繁に変更するなら、セットアップが楽で従量課金のAWSやDigitalOceanを使うのが良さそう。一方で、常に動かしておくなら、さくらのVPSがコストパフォーマンスが良い(今は円安なので特に価格差ある)。今回はdocker環境を作ろうとしているので、さくらVPS + dockerで複数コンテナを動かすのがいいと判断した。ということで、さくらVPSの2GB + SSD 50GBのプランを選択した。コストは17,380円/年(税抜)。

OSを選ぶ (定番OS vs 軽量OS)

環境が決まったので、次はOSを選ぶ。これまでは Ubuntu 14.04 LTS を使っていた。選択肢としては Ubuntu や CentOS のような定番OSを使うか、 CoreOS のような軽量OSを使うか。

  • VPS + コンテナ環境で動かすのでメモリ貴重
  • 個人サーバなので運用を楽にしたい
  • 個人サーバーなので新しいモノを試してみたい

という理由から、軽量OSを使ってみることにする。最初はUbuntuつながりでSnappy Ubuntuを試してみた。ところが、思った以上に自由度がなく、これはどうも苦労しそう。定番のCoreOSは分散環境を前提としているのが気になったけど、etcd や fleet などの分散技術を使わずにシングルホストで運用してみることにした。

軽量OSの選定では、Docker向けの軽量Linux OS 主要3種を比較する | Think IT(シンクイット)が参考になった。

さくらのVPSにCoreOSをインストール

さくらのVPSにCoreOSをするためには、2つ気をつけなければいけないポイントがある。

そこで、インストール手順はこうなる。

  1. ISOイメージインストール機能を使ってCoreOSのインストールイメージをアップデート
  2. インストーラを起動し、VNCコンソール経由で接続(ネットワーク設定が終わっていないのでsshでは繋がらない)
  3. インストール設定を記述したcloud-configファイルを作成し、CoreOSをインストールする

ところが、VNCコンソールではキーボードが英字配列だったり、コピペができなかったりと、cloud-configファイルを作るのが大変。そこで、2のインストーラを起動した時点でVNCコンソールからネットワーク設定を手動で追加する。coreアカウントにパスワードを設定して、一時的にパスワードでログインできるようにしている。

$ sudo ifconfig eth0 160.16.81.168 netmask 255.255.254.0
$ sudo route add default gw 160.16.80.1
$ sudo vim /etc/resolv.conf
$ sudo passwd core

サーバへ繋がるようになったら、ローカル環境で作ったcloud-configファイルをサーバ側へアップロードし、インストーラを起動する。以下のコマンドは手元のMacBook Proから実行している。

$ scp cloud-config.yml core@160.16.81.168:
$ ssh core@160.16.81.168
$ sudo coreos-install -d /dev/vda -c cloud-config.yml -C Stable

cloud-configファイルの中身はこれ。static.networkというネットワーク設定が書かれたunitsの作成と、ssh接続のための公開鍵の登録を指示している。

#cloud-config

coreos:
  units:
    - name: static.network
      content: |
        [Match]
        Name=eth0

        [Network]
        Address=160.16.81.168/23
        Gateway=160.16.80.1
        DNS=210.188.224.10
        DNS=210.188.224.11

ssh_authorized_keys:
  - ssh-dss AAAAB3NzaC1kc3MAAACBAJdjSrRt+g7qk6McucfUo9IYGkQ1eMnli5qyT3GjYwxw1DxL8MrbgDtjbL5PLSa0n+c9IAiWbnh3hsRpQd7xU6mqAFhjfTzNS5tFF/dq4o6Pz1OxiBoqwq0UJL4qzgAvjMzTflNCtwml3X4ObJMgRWRuARa1F2+ukRJapBKjOR3pAAAAFQCp99SugvMxgXo4w9QlXCboBUPqcwAAAIAPbmr1TLsyaicjEAE18vYrytxJ+GQjztv3LDXBIdb6CZMO1o8UyuiodXfT3kGk6m84gPwJzf/dQdFBsrfI3fhRxL5cQ46c47jIbtp3YBUyzhaTmiSOX+kh05sXeJPdCapjmMnWJxZAbHkPvkM0gaNt2W1HG6qIYf76mFl5qHZ8EwAAAIBZpbYWbSUa0RM3Tic9YrzF2ANK7KeYjZpkPgZG7SNEyojiFWUQxJCipRq51rLPtuCN2m8zHt+0QaHBv+OldevIRIEAc1eARM3gqlzBGFEyY1qFnzbtkNHCyQWlYP3crsv0ZTa2FWPmgzP/K5+0moTZ+XzK3lz9JGEv8yAWHgM6BA== kohei@machu.jp

ちなみにunitsはsystemdの機能の一部。ここの設定は、インストール後には /etc/systemd/network/static.network となる。この辺の設定は、CoreOSとcloud-initとsystemdの仕組みが混在していて、慣れるまでは混乱しちゃう。

インストール処理が完了したらサーバを再起動。再起動後にちゃんとsshできればインストール成功。

さくらVPSへのインストール手順は、以下のサイトが参考になった。

タイムゾーンの設定

CoreOSのタイムゾーンはUTCに設定されている。タイムゾーンを変えるのは推奨されていない(複数ホストで動かした時にタイムゾーンが違うとトラブルの元になるらしい)ようだけど、変えるのであれば以下のコマンドを実行する。

$ sudo timedatectl set-timezone Asia/Tokyo
$ date
Sat May 16 23:04:17 JST 2015

更新チャネルの変更

CoreOSのStable版をインストールしたら、dockerのバージョンが古かったのでα版を使うように変更した。更新チャネルの変更は、以下のサイトの手順を参考にした。

使ってみる

CoreOSはsystemdを採用している。サービスの起動やログの表示などの方法がだいぶ違うので、まずはsystemdの使い方に慣れるのが良い。サービスの起動・停止は systemctl コマンドを使い、ログの表示は journalctl コマンドを使う。ディストリビューション違うけど、Red Hat Enterprise Linux 7 の systemd コマンドチートシート - Red Hat Customer Portalを印刷しておくといいんじゃないかな。

基本的な使い方に慣れたら、次はいよいよdockerを使ってサービスを動かしていく。

関連する日記