LXCで学ぶコンテナ入門 -軽量仮想化環境を実現する技術

第8回 LXCの基本操作[1]

この記事を読むのに必要な時間:およそ 11 分

今回からはLXCの基本的なコマンドを使ったコンテナの操作を,Ubuntu 14.04 LTSを使って説明していきたいと思います。

ここではUbuntu 14.04 LTSでパッケージインストールしたlxc-1.0.5を使ってLXCコンテナの基本的な操作を紹介していきます。1.0系であれば操作に変化はありません。0.9以前の古いバージョンや開発中のgithubのmasterブランチの場合は操作や出力が違うかもしれません。

Ubuntuパッケージ使用時の各種パス

最初にUbuntuのLXCパッケージを使用した場合の各種ファイルやディレクトリのパスを紹介しておきます。他のディストリビューションでは異なる可能性がありますし,LXCをソースからコンパイルした場合はコンパイル時の指定で変わります。

表1 Ubuntu LXCパッケージにおけるファイル/ディレクトリのパス

ファイル/ディレクトリパス
システム設定ファイル/etc/lxc/lxc.conf
コンテナのデフォルト設定ファイル/etc/lxc/default.conf
テンプレートファイルの置き場所/usr/share/lxc/templates
コンテナ起動時に読み込まれるファイルの置き場所/usr/share/lxc/config
コンテナ作成時のキャッシュの置き場所/var/cache/lxc
コンテナの保存場所/var/lib/lxc
ログファイルの出力場所/var/log/lxc

表に出てくるファイルやディレクトリでこれまで説明がなかったものについて説明します。

システム設定ファイル
この後説明するコンテナの保存場所のパス,コンテナの設定ファイルの場所,ストレージバックエンド使用時のデフォルト値などの,システム共通で使用するデフォルト値を指定したい場合にファイルを作成して値を設定します。ファイルが存在しない場合はコンパイル時の値が使用されます。
コンテナのデフォルト設定ファイル
コンテナを作成する時に共通して設定したいものを記載しておきます。コンテナ作成時にこのファイルの設定値がコンテナの設定ファイルにコピーされます。
コンテナ起動時に読み込まれるファイル
テンプレートを使ったコンテナの作成で生成されるコンテナの設定ファイルは,各ディストリビューションのデフォルト設定を読み込む(includeする)設定が書き込まれます。そのディストリビューションごとのデフォルト設定が書かれたファイルが/usr/share/lxc/configに置かれています。コンテナの起動時に,includeされたこのファイルに書かれた設定を読み込みます。
コンテナ作成時のキャッシュ
テンプレートはキャッシュを使ってコンテナの作成時間を短縮することがあります。キャッシュについてはコンテナ作成のところで説明します。
コンテナの保存場所
コンテナイメージとコンテナごとの設定ファイル,つまりコンテナそのものを置く場所です。コンテナの作成時や起動時に特に指定しなければ,このディレクトリ/var/lib/lxcを使用します。このディレクトリ以下をどのように使うかは後ほど,作成したコンテナの確認を行うところで説明します。
ログファイル
コンテナごとにログファイルが出力されます。特に出力するログファイルを指定しなければ/var/log/lxc以下に(コンテナ名).logというファイルが作成されます。

Ubuntu上でLXCパッケージ使った時のコンテナ用のネットワーク

LXCで提供されているコマンドを使った説明に入る前に,もうひとつUbuntuでLXCパッケージをインストールした場合に依存する話をしておきます。LXCパッケージをインストールすると,コンテナ用のネットワークが設定されます。

図1 Ubuntu LXCパッケージのコンテナネットワーク

図1 Ubuntu LXCパッケージのコンテナネットワーク

ホストOSの起動時にコンテナを接続するためのブリッジとしてlxcbr0が作成されます。コンテナ用のネットワークとしてはデフォルトで10.0.3.0/24が設定され,lxcbr0には10.0.3.1が割り当てられます。

コンテナにDHCPでIPアドレスを割り当て,コンテナが名前解決ができるようにdnsmasqが起動します。

また,図1のようにホストが接続されているネットワークとコンテナ用のネットワーク(10.0.3.0/24)の間にはNATが設定されますので,ホストOS経由で外部との通信ができるようになります。

ブリッジの名前やコンテナ用のネットワークのアドレスは,コンテナ用のネットワークの設定ファイル/etc/default/lxc-netに設定されていますのでこのファイルを編集して変更できます。

$ cat /etc/default/lxc-net | grep -v "^#"
USE_LXC_BRIDGE="true"

LXC_BRIDGE="lxcbr0"
LXC_ADDR="10.0.3.1"
LXC_NETMASK="255.255.255.0"
LXC_NETWORK="10.0.3.0/24"
LXC_DHCP_RANGE="10.0.3.2,10.0.3.254"
LXC_DHCP_MAX="253"

コンテナのデフォルト設定ファイル/etc/lxc/default.confには,このようにして作られたネットワークを使用するための設定が書かれています。この設定はコンテナを作成する際にコンテナの設定ファイルにコピーされます。このファイルは以下のような内容です。

$ cat /etc/lxc/default.conf 
lxc.network.type = veth
lxc.network.link = lxcbr0
lxc.network.flags = up
lxc.network.hwaddr = 00:16:3e:xx:xx:xx

この内容がコピーされている様子はこの後のコンテナを作成する所で紹介します。設定ファイル内の設定については,この連載の後の回でコンテナの設定について紹介するところで説明します。

共通オプション

それではいよいよコマンドを使ったコンテナの操作の説明をしていきましょう。

LXCではlxc-で始まるコンテナに対する操作や管理を行うコマンド群が提供されています。最初にこのコマンド群のほとんどで共通して使えるオプションを紹介しておきましょう。

表2 LXCの共通オプション

オプションオプションの意味
-h / --helpヘルプの表示
--usageコマンドの使いかたの表示
-q / --quiet画面出力の抑止
-P / --lxcpathコンテナの保存場所
-o / --logfileコンテナのログファイルのパス
-l / --logpriorityログのプライオリティ
-n / --nameコンテナの名前

ここで紹介したオプションはほとんどのLXCコマンドで使用できますが,コマンドによっては使えないオプションもあります。詳しくはオンラインマニュアルを参照してください。

-n/--nameオプションはほとんどのコマンドで必要なコンテナ名を指定するオプションです。ほとんどのコマンドで必要にもかかわらず,オプションで指定する必要があります。

-P/--lxcpathはデフォルトと違うパスにコンテナを設置する場合に使いますが,デフォルトの場所を使う場合は特に指定する必要はありません。

著者プロフィール

加藤泰文(かとうやすふみ)

2009年頃にLinuxカーネルのcgroup機能に興味を持って以来,Linuxのコンテナ関連の最新情報を追っかけたり,コンテナの勉強会を開いたりして勉強しています。英語力のない自分用にLXCのmanページを日本語訳していたところ,あっさり本家にマージされてしまい,それ以来日本語訳のパッチを送り続けています。

Plamo Linuxメンテナ。ファーストサーバ株式会社所属。

Twitter:@ten_forward
技術系のブログ:http://tenforward.hatenablog.com/

コメント

コメントの記入