SakuraVPS
CoreOS

CoreOS Container Linux の環境構築(さくらの VPS)

はじめに

夏休みの課題の取組みとして今更ながら,Docker で遊んで見るべく,テスト環境で使っていた さくらの VPS(2G,HDD 200GB) があったので,取り敢えずこの環境に CoreOS(Container Linux) を構築してみます.毎度のことながら,私の備忘録代わりのメモになります.

前準備

Value-Domain で取得したドメインも余っていたので,さくらの VPS と関連付けることにします.また,さくらの VPS のネットワークの情報は,コントロールパネルに記載されています.

Value-DomainDNS の設定

Value-DomainDNSA レコードをさくらの VPSIP アドレス に設定する.

a @ xxx.xxx.xxx.xxx (`さくらの VPS` の IPv4 アドレス)

さくらの VPS のホスト名逆引き登録

コントロールパネルの各種設定にあるホスト名逆引き登録からドメイン名を登録する.

CoreOS Container Linux のインストール

ISO イメージのダウンロード

ここ から Stable Channel の 'ISO イメージ(coreos_production_iso_image.iso)' をダウンロードする.

さくらの VPSISO イメージ をアップロード

コントロールパネルの各種設定にある OS インストール から ISO イメージインストール を選択する.SFTP アカウントの発行 をクリックすると,ISO イメージアップロード先情報 が表示されるので,先ほどダウンロードした ISO イメージ をアップロードする.(下記は MSYS2 のターミナルの作業)

$ cd ISO (`ISO イメージ` のダウンロード先)
$ sftp ユーザ名@ホスト名
sftp> cd iso
sftp> put coreos_production_iso_image.iso
sftp> exit(or bye or quit)
$

ISO イメージ のアップロードが終われば,ISO イメージ情報 が表示される.問題が無ければ,マウント設定VirtIO を有効にするにチェックが入っているのを確認して,設定内容を確認する をクリックすると確認画面が表示される.インストールを実行する をクリックしてインストールを開始する.しばらくすると VNC コンソールの起動 と表示されるのでクリックして VNC コンソールを起動する.VNC コンソール では作業しづらいので,SSH で接続して作業します.

VNC コンソール の作業

ネットワークの設定を行う.

$ sudo ifconfig eth0 {IPv4 アドレス} netmask {ネットマスク}
$ sudo route add default gw {ゲートウェイ}
$ sudo vi /etc/resolv.conf
/etc/resolv.conf
nameserver {プライマリ DNS}

ssh で接続できるように,一時的なパスワードを設定する(インストール後は引き継がれない).

$ sudo passwd core

SSH での接続

ローカルのターミナル(ここでは,MSYS2 のターミナル)から接続できるか確認する.

$ ssh core@xxx.xxx.xxx.xxx (`さくらの VPS` の IPv4 アドレス)

接続できることが確認できれば,一度切断して,設定ファイル cloud-config.yml を転送する.

$ scp ./cloud-config.yml core@xxx.xxx.xxx.xxx:~/
cloud-config.yml
#cloud-config

hostname: "coreos" # ホスト名

# https://coreos.com/os/docs/latest/cloud-config-examples.html
coreos:
  units:
    # https://coreos.com/os/docs/latest/network-config-with-networkd.html
    - name: 00-static.network
      content: |
        [Match]
        Name=eth0

        [Network]
        DNS={プライマリ DNS}
        DNS={セカンダリ DNS}
        Address={IPv4 アドレス}/23 # 「/23」はネットマスク
        Gateway={ゲートウェイ}
    # https://coreos.com/os/docs/latest/configuring-date-and-timezone.html
    - name: settimezone.service
      command: start
      content: |
        [Unit]
        Description=Set the time zone

        [Service]
        ExecStart=/usr/bin/timedatectl set-timezone Asia/Tokyo
        RemainAfterExit=yes
        Type=oneshot
    # https://coreos.com/os/docs/latest/customizing-sshd.html
    - name: sshd.socket
      command: restart
      runtime: true
      content: |
        [Socket]
        ListenStream=12345 # SSH の接続ポート(22 から変更)
        FreeBind=true
        Accept=yes

write_files:
  - path: /etc/ssh/sshd_config
    permissions: 0600
    owner: root:root
    content: |
      UsePrivilegeSeparation sandbox

      PermitRootLogin no
      AllowUsers username # 下記 users で設定するユーザ名
      MaxAuthTries 2
      MaxSessions 1
      PubkeyAuthentication yes
      PasswordAuthentication no
      ChallengeResponseAuthentication no

# https://coreos.com/os/docs/latest/cloud-config.html
users:
  - name: "username" # ログインするユーザ
    passwd: "...." # opesnssl passwd -1 の結果を張り付ける
    groups:
      - "sudo"
      - "docker"
    ssh-authorized-keys:
      - "ssh-rsa AAAAB..." # SSH 公開鍵を登録

設定ファイルの転送が終われば,SSH で再度接続してインストール作業を続行する.

$ ssh core@xxx.xxx.xxx.xxx

ディスクの確認

$ sudo fdisk -l

転送した設定ファイル 'cloud-config.yml' をチェックする.

$ sudo coreos-cloudinit -validate=true -from-file=./cloud-config.yml

cloud-config.yml に問題がなければインストールを行う.

$ sudo coreos-install -d /dev/vda -C stable -c ./cloud-config.yml
$ sudo shutdown -r now

インストール後の確認

SSH で接続できるか確認する(再起動後しばらく待つ).

$ ssh username@xxx.xxx.xxx.xxx -p 12345 (sshの接続ポート)

おそらく,エラーが表示され接続できないので,~/.ssh/known_hosts からホスト情報を削除する.

$ ssh-keygen -R xxx.xxx.xxx.xxx

再度接続できるか確認する.

$ ssh username@xxx.xxx.xxx.xxx -p 12345

coreuser の権限を,ここ を参考に変更する.

$ sudo gpasswd -d core wheel
$ sudo gpasswd -d core docker
$ sudo gpasswd -d core rkt

設定の更新

インストールで使用した設定ファイル 'cloud-config.yml' は,'/var/lib/coreos-install/user_data' に保存されるので,設定を変更するには,'/var/lib/coreos-install/user_data' を編集して再起動する.

動作の確認

情報の確認.

$ docker version
$ docker info

hello-workd コンテナの実行.

$ docker images
$ docker run hello-world
$ docker ps
$ docker ps -a
$ docker images

イメージ,コンテナの情報を確認.

$ docker inspect hello-world
$ docker inspect `docker ps -l -q`

-l は,最後に起動したコンテナを表示,-q は,コンテナ ID のみを表示.

コンテナの削除.

$ docker rm `docker ps -l -q`
$ docker ps -a

イメージの削除.

$ docker rmi hello-world
(or $ docker rmi イメージ ID)
$ docker images

さいごに

取り敢えず,インストールが終わったので,Docker で遊んでみます.