====== systemd-nspawn でコンテナを使う ======
コンテナと言えば Docker がメジャーですが、1プロセス、1アプリの基本概念が使いにくと\\
思っている方は、systemd-nspawn のほうが使いやすと思われます。
===== systemd-nspawn のインストール =====
# apt-get -y install systemd-container debootstrap
基本となるコンテナの作成(20分ぐらい)。
# cd /var/lib/machines
# debootstrap --arch=armhf buster raspbian-buster http://archive.raspbian.org/raspbian
===== 自分用にカスタマイズしたベースイメージの作成 =====
クローンイメージの作成
# machinectl clone raspbian-buster raspbian-buster-base
インスタンスを起動
# systemd-nspawn -D /var/lib/machines/raspbian-buster-base
※コンテナから抜けるには、1秒以内に ] を3回押します
rootのパスワード設定
# passwd root
コンテナを起動(--bind で apt-get のキャッシュをホストと共用する)
# systemd-nspawn --bind=/var/cache/apt -bD /var/lib/machines/raspbian-buster-base
パッケージの更新
# apt-get update
# apt-get upgrade
ホスト名の設定
# echo RaspbianBusterBase > /etc/hostname
起動中のコンテナにログインするため dbus は入れておきます
# apt-get -y install dbus
あとは、vim 入れたり、コマンドプロンプト変えたり基本設定を行います。
===== ブリッジネットーワーク設定(Host) =====
# systemctl start systemd-networkd
# systemctl enable systemd-networkd
[NetDev]
Name=br0
Kind=bridge
[Match]
Name=br0
[Network]
DNS=8.8.8.8
Address=10.0.0.1/24
Gatwate=10.0.0.1
IPForward=ipv4
IPMasquerade=yes
LinkLocalAddressing=no
===== ブリッジネットーワーク設定(Container) =====
# ln -sf /dev/null /etc/systemd/network/80-container-host0.network
# systemctl start systemd-networkd
# systemctl enable systemd-networkd
[Match]
Virtualization=container
Name=host0
[Network]
DNS=10.0.0.1
Address=10.0.0.20/24
Gateway=10.0.0.1
===== コンテナ操作 =====
^コマンド^機能^
|machinectl list |起動中のコンテナ一覧 |
|machinectl list-images |コンテナ一覧 |
|machinectl clone クローン元のコンテナ名 クローン後のコンテナ名|コンテナのクローン |
|machinectl remove コンテナ名 |コンテナの削除 |
|machinectl rename 元のコンテナ名 新しいコンテナ名 |コンテナのリネーム |
|machinectl start コンテナ名 |コンテナの起動 |
|machinectl poweroff コンテナ名 |コンテナのシャットダウン |
|machinectl status コンテナ名 |コンテナの状態取得 |
|machinectl enable コンテナ名 |コンテナを自動起動に登録 |
|machinectl disable コンテナ名 |コンテナを自動起動から削除|
|machinectl shell コンテナ名 /bin/bash |コンテナにログイン |