systemd-nspawnを使ってみた

使ってみた

当初は conoha に立てた Arch Linux へ Docker をインストールして、そこでredisとかnginxとかを動かそうかと調べていた。
しかし、systemdが動いてるなら systemd-nspawn なるコンテナ型仮想化システムがいい感じだと風の噂で聞いたのでこちらを試すことにした。

習うより慣れてみる

コンテナ化の知識は全くなく、Dockerでさえどうやって使うのかさえ分からなかった。
自分で構築したことでそれなりに理解出来た…気がする。

以下はとりあえず、Arch Linux のsystemd-nspawn の解説をかいつまんで進行します。
ぶっちゃけちゃると、今回の記事の情報はArchWikiに全部載ってます。
ArcyWikiは、Linuxに関する基本的なところから充実の内容なのでビギナーの方からでもお勧めです。

コンテナの作成

mkdir ~/MyContainer
pacstrap -i -c -d ~/MyContainer base

コンテナの手動起動

systemd-nspawn -bD ~/MyContainer

-bDn という感じで書くとエラーで起動しないです。

コンテナのサービス起動

systemctl enable machines.target
mv ~/MyContainer /var/lib/machines/MyContainer
systemctl enable systemd-nspawn@MyContainer.service
systemctl start systemd-nspawn@MyContainer.service

トラブルシューティング

pacstrapがインストールされていない

sudo pacman -S arch-install-scripts

上記のスクリプトをインストールすることでいろいろ便利スクリプトが入る。

ログインが出来ない

arch-nspawn login: root
Login incorrect

こう出たときはコンテナのディレクトリ上にある /etc/securetty のターミナル名のリストに pts/0 を追加。このファイルはホストから開く(どっちにしてもログインできないので)。

ホストとRedisコンテナとuwsgiコンテナをProxyで繋いだりしたのでそこら辺も書く予定。