LXC
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[FrontPage]]
#contents
* 何? [#gd1ae430]
LXDを用いて簡単にLXCを使う記事です。
''正直、今まで素のLXCでやってた苦労は何だったのってくらい...
なお、環境はUbuntu18.04でためしてます。
* 参考 [#w4297aa6]
- [[Linux Containers - LXD - はじめに - コマンドライン>ht...
インストールについては、オフィシャル情報を参考に。
* 未解決問題 [#vb9304ef]
ブリッジで Ubuntu使ってると、mobaXtermと相性悪い気がしま...
* 基本 [#p26e4b70]
** コンテナ作成 [#c61122f0]
$ lxc launch ubuntu:18.04 ubuntu1804
** チェック [#x14ae096]
$ lxc list
+------------+---------+----------------------+---------...
| NAME | STATE | IPV4 | ...
+------------+---------+----------------------+---------...
| ubuntu1804 | RUNNING | 10.212.159.61 (eth0) | fd54:f78...
+------------+---------+----------------------+---------...
$
** 再起動時にはどうなる? [#ofe22a0a]
自動的にこちらも起動するみたい。cronとかがちゃんと動くか...
* 保守 [#d63513c5]
** 助けて!ストレージがいっぱいになっちゃった! [#pfb9f89c]
*** ストレージプールを確認する [#f4e7aaae]
$ lxc storage list
*** ストレージプールをひとつ作ってみる [#sae0d5e4]
名前は siro で作ってみましょう。
$ lxc storage create siro btrfs
できたかしら、確認。
$ lxc storage list
+---------+-------------+--------+----------------------...
| NAME | DESCRIPTION | DRIVER | SOURCE ...
+---------+-------------+--------+----------------------...
| default | | btrfs | /var/lib/lxd/disks/de...
+---------+-------------+--------+----------------------...
| siro | | btrfs | /var/lib/lxd/disks/si...
+---------+-------------+--------+----------------------...
$ lxc storage info siro
じゃあ、できたプールを使ってノード作成してみるわね。
$ lxc launch ubuntu:20.04 mc11 --storage siro
Creating mc11
Starting mc11
*** 未検証の作法 [#lff13968]
ああ、今回やらなかったけど、こんな事もできるらしいわよ。
$ lxc storage create siro btrfs source=/dev/sdb1
Storage pool siro created
あと、ストレージプールから実際のノードに割り振られるわけ...
たぶんストレージプールのサイズも変更できると思うけど、こ...
** 作ったコンテナに入ってみる [#u3e6d1cd]
$ lxc exec ubuntu1804 -- /bin/bash
** 直接コマンド実行 [#q4a9cd14]
$ lxc exec ubuntu1804 -- apt-get update
** コンテナの停止 [#gc51708f]
$ lxc stop ubuntu1804
** 停めているコンテナの開始 [#i4bbc1c2]
$ lxc start ubuntu1804
** 停めているコンテナの削除 [#if355303]
$ lxc delete ubuntu1804
消してもイメージがあればすぐ作り直せるので、恐れず。
** ファイル転送 [#wb59e4c0]
*** コンテナからファイルを取得 [#t490ff18]
$ lxc file pull ubuntu1804/etc/hosts .
*** コンテナへファイルを送る [#r1dde067]
''注意: ディレクトリに転送時、最後を / にしてディレクトリ...
$ lxc file push examples.desktop ubuntu1804/tmp/
$ $ lxc exec ubuntu1804 -- /bin/bash
root@ubuntu1804:~# cd /tmp
root@ubuntu1804:/tmp# ls -ltr
total 12
-rw-r--r-- 1 1001 1001 8980 Sep 9 21:52 examples.desktop
root@ubuntu1804:/tmp#
* 応用 [#dfc9a1de]
** コンテナを作る前にイメージだけもらってくる。 [#a6811f97]
一番便利な応用といえば、まずこれでしょう。
同じ環境をたくさん作りたい時、いちいち遠いサーバからもら...
まずローカルにイメージをもらってくるのがいいです。~
たとえば以下のように。
$ lxc image copy images:debian/buster/amd64 local: --ali...
イメージのコピーが成功しました!
$ lxc image list
+-----------------------------------+--------------+----...
| ALIAS | FINGERPRINT | PUB...
+-----------------------------------+--------------+----...
| save_buster | 92f3ac1b8123 | no ...
+-----------------------------------+--------------+----...
たとえば、こんな感じになります。
auto-update がちゃんと効くのかは正直わかりませんが、効け...
上記の場合、次からは lxc launch local:save_buster nodenam...
** 今使っているコンテナを元に新しいコンテナを作る [#kf3c3...
minecraftというコンテナを元に、minecraft2を作ってみる。
*** イメージ minesave を作る。 [#hed02865]
$ lxc publish minecraft --alias minesave
*** 確認する。 [#l73fe7e7]
$ lxc image list
+---------------------+--------------+--------+---------...
| ALIAS | FINGERPRINT | PUBLIC | ...
+---------------------+--------------+--------+---------...
| minesave | f5943bb3067f | no | ...
+---------------------+--------------+--------+---------...
| ubuntu1804-20180606 | 903ca4859b62 | no | ...
+---------------------+--------------+--------+---------...
| | 087952830a12 | no | Debian s...
+---------------------+--------------+--------+---------...
| | 8fc2e3ec4809 | no | ubuntu 1...
+---------------------+--------------+--------+---------...
*** イメージ minesave を元に minecraft2 を作る。 [#s1f1d4...
$ lxc launch local:minesave minecraft2
あとは普通にやりましょう。
** 【YetAnother】今使っているコンテナを元に新しいコンテナ...
imageを作らずに直接コピーします。ただし動作中のコンテナが...
$ lxc copy minecraft minecraft2
実は、うちでローカルDNSサーバを複写したんですけど、サーバ...
** イメージをエクスポートする(よそに持ち出したり保存する)...
すでにイメージ生成ずみとします。名前は minesave で
*** コマンド(lxc image export) [#mada5d61]
$ lxc image export minesave .
イメージのエクスポート中: 22% (63.01MB/s)
:
イメージのエクスポートに成功しました!
*** 確認(ls -ltr) [#kaa0a206]
$ ls -ltr
-rw-rw-r-- 1 user group 5653668973 5月 18 09:44 20e3357...
** イメージをインポートする(よそから持ち込んだり復活させ...
さきほどエクスポートしたのを取り込んでみます。
*** コマンド(lxc image import) [#n185def8]
$ lxc image import 20e33573e6d1cd273fe04fa9525d1d275c8ff...
aliasは必須ではなく、ツケ忘れた場合はフィンガープリントを...
でも、 ''面倒くさくないですか?''
私は aliasを付けるほうが楽でいいです。''
*** おわったら確認(lxc image list) [#s3f28454]
lxc image には list, delete等いろいろな機能があります。im...
*** tar玉をもってきてコマンド実行( [#r604fc90]
** 母艦と違う環境を作ってみる [#aafff619]
これも昔より簡単になりました。今回はUbuntuが親なのでDebia...
$ lxc launch images:debian/stretch/amd64 stretch01
stretch01 を作成中
stretch01 を起動中
$ lxc list
+------------+---------+-----------------------+--------...
| NAME | STATE | IPV4 | ...
+------------+---------+-----------------------+--------...
| stretch01 | RUNNING | 192.168.123.36 (eth0) | fd2b:b9...
+------------+---------+-----------------------+--------...
| ubuntu1804 | RUNNING | 192.168.123.76 (eth0) | fd2b:b9...
+------------+---------+-----------------------+--------...
$
おお。
なお、stretchでTimezoneがUTCなのをローカルタイムにしたい...
# timedatectl set-timezone Asia/Tokyo
** イメージのロード時間について [#oddc5c42]
作ったことのない環境のコンテナを作ろうとすると、ネットか...
Debianを作ったので、同じDebianの stretch02 を作ってみまし...
$ lxc launch images:debian/stretch/amd64 stretch02
stretch02 を作成中
stretch02 を起動中
$ lxc list
+------------+---------+------------------------+-------...
| NAME | STATE | IPV4 | ...
+------------+---------+------------------------+-------...
| stretch01 | RUNNING | 192.168.123.36 (eth0) | fd2b:b...
+------------+---------+------------------------+-------...
| stretch02 | RUNNING | 192.168.123.141 (eth0) | fd2b:b...
+------------+---------+------------------------+-------...
| ubuntu1804 | RUNNING | 192.168.123.76 (eth0) | fd2b:b...
+------------+---------+------------------------+-------...
はい。わかりにくいでしょうけど、速いマシンなら2秒とかか...
** 所有イメージを確認する [#xcf15c0b]
コンテナはイメージを元に作成されるわけですが、もっている...
$ lxc image list
+-------+--------------+--------+-----------------------...
| ALIAS | FINGERPRINT | PUBLIC | DESCR...
+-------+--------------+--------+-----------------------...
| | b0209bc0666c | no | Debian stretch amd64 (...
+-------+--------------+--------+-----------------------...
| | 58f90cbf6892 | no | ubuntu 16.04 LTS amd64...
+-------+--------------+--------+-----------------------...
$
うーん、便利!
** コンテナにssh loginできない時 [#s64c5fd3]
X転送でfirefox使いたいときとか困るよね。
permissionがどうのと言われて切られるなら、これはコンテナ...
** ブリッジで通常IPにノード作成 [#u8f62d3c]
ほら、出島マシンとかローカルDNSとか、仮想で作って皆で使い...
うちは 192.168.1.* なので、そこに DHCP でノードを置いてみ...
*** Bridgeを作る。 [#c60d1e46]
詳しくは、[[こちら>make_Bridge]]を参照してブリッジを作る...
*** Bridge プロファイルを作る [#r0e4746d]
LXD/LXC用の設定profileを作る。
ただし最近はデフォルト(default)設定の方もローカルブリッジ...
$ lxc profile copy default bridge
$ lxc profile edit bridge
デフォルト設定の中に「lxdbr0」の記述があるのを、br0に訂正...
*** 対象のコンテナを停止する [#e9f6d6ee]
$ lxc stop ubuntu1804
*** コンテナのプロファイルをブリッジ用に変更 [#t967ae86]
$ lxc config edit ubuntu1804
下記の場所を修正する。
profiles:
- default
このように。
profiles:
- bridge
*** 対象のコンテナを開始する [#l2c463e5]
$ lxc start ubuntu1804
$ lxc list
+------------+---------+---------------------+----------...
| NAME | STATE | IPV4 | ...
+------------+---------+---------------------+----------...
| ubuntu1804 | RUNNING | 192.168.1.47 (eth0) | 2408:210:...
+------------+---------+---------------------+----------...
$
*** (問題)OSをアップデートしたら前に作ったprofileに変更で...
Ubuntu16.04の時に作った bridge に、18.04にアップグレード...
→新環境でprofileを再度作ればいい。 ''bridge2'' とか。
さあ、どんどんためそう!
* 雑品 [#q7ee8b68]
** (Ruby) lxc list から IP をとりだす [#td1ba7c5]
*** ~/bin/getip.rb [#l67c2986]
class String
def _getIP
c = `lxc list`.split("\n")
(0..c.length-1).each{|i|
if c[i] !~ /eth0/
c[i] = nil
else
c[i].gsub!(/\ /,'')
c[i] = c[i].split("\|")
if c[i][1] != self
c[i] = nil
else
c[i] = c[i][3].split("(")[0]
end
end
}
c.compact! if c.length > 1
c = c[0] if c.class == Array && c.length == 1
c
end
end
*** test.rb [#v2b5eb2f]
require "#{ENV['HOME']}/bin/getip.rb"
ARGV.each{|q|
p q._getIP
}
そんで、使ってみる。
$ lxc list
+------------+---------+---------------------+----------...
| NAME | STATE | IPV4 | ...
+------------+---------+---------------------+----------...
| crawler01 | RUNNING | 192.168.1.25 (eth0) | 2001:c90:...
+------------+---------+---------------------+----------...
| ubuntu1804 | RUNNING | 192.168.1.24 (eth0) | 2001:c90:...
+------------+---------+---------------------+----------...
$ ruby test.rb crawler01
"192.168.1.25"
$
どうかな。
応用すると「 ''全てのマシンで apt-get update'' 」とか書け...
終了行:
[[FrontPage]]
#contents
* 何? [#gd1ae430]
LXDを用いて簡単にLXCを使う記事です。
''正直、今まで素のLXCでやってた苦労は何だったのってくらい...
なお、環境はUbuntu18.04でためしてます。
* 参考 [#w4297aa6]
- [[Linux Containers - LXD - はじめに - コマンドライン>ht...
インストールについては、オフィシャル情報を参考に。
* 未解決問題 [#vb9304ef]
ブリッジで Ubuntu使ってると、mobaXtermと相性悪い気がしま...
* 基本 [#p26e4b70]
** コンテナ作成 [#c61122f0]
$ lxc launch ubuntu:18.04 ubuntu1804
** チェック [#x14ae096]
$ lxc list
+------------+---------+----------------------+---------...
| NAME | STATE | IPV4 | ...
+------------+---------+----------------------+---------...
| ubuntu1804 | RUNNING | 10.212.159.61 (eth0) | fd54:f78...
+------------+---------+----------------------+---------...
$
** 再起動時にはどうなる? [#ofe22a0a]
自動的にこちらも起動するみたい。cronとかがちゃんと動くか...
* 保守 [#d63513c5]
** 助けて!ストレージがいっぱいになっちゃった! [#pfb9f89c]
*** ストレージプールを確認する [#f4e7aaae]
$ lxc storage list
*** ストレージプールをひとつ作ってみる [#sae0d5e4]
名前は siro で作ってみましょう。
$ lxc storage create siro btrfs
できたかしら、確認。
$ lxc storage list
+---------+-------------+--------+----------------------...
| NAME | DESCRIPTION | DRIVER | SOURCE ...
+---------+-------------+--------+----------------------...
| default | | btrfs | /var/lib/lxd/disks/de...
+---------+-------------+--------+----------------------...
| siro | | btrfs | /var/lib/lxd/disks/si...
+---------+-------------+--------+----------------------...
$ lxc storage info siro
じゃあ、できたプールを使ってノード作成してみるわね。
$ lxc launch ubuntu:20.04 mc11 --storage siro
Creating mc11
Starting mc11
*** 未検証の作法 [#lff13968]
ああ、今回やらなかったけど、こんな事もできるらしいわよ。
$ lxc storage create siro btrfs source=/dev/sdb1
Storage pool siro created
あと、ストレージプールから実際のノードに割り振られるわけ...
たぶんストレージプールのサイズも変更できると思うけど、こ...
** 作ったコンテナに入ってみる [#u3e6d1cd]
$ lxc exec ubuntu1804 -- /bin/bash
** 直接コマンド実行 [#q4a9cd14]
$ lxc exec ubuntu1804 -- apt-get update
** コンテナの停止 [#gc51708f]
$ lxc stop ubuntu1804
** 停めているコンテナの開始 [#i4bbc1c2]
$ lxc start ubuntu1804
** 停めているコンテナの削除 [#if355303]
$ lxc delete ubuntu1804
消してもイメージがあればすぐ作り直せるので、恐れず。
** ファイル転送 [#wb59e4c0]
*** コンテナからファイルを取得 [#t490ff18]
$ lxc file pull ubuntu1804/etc/hosts .
*** コンテナへファイルを送る [#r1dde067]
''注意: ディレクトリに転送時、最後を / にしてディレクトリ...
$ lxc file push examples.desktop ubuntu1804/tmp/
$ $ lxc exec ubuntu1804 -- /bin/bash
root@ubuntu1804:~# cd /tmp
root@ubuntu1804:/tmp# ls -ltr
total 12
-rw-r--r-- 1 1001 1001 8980 Sep 9 21:52 examples.desktop
root@ubuntu1804:/tmp#
* 応用 [#dfc9a1de]
** コンテナを作る前にイメージだけもらってくる。 [#a6811f97]
一番便利な応用といえば、まずこれでしょう。
同じ環境をたくさん作りたい時、いちいち遠いサーバからもら...
まずローカルにイメージをもらってくるのがいいです。~
たとえば以下のように。
$ lxc image copy images:debian/buster/amd64 local: --ali...
イメージのコピーが成功しました!
$ lxc image list
+-----------------------------------+--------------+----...
| ALIAS | FINGERPRINT | PUB...
+-----------------------------------+--------------+----...
| save_buster | 92f3ac1b8123 | no ...
+-----------------------------------+--------------+----...
たとえば、こんな感じになります。
auto-update がちゃんと効くのかは正直わかりませんが、効け...
上記の場合、次からは lxc launch local:save_buster nodenam...
** 今使っているコンテナを元に新しいコンテナを作る [#kf3c3...
minecraftというコンテナを元に、minecraft2を作ってみる。
*** イメージ minesave を作る。 [#hed02865]
$ lxc publish minecraft --alias minesave
*** 確認する。 [#l73fe7e7]
$ lxc image list
+---------------------+--------------+--------+---------...
| ALIAS | FINGERPRINT | PUBLIC | ...
+---------------------+--------------+--------+---------...
| minesave | f5943bb3067f | no | ...
+---------------------+--------------+--------+---------...
| ubuntu1804-20180606 | 903ca4859b62 | no | ...
+---------------------+--------------+--------+---------...
| | 087952830a12 | no | Debian s...
+---------------------+--------------+--------+---------...
| | 8fc2e3ec4809 | no | ubuntu 1...
+---------------------+--------------+--------+---------...
*** イメージ minesave を元に minecraft2 を作る。 [#s1f1d4...
$ lxc launch local:minesave minecraft2
あとは普通にやりましょう。
** 【YetAnother】今使っているコンテナを元に新しいコンテナ...
imageを作らずに直接コピーします。ただし動作中のコンテナが...
$ lxc copy minecraft minecraft2
実は、うちでローカルDNSサーバを複写したんですけど、サーバ...
** イメージをエクスポートする(よそに持ち出したり保存する)...
すでにイメージ生成ずみとします。名前は minesave で
*** コマンド(lxc image export) [#mada5d61]
$ lxc image export minesave .
イメージのエクスポート中: 22% (63.01MB/s)
:
イメージのエクスポートに成功しました!
*** 確認(ls -ltr) [#kaa0a206]
$ ls -ltr
-rw-rw-r-- 1 user group 5653668973 5月 18 09:44 20e3357...
** イメージをインポートする(よそから持ち込んだり復活させ...
さきほどエクスポートしたのを取り込んでみます。
*** コマンド(lxc image import) [#n185def8]
$ lxc image import 20e33573e6d1cd273fe04fa9525d1d275c8ff...
aliasは必須ではなく、ツケ忘れた場合はフィンガープリントを...
でも、 ''面倒くさくないですか?''
私は aliasを付けるほうが楽でいいです。''
*** おわったら確認(lxc image list) [#s3f28454]
lxc image には list, delete等いろいろな機能があります。im...
*** tar玉をもってきてコマンド実行( [#r604fc90]
** 母艦と違う環境を作ってみる [#aafff619]
これも昔より簡単になりました。今回はUbuntuが親なのでDebia...
$ lxc launch images:debian/stretch/amd64 stretch01
stretch01 を作成中
stretch01 を起動中
$ lxc list
+------------+---------+-----------------------+--------...
| NAME | STATE | IPV4 | ...
+------------+---------+-----------------------+--------...
| stretch01 | RUNNING | 192.168.123.36 (eth0) | fd2b:b9...
+------------+---------+-----------------------+--------...
| ubuntu1804 | RUNNING | 192.168.123.76 (eth0) | fd2b:b9...
+------------+---------+-----------------------+--------...
$
おお。
なお、stretchでTimezoneがUTCなのをローカルタイムにしたい...
# timedatectl set-timezone Asia/Tokyo
** イメージのロード時間について [#oddc5c42]
作ったことのない環境のコンテナを作ろうとすると、ネットか...
Debianを作ったので、同じDebianの stretch02 を作ってみまし...
$ lxc launch images:debian/stretch/amd64 stretch02
stretch02 を作成中
stretch02 を起動中
$ lxc list
+------------+---------+------------------------+-------...
| NAME | STATE | IPV4 | ...
+------------+---------+------------------------+-------...
| stretch01 | RUNNING | 192.168.123.36 (eth0) | fd2b:b...
+------------+---------+------------------------+-------...
| stretch02 | RUNNING | 192.168.123.141 (eth0) | fd2b:b...
+------------+---------+------------------------+-------...
| ubuntu1804 | RUNNING | 192.168.123.76 (eth0) | fd2b:b...
+------------+---------+------------------------+-------...
はい。わかりにくいでしょうけど、速いマシンなら2秒とかか...
** 所有イメージを確認する [#xcf15c0b]
コンテナはイメージを元に作成されるわけですが、もっている...
$ lxc image list
+-------+--------------+--------+-----------------------...
| ALIAS | FINGERPRINT | PUBLIC | DESCR...
+-------+--------------+--------+-----------------------...
| | b0209bc0666c | no | Debian stretch amd64 (...
+-------+--------------+--------+-----------------------...
| | 58f90cbf6892 | no | ubuntu 16.04 LTS amd64...
+-------+--------------+--------+-----------------------...
$
うーん、便利!
** コンテナにssh loginできない時 [#s64c5fd3]
X転送でfirefox使いたいときとか困るよね。
permissionがどうのと言われて切られるなら、これはコンテナ...
** ブリッジで通常IPにノード作成 [#u8f62d3c]
ほら、出島マシンとかローカルDNSとか、仮想で作って皆で使い...
うちは 192.168.1.* なので、そこに DHCP でノードを置いてみ...
*** Bridgeを作る。 [#c60d1e46]
詳しくは、[[こちら>make_Bridge]]を参照してブリッジを作る...
*** Bridge プロファイルを作る [#r0e4746d]
LXD/LXC用の設定profileを作る。
ただし最近はデフォルト(default)設定の方もローカルブリッジ...
$ lxc profile copy default bridge
$ lxc profile edit bridge
デフォルト設定の中に「lxdbr0」の記述があるのを、br0に訂正...
*** 対象のコンテナを停止する [#e9f6d6ee]
$ lxc stop ubuntu1804
*** コンテナのプロファイルをブリッジ用に変更 [#t967ae86]
$ lxc config edit ubuntu1804
下記の場所を修正する。
profiles:
- default
このように。
profiles:
- bridge
*** 対象のコンテナを開始する [#l2c463e5]
$ lxc start ubuntu1804
$ lxc list
+------------+---------+---------------------+----------...
| NAME | STATE | IPV4 | ...
+------------+---------+---------------------+----------...
| ubuntu1804 | RUNNING | 192.168.1.47 (eth0) | 2408:210:...
+------------+---------+---------------------+----------...
$
*** (問題)OSをアップデートしたら前に作ったprofileに変更で...
Ubuntu16.04の時に作った bridge に、18.04にアップグレード...
→新環境でprofileを再度作ればいい。 ''bridge2'' とか。
さあ、どんどんためそう!
* 雑品 [#q7ee8b68]
** (Ruby) lxc list から IP をとりだす [#td1ba7c5]
*** ~/bin/getip.rb [#l67c2986]
class String
def _getIP
c = `lxc list`.split("\n")
(0..c.length-1).each{|i|
if c[i] !~ /eth0/
c[i] = nil
else
c[i].gsub!(/\ /,'')
c[i] = c[i].split("\|")
if c[i][1] != self
c[i] = nil
else
c[i] = c[i][3].split("(")[0]
end
end
}
c.compact! if c.length > 1
c = c[0] if c.class == Array && c.length == 1
c
end
end
*** test.rb [#v2b5eb2f]
require "#{ENV['HOME']}/bin/getip.rb"
ARGV.each{|q|
p q._getIP
}
そんで、使ってみる。
$ lxc list
+------------+---------+---------------------+----------...
| NAME | STATE | IPV4 | ...
+------------+---------+---------------------+----------...
| crawler01 | RUNNING | 192.168.1.25 (eth0) | 2001:c90:...
+------------+---------+---------------------+----------...
| ubuntu1804 | RUNNING | 192.168.1.24 (eth0) | 2001:c90:...
+------------+---------+---------------------+----------...
$ ruby test.rb crawler01
"192.168.1.25"
$
どうかな。
応用すると「 ''全てのマシンで apt-get update'' 」とか書け...
ページ名: