リモートイメージの検索
$ lxc image list images: xenial
リモートイメージの取得
リモートのイメージをローカルにダウンロードする
$ lxc image copy images:ubuntu/xenial local: --alias xenial
$ lxc image copy images:ubuntu/bionic local: --alias bionic
コマンドの趣旨は"リポジトリ間でLXCイメージをコピー"するということ。docker pull
相当。
特権コンテナでコンテナを起動
$ lxc launch xenial u1 -c security.privileged=true
あとから設定する場合
$ lxc config set u1 security.privileged true
security.privileged
について
LXC/LXDは要は豪華版chrootみたいなものなのだが(コンテナのファイルシステムはホストの /var/lib/lxd/containers/<CONTAINER NAME>/rootfs
に入っている)、コンテナ側に権限を持たせないためにコンテナのrootユーザーIDはホストから見ると10000に見えるようなことになっている。このIDをずらす機能はUser namespacing
と呼ばれ、Linuxカーネルのサポートで実現されている。LXC/LXDと同じくCanonicalが開発元であるUbuntuはこれがデフォルトで有効になっているが、私の使うArch Linuxを始め多くのディストロではデフォルトで無効になっている(2016年10月22日において)。
よってUbuntu以外でコンテナを起動するためにはsecurity.privileged
をfalse
にするか、自前でカーネルをビルドしてUser namespacing
有効にする必要がある。
共有ディレクトリの設定
$ lxc config device add <container> <share name> disk path=<host path> source=<container path>
長すぎる。特権コンテナじゃないとユーザーIDの関係で扱いにくいので注意。
デフォルトプロファイルを変更
$ lxc profile edit default
例えば下みたいに変更すれば
name: default
+ config:
+ security.privileged: "true"
- config: {}
description: Default LXD profile
devices:
eth0:
name: eth0
nictype: bridged
parent: lxdbr0
type: nic
デフォルトで特権コンテナで起動してくれる。
コンテナ名をローカルでのみ有効なホスト名として使う
u1
って名前のコンテナがあったら自動的にu1.lxd
ってホストを割り当てて$ ssh [email protected]
みたいにできるようにする。
別記事参照 → LXDのコンテナに、コンテナ名のホストでアクセスする
ロケールがPOSIXから変更できない
environment.LC_ALL
でロケールを指定するとよい。/etc/locale.conf
も/etc/default/locale
を変更しても効果がない場合に設定するとよい
$ lxc config set u1 environment.LC_ALL en_US.UTF-8
環境がLXCコンテナ内部のものか、そうでないか識別する
$container
変数が使える。自分はこれを使ってzshのプロンプトを変更している。おなじzshrcでも
こんな感じにできる。