====== 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 |コンテナにログイン |