11
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CentOS7でLXC

Last updated at Posted at 2016-04-10

インストール

LXC関連のrpmやdebootstrapのrpmはEpelリポジトリに登録されているらしいのでEpelを追加してからLXC関連パッケージをインストールします。

$ sudo yum install -y epel-release
$ sudo yum update
$ sudo yum install lxc lxc-templates lxc-doc lxc-libs rsync debootstrap

LXCコンテナでDebianやUbuntuを使う予定がない場合は、debootstrapのインストールは不要です。
rsyncはコンテナインストールする時に使用するみたいです。

仮想ネットワーク

LXC単体で仮想ネットワークを提供できるかどうかは後々調べるとして、bridge-utilsを利用して仮想ネットワークを構築します。

$ sudo yum install bridge-utils

仮想ブリッジインタフェース

下記の内容で/etc/sysconfig/network-scripts/ifcfg-lxcbr0を作成し、NetworkManagerを再起動すれば有効になる...はずなのですが、なぜかOSを再起動しないと有効にならなかった。

/etc/sysconfig/network-scripts/ifcfg-lxcbr0
NAME=lxcbr0
DEVICE=lxcbr0
TYPE=Bridge
BOOTPROTO=static
ONBOOT=yes
IPADDR=172.16.1.1
PREFIX=24
DEFROUTE=no
NM_CONTROLLED=no
#DNS1=192.168.xxx.x
#SEARCH=example.com

LXCコンテナのインストール

CentOS

$ sudo lxc-create -n centos7 -t centos -- --release 7

コンテナの作成が完了すると、デフォルトパスワードが/var/lib/lxc/centos7/tmp_root_passに出力されます。

作成するコンテナのCentOSのバージョンは--releaseで指定します。環境依存かもしれませんが、CentOS7は安定稼働させられていませんので、ちょっと古いですが、LXCコンテナでCentOSを動かす場合、今のところ(2016年4月現在)CentOS6がお勧めかもしれないです。

Debian Linux

$ sudo lxc-create -n debian_jessie -t debian -- --release jessie

--releaseでDebian Linuxのバージョンが指定できます。Debian Linux8をインストールする場合はjessie、Debian Linux7の場合はwheezyを指定します。

デフォルト設定でほぼ最小構成のインストールですが、さらに最小を目指す場合は/usr/share/lxc/templates/lxc-debianの下記の行で$packagesで指定するパッケージを削除したり、--excludeでインストール対象から外したいパッケージを指定していてください。

/usr/share/lxc/templates/lxc-debian
    echo "Downloading debian minimal ..."
    debootstrap --verbose --variant=minbase --arch=$arch \
        --include=$packages \
        "$release" "$cache/partial-$release-$arch" $MIRROR

ネットワークインタフェース設定

各コンテナのコンフィグファイルに下記の記述を追加します。
ほとんどの設定はコンテナをインストールした段階で設定されているはずなので、lxc.network.linkで指定するインタフェース名だけを設定するだけだと思います。

/var/lib/lxc/debian_jessie/config
lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = lxcbr0
lxc.rootfs = /var/lib/lxc/intranet/rootfs

コンテナの起動

$ lxc-start -n debian_jessie

または、

$ lxc-start -n debian_jessie -d
$ lxc-console -n debian_jessie

で起動します。debianコンテナのデフォルトのrootパスワードはrootみたいです。
前者のコマンド(-dなし)でコンテナを起動した場合、コンテナ起動後、コンテナのコンソールに自動で接続し、コンテナ終了までコンテナのコンソールを抜けられません。
後者のコマンド(-dあり)でコンテナを起動した場合、lxc-consoleコマンドを入力するまでコンテナのコンソールに接続しません。また、コンソール接続後、Ctrl+a qでコンテナのコンソールを抜けることができます。

コンテナの自動起動

/var/lib/lxc//configに

lxc.start.auto = 1

を追加し、

$ sudo systemctl enable lxc.service

のようにして、lxc.serviceがOS起動時に自動起動するよう設定すればlxc.start.auto=1を設定したコンテナが自動起動するはずです。

よくある問題

コンテナからインターネットにつながらない

LXCコンテナからLXCホストを踏み台にしてインターネットに接続する場合、LXCホストのファイアウォール周り設定を変更する必要があります。
下記のようにiptablesの設定を一度クリアして、最低限の設定だけを追加した方がトラブルシューティングしやすいと思います。

sudo echo 1 > /proc/sys/net/ipv4/ip_forward
sudo iptables -F
sudo iptables -F -t nat
sudo iptables -t nat -A POSTROUTING -o eno16777736 -j MASQUERADE

(eno16777736がインターネット方向のインタフェースと思って読んでください。)

WindowsからLXCホストにログインせずにコンテナにログインしたい

NAT(NAPT)の設定を行い、Windows PCに仮想ネットワークへのルートを追加すると、LXCホストにログインせずにコンテナにログインできます。

コマンドプロンプトで、

> route add 172.16.1.0 mask 255.255.255.0 LXCホストのIPアドレス

または、

> route add 172.16.1.0 mask 255.255.255.0 LXCホストのIPアドレス -p

のような感じでルートを追加します。前者はWindowsを再起動するたびにルートを追加する必要があります。後者のように「-p」をつけると、Windowsを再起動してもルートを保持します。

コンテナのrootパスワード忘れた

LXCでは、LXCホストからコンテナのルートファイルシステムを直接参照できるので、chrootコマンドを実行することで、rootに限らずその他アカウントのパスワード変更ができます。パッケージのインストールもできたりします。

Debianコンテナからpingが実行できない

別に問題というわけではありませんが、Debianコンテナではデフォルトでpingコマンドはインストールされないみたいです。なので、必要な場合は手動でインストールする必要があります。

コンテナの中からインストールする場合
$ sudo apt-get install iputils-ping

または、

コンテナの外からインストールする場合
$ sudo chroot /var/lib/lxc/debian_jessie/rootfs/ apt-get install iputils-ping

lxc-start: lxc_start.c: main: 295 Executing '/sbin/init' with no configuration file may crash the host

コンテナを起動しようとしたとき、

# lxc-start -n debian -d
lxc-start: lxc_start.c: main: 295 Executing '/sbin/init' with no configuration file may crash the host

のエラーメッセージが出力された場合、

# lxc-start -f /var/lib/lxc/debian8/config -n debian -d

のようにして、コンフィグファイルを指定すると直るようです。1回正常に起動できれば、それ以降はコンフィグファイルを指定しなくてもよいようです。
理由は不明ですが...

11
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?