hysryt / wiki

https://hysryt.github.io/wiki/
0 stars 0 forks source link

LXC #110

Open hysryt opened 5 years ago

hysryt commented 5 years ago

Ubuntu14.04にインストール

$ sudo apt-get update
$ sudo apt-get install lxc

/usr/bin に lxc-* コマンドがインストールされる。

$ lxc-start --version
1.0.10

Ubuntu テンプレートを使ってコンテナを作成

テンプレートファイルは /usr/share/lxc/templates にある。 各テンプレートはシェルスクリプトで記述されている。

$ ls /usr/share/lxc/templates/
lxc-alpine     lxc-centos    lxc-fedora        lxc-oracle  lxc-ubuntu-cloud
lxc-altlinux   lxc-cirros    lxc-gentoo        lxc-plamo
lxc-archlinux  lxc-debian    lxc-openmandriva  lxc-sshd
lxc-busybox    lxc-download  lxc-opensuse      lxc-ubuntu
$ sudo lxc-create -n ubuntu01 -t ubuntu
Checking cache download in /var/cache/lxc/trusty/rootfs-amd64 ... 
Installing packages in template: ssh,vim,language-pack-en
Downloading ubuntu trusty minimal ...
I: Retrieving Release 
I: Retrieving Release.gpg 
I: Checking Release signature
...

コンテナは /var/lib/lxc 下に作成される。

$ sudo ls /var/lib/lxc
ubuntu01
$ sudo ls /var/lib/lxc/ubuntu01
config  fstab  rootfs
$ sudo ls /var/lib/lxc/ubuntu01/rootfs
bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
boot  etc  lib   media  opt  root  sbin  sys  usr

コンテナ名のディレクトリにある rootfs ディレクトリがコンテナ内のルートディレクトリとなる。

コンテナの一覧

$ sudo lxc-ls --fancy
NAME      STATE    IPV4  IPV6  AUTOSTART  
----------------------------------------
ubuntu01  STOPPED  -     -     NO

コンテナの起動

$ sudo lxc-start -n ubuntu01

ターミナルが起動する。 ユーザ名 ubuntu パスワード ubuntu でログインできる。

$ ifconfig | grep "inet addr"
          inet addr:10.0.3.198  Bcast:10.0.3.255  Mask:255.255.255.0
          inet addr:127.0.0.1  Mask:255.0.0.0

コンテナが 10.0.3.198/24 で接続されていることがわかる。

起動した状態で別ターミナルを開いて一覧表示すると起動していることが確認できる。

$ sudo lxc-ls --fancy
NAME      STATE    IPV4        IPV6  AUTOSTART  
----------------------------------------------
ubuntu01  RUNNING  10.0.3.198  -     NO

詳細情報

$ sudo lxc-info -n ubuntu01
Name:           ubuntu01
State:          RUNNING
PID:            5456
IP:             10.0.3.198
CPU use:        0.89 seconds
BlkIO use:      21.47 MiB
Memory use:     17.73 MiB
KMem use:       0 bytes
Link:           vethR33TW0
 TX bytes:      4.48 KiB
 RX bytes:      4.82 KiB
 Total bytes:   9.30 KiB

コンテナの停止

$ sudo lxc-stop -n ubuntu01
$ sudo lxc-ls --fancy
NAME      STATE    IPV4  IPV6  AUTOSTART  
----------------------------------------
ubuntu01  STOPPED  -     -     NO

コンテナをバックグラウンドで起動

$ sudo lxc-start -n ubuntu01 -d
$ sudo lxc-ls --fancy
NAME      STATE    IPV4        IPV6  AUTOSTART  
----------------------------------------------
ubuntu01  RUNNING  10.0.3.198  -     NO

バックグラウンドで起動したコンテナのコンソールに接続

$ sudo lxc-console -n ubuntu01

コンソールから抜けるには control + a の後に q を押す。

ホストOSから直接コンテナ内でコマンドを実行する

$ sudo lxc-attach -n ubuntu01 -- hostname
ubuntu01

コンテナに対する cgroup の設定を見る

$ sudo lxc-cgroup -n ubuntu01 memory.limit_in_bytes
9223372036854771712

コンテナのスナップショットを取る

その時点でのファイルを全てコピーする。 先にコンテナを停止する。

$ sudo lxc-stop -n ubuntu01
$ sudo lxc-snapshot -n ubuntu01
lxc_container: lxccontainer.c: lxcapi_snapshot: 2887 Snapshot of directory-backed container requested.
lxc_container: lxccontainer.c: lxcapi_snapshot: 2888 Making a copy-clone.  If you do want snapshots, then
lxc_container: lxccontainer.c: lxcapi_snapshot: 2889 please create an aufs or overlayfs clone first, snapshot that
lxc_container: lxccontainer.c: lxcapi_snapshot: 2890 and keep the original container pristine.

スナップショットの確認

-L フラグでスナップショットを確認できる。

$ sudo lxc-snapshot -n ubuntu01 -L
snap0 (/var/lib/lxcsnaps/ubuntu01) 2019:01:27 14:02:18

/var/lib/lxcsnaps/ubuntu01 にスナップショットが保存される

$ sudo ls /var/lib/lxcsnaps/ubuntu01/snap0
config  fstab  rootfs  ts

スナップショットのリストア

$ sudo lxc-snapshot -n ubuntu01 -r snap0

コンテナの削除

$ sudo lxc-destroy -n ubuntu01
$ sudo lxc-ls --fancy
NAME  STATE  IPV4  IPV6  AUTOSTART  
----------------------------------

コンテナをアプリケーションコンテナとして実行

init を介さず、指定したコマンドを直接実行する。

$ sudo lxc-start -n ubuntu01 -- /bin/bash