Linuxコンテナ(LXC)の作成と操作方法

カテゴリ:コンテナ仮想化

この記事ではLXCでのコンテナの作成と操作について解説いたします。

Note以降は CentOS 8 + LXC 3.0.4 環境での手順となります。

コンテナの作成

コンテナを作成する場合は lxc-create コマンドを使用します。

使用法:lxc-create --name=コンテナ名 --template=テンプレート名 [オプション...] [-- テンプレートオプション]

lxc-createのオプション
-n, --name=コンテナ名を指定
-f, --config=初期構成ファイルを指定
-t, --template=コンテナのセットアップに使用するテンプレート
-B, --bdev=使用するバッキングストアタイプを指定
--dir=rootfsディレクトリを配置するディレクトリを指定

以下のように --template= に download を指定した場合、テンプレートをダウンロードしてコンテナを作成します。

# lxc-create --name=ubuntu --template=download

使用可能なテンプレートが一覧表示されるため、ディストリビューション、リリースバージョン、アーキテクチャの3つを順番に指定することでテンプレートがダウンロードされ、コンテナが作成されます。

例)

# lxc-create --name=ubuntu --template=download
Setting up the GPG keyring
Downloading the image index

---
DIST    RELEASE ARCH    VARIANT BUILD
---
alpine  3.10    amd64   default 20200825_13:00
alpine  3.10    arm64   default 20200825_13:00
alpine  3.10    armhf   default 20200825_13:00
...
ubuntu  bionic  amd64   default 20200825_07:42
ubuntu  bionic  arm64   default 20200825_07:42
ubuntu  bionic  armhf   default 20200825_07:42
ubuntu  bionic  i386    default 20200825_07:42
ubuntu  bionic  ppc64el default 20200825_07:55
ubuntu  bionic  s390x   default 20200825_07:42
ubuntu  focal   amd64   default 20200825_07:42
ubuntu  focal   arm64   default 20200825_07:42
ubuntu  focal   armhf   default 20200825_07:42
ubuntu  focal   ppc64el default 20200825_07:42
ubuntu  focal   s390x   default 20200825_07:42
...
voidlinux       current amd64   default 20200825_17:10
voidlinux       current arm64   default 20200825_17:10
voidlinux       current armhf   default 20200825_17:10
voidlinux       current i386    default 20200825_17:10
---

Distribution:
ubuntu
Release:
bionic
Architecture:
amd64

Downloading the image index
Downloading the rootfs
Downloading the metadata
The image cache is now ready
Unpacking the rootfs

---
You just created an Ubuntu bionic amd64 (20200825_07:42) container.

To enable SSH, run: apt install openssh-server
No default root or user password are set by LXC.

コンテナの起動

注意コンテナを起動する前に、LXC用ブリッジインターフェースlxcbr0を作成しておく必要があります。

コンテナを起動するには lxc-start コマンドを使用します。

使用法:lxc-start --name=コンテナ名 -- コマンド

lxc-startのオプション
-n, --name=コンテナ名を指定
-d, --daemonコンテナをデーモン化する(デフォルト)
-F, --foreground/dev/consoleに接続されている現在のttyから開始
-p, --pidfile=作成するプロセスIDファイルを指定
-f, --rcfile=読み込む設定ファイルを指定
-c, --console=使用するコンテナコンソールを指定
-L, --console-log=コンテナコンソールのログの出力先ファイルを指定
-C, --close-all-fdsfdが継承されている場合は、それらを閉じる
注:--daemonは--close-all-fdsを意味します
-s, --define KEY=構成変数を指定
--share-[net|ipc|uts|pid]=別のコンテナまたはPIDと名前空間を共有する

例)

# lxc-start ubuntu

コンテナにアタッチ

コンテナにアタッチするには lxc-attach コマンドを使用します。

使用法:lxc-attach --name=コンテナ名 [-- コマンド]

lxc-attachのオプション
-n, --name=コンテナ名を指定
-e, --elevated-privileges=コンテナの特権ではなく、昇格された特権を使用します。昇格する特権をORのリストとして指定しない場合:CAP、CGROUP、LSM(それぞれ、capability、cgroup、restrictions)は昇格されます。警告:これにより、特権がコンテナに漏洩する可能性があります。 注意して使用してください。
-a, --arch=コンテナ自体のアーキテクチャではなく、プログラムに使用するアーキテクチャを指定します。
-s, --namespaces=コンテナのすべての名前空間にアタッチするのではなく、フラグの次のORされたリストにのみアタッチします:MOUNT、PID、UTSNAME、IPC、USERまたはNETWORK.WARNING:-sを使用すると、すべての特権が昇格された-eを意味します。したがって、特権がコンテナに漏洩します。注意して使用してください。
-R, --remount-sys-proc正しいネームスペースコンテキストを正しく反映するために、-sを使用するときにマウントネームスペースにアタッチしていない場合は、/sysおよび/procを再マウントします。詳細は、lxc-attach(1)のマニュアルページを参照してください。
--clear-envアタッチする前にすべての環境変数をクリアします。アタッチされたシェル/プログラムは、container=lxcのみを設定して起動します。
--keep-env現在の環境変数をすべて保持します。これは現在のデフォルトの動作ですが、将来変更される可能性があります。
-L, --pty-log=ptyログの出力先ファイルを指定
-v, --set-varコンテナ内の接続されたプログラムによって表示される追加の変数を設定します。複数回指定できます。
--keep-var追加の環境変数を保持します。 --clear-envが指定されている場合にのみ適用されます。複数回使用できます。
-f, --rcfile=ロードする設定ファイルを指定

例)

# lxc-attach ubuntu

コンテナをデタッチ

コンテナをデタッチするには Ctrl + A、Ctrl + Qを順番に入力するか、exit コマンドを使用します。

注意バグなのか、現時点のバージョンではCtrl + A、Ctrl + Qではデタッチできないようです。

コンテナにコンソール接続

コンテナにコンソール接続するには lxc-console コマンドを使用します。

使用法:lxc-console --name=コンテナ名 [--tty 番号]

lxc-consoleのオプション
-n, --name=コンテナ名を指定
-t, --tty=コンソールtty番号を指定
-e, --escape=エスケープコマンドのプレフィックスを指定
--rcfile=ロードする設定ファイルを指定

例)

# lxc-console --name=ubuntu

注意少なくとも、現在のバージョンではコンソールから切断する方法はないようです。

注意Ubuntuコンテナでは初期設定ではrootユーザーのパスワードは設定されていないため先にパスワードを設定してからでないとログインできません。コンテナをインストールした際に最後に「No default root or user password are set by LXC.」と表示されていましたよね。

コンテナの停止

コンテナを停止するには lxc-stop コマンドを使用します。

使用法:lxc-stop --name=コンテナ名

lxc-stopのオプション
-n, --name=コンテナ名を指定
-r, --rebootコンテナを再起動
-W, --nowaitシャットダウンまたは再起動が完了するのを待たない
-t, --timeout=ハードストップする前に待機する時間(秒)を指定
-k, --killクリーンシャットダウンを要求するのではなく、コンテナを強制終了する
--nolockAPIロックの使用を避ける
--nokillクリーンシャットダウンのみを要求し、タイムアウト後に強制終了しない
--rcfile=ロードする設定ファイルを指定

例)

# lxc-stop ubuntu

コンテナの破棄

コンテナを破棄するには lxc-destroy コマンドを使用します。

使用法:lxc-destroy --name=コンテナ名 [-f] [-P lxcpath]

lxc-destroyのオプション
-n, --name=NAMEコンテナ名を指定
-s, --snapshotsすべてのスナップショットを含めて破棄
-f, --forceコンテナがシャットダウンするのを待つ
--rcfile=ロードする設定ファイルを指定
例)
# lxc-destroy ubuntu

公開日時:2020年08月27日 11:49:47
最終更新日時:2022年03月13日 08:33:23

なお、VPS選びで迷ったらこちらの記事で主要VPSのメモリ容量ごとの月額、年額料金を比較していますので、是非参考にしてみてください。

コンテナ仮想化に戻る

「コンテナ仮想化」に関する他の手順

このページのトップに戻る