====== systemd-nspawn でコンテナ作成 ====== ===== SELinux の無効化 ===== 永続的に無効にし再起動。 # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled ===== systemd-networkd と systemd-resolved のインストール ===== # yum -y install systemd-networkd systemd-resolved # systemctl disable NetworkManager # systemctl start systemd-networkd systemd-resolved # systemctl enable systemd-networkd systemd-resolved ===== ブリッジネットーワーク設定 ===== # mkdir /etc/systemd/network/ [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 ===== コンテナ作成 ===== --installroot でコンテナのパスを指定します。 # yum -y --releasever=7 --disablerepo='*' --enablerepo=base install systemd yum passwd vim-minimal systemd-networkd --installroot=/var/lib/machines/web001 コンテナの初期化 # systemd-nspawn -D /var/lib/machines/web001 passwd コマンドで、コンテナの root パスワード設定\\ 設定が終わったら、1秒以内に ] を3回押します Spawning container web001 on /var/lib/machines/web001. Press ^] three times within 1s to kill container. Failed to create directory /var/lib/machines/web001//sys/fs/selinux: Read-only file system Failed to create directory /var/lib/machines/web001//sys/fs/selinux: Read-only file system -bash-4.2# passwd Changing password for user root. New password: BAD PASSWORD: The password is shorter than 8 characters Retype new password: passwd: all authentication tokens updated successfully. ===== コンテナのネットワーク設定 ===== ネットワーク設定用のフォルダ作成 # mkdir /var/lib/machines/web001/etc/systemd/network [Match] Name=host0 [Network] Address=10.0.0.20/24 Gateway=10.0.0.1 ===== コンテナの起動 ===== # systemd-nspawn --network-bridge=br0 -bD /var/lib/machines/web001 ===== コンテナにパッケージのインストール ===== コンテナのパッケージインストールはホストからでも行えます # yum install -y --installroot=/var/lib/machines/web001 パッケージ ^コマンド^パッケージ名^ |ifconfig, route|net-tools | |ip |iproute | |ping |iputils | |ssh |openssh-server| コンテナ内から行う場合は、ブリッジ接続を使わなければ、そのままで外部インターネットに接続できます\\ --bind=/var/cache/yum で yum のキャッシュフォルダを、ホストと共有させています # systemd-nspawn --bind=/var/cache/yum -bD /var/lib/machines/web001 ===== ポートフォワーディング ===== コンテナ内の http に外部から接続するためには、以下のようにポートフォワーディングの設定が必要です # firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=80:toaddr=10.0.0.20 --permanent 設定の削除は、--add-forward-port の代わりに、--remove-forward-port # firewall-cmd --zone=public --remove-forward-port=port=80:proto=tcp:toport=80:toaddr=10.0.0.20 --permanent ===== 自動起動の設定 ===== 共通設定ファイルのコピー # cp /usr/lib/systemd/system/systemd-nspawn@.service /etc/systemd/system/ After で、systemd-networkd.service と systemd-resolved.service が起動するまでコンテナ起動を遅延\\ --network-veth を --network-bridge=br0 に書き換え [Unit] Description=Container %I Documentation=man:systemd-nspawn(1) PartOf=machines.target Before=machines.target After=systemd-networkd.service systemd-resolved.service [Service] # ExecStart=/usr/bin/systemd-nspawn --quiet --keep-unit --boot --link-journal=try-guest --network-veth --machine=%I ExecStart=/usr/bin/systemd-nspawn --quiet --keep-unit --boot --link-journal=try-guest --network-bridge=br0 --bind=/var/cache/yum --machine=%I コンテナの起動と、自動起動設定 # systemctl enable machines.target # systemctl start systemd-nspawn@web001 # systemctl enable systemd-nspawn@web001 ^コマンド^内容^ |start |コンテナの起動| |stop |コンテナの停止| |enable |コンテナを自動起動に登録| |disable |コンテナを自動起動から削除| |status |コンテナの状態取得| ===== systemd-nspawn の管理コマンド machinectl について ===== ^ コマンド ^ 内容 ^ |machinectl list |起動中のコンテナ一覧 | |machinectl list-images |コンテナ一覧 | |machinectl start コンテナ名 |コンテナの起動 | |machinectl poweroff コンテナ名|コンテナのシャットダウン|