はじめに
夏休みの課題の取組みとして今更ながら,Docker
で遊んで見るべく,テスト環境で使っていた さくらの VPS(2G,HDD 200GB)
があったので,取り敢えずこの環境に CoreOS(Container Linux)
を構築してみます.毎度のことながら,私の備忘録代わりのメモになります.
前準備
Value-Domain
で取得したドメインも余っていたので,さくらの VPS
と関連付けることにします.また,さくらの VPS
のネットワークの情報は,コントロールパネルに記載されています.
Value-Domain
の DNS
の設定
Value-Domain
の DNS
の A
レコードをさくらの VPS
の IP アドレス
に設定する.
a @ xxx.xxx.xxx.xxx (`さくらの VPS` の IPv4 アドレス)
さくらの VPS
のホスト名逆引き登録
コントロールパネル
の各種設定にあるホスト名逆引き登録
からドメイン名を登録する.
CoreOS Container Linux のインストール
ISO イメージのダウンロード
ここ から Stable Channel
の 'ISO イメージ(coreos_production_iso_image.iso)' をダウンロードする.
さくらの VPS
に ISO イメージ
をアップロード
コントロールパネル
の各種設定にある 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
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
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
core
user の権限を,ここ を参考に変更する.
$ 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
で遊んでみます.