====== 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 コンテナ名|コンテナのシャットダウン|