DockerもいいけどLXDもね 4 〜profileで楽をする〜
さて備忘録も兼ねてるので復習も兼ねて複数回に分けて書いてきたけどぶっちゃけ
これ両方やるのって結構手間だよね?
実はこれLXDのprofileを使うと自動化出来ます。
早速やってみましょう。
profileを作る
私も独学でやってるので正しいかどうか確信がないのですがprofile使うとコンテナ自体の設定周りの初期値を定義しておけるものと理解しています。
ちなみに作らないでも下記のようにdefaultっていう初期設定があって何も指定しないと暗黙の了解でそいつが適用されてます。
$ lxc profile show default
config: {}
description: Default LXD profile
devices:
eth0:
name: eth0
network: lxdbr0
type: nic
root:
path: /
pool: default
type: disk
name: default
used_by:
- /1.0/instances/gui
で実はイメージによってはcloud-initっていうのに対応しててこれも便利なのです。
これを使うとこのプロファイルに定義しといたコマンドとかを実行とかもしてくれるからある程度までイメージの初期設定の手順が省略できるようになります。
DockerComposeみたいなものって考えたらわかりやすいかな?
百聞は一見にしかずなので早速最初に作ったデスクトップ環境とLXD内でDockerを使えるようにしたprofileを作ってみようか
ちょっと長いけどコピペするだけだよ
lxc profile create myProfile
でプロファイルを作成して
lxc profile edit myProfile << EOF
config:
security.nesting: true
security.privileged: true
user.user-data: |
#cloud-config
timezone: Asia/Tokyo
locale: ja_JP.utf8
write_files:
- content: |
[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target
[Service]
Type=forking
User=ubuntu
PAMName=login
PIDFile=/home/ubuntu/.vnc/%H%i.pid
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/usr/bin/vncserver %i -geometry 1920x1080 -depth 24
ExecStop=/usr/bin/vncserver -kill %i
[Install]
WantedBy=multi-user.target
path: /etc/systemd/system/vncserver@:1.service
package_upgrade: true
packages:
- gnupg
- wget
- lxde
- tightvncserver
- docker.io
runcmd:
- wget -q https://www.ubuntulinux.jp/ubuntu-ja-archive-keyring.gpg -O- | apt-key add -
- wget -q https://www.ubuntulinux.jp/ubuntu-jp-ppa-keyring.gpg -O- | apt-key add -
- wget https://www.ubuntulinux.jp/sources.list.d/focal.list -O /etc/apt/sources.list.d/ubuntu-ja.list
- apt update -y
- apt upgrade -y
- apt install -y ubuntu-defaults-ja
- systemctl enable vncserver@:1
EOF
はい、これでmyProfileっていう名前のプロファイルが出来たよ中身は最初と2回目の記事の内容をプロファイルの書式に直しただけだよ
ちゃんと出来てるか確認してみたい場合は以下のコマンドを打つと設定内容が表示されるよ
lxc profile show myProfile
じゃあこのプロファイルを適用したコンテナを起動しよう
前作ったコンテナと違う名前にしたいのでguiって名前のコンテナで作るね。
lxc launch images:ubuntu/21.04/cloud gui -p default -p myProfile
はい、出来た
これだけでほぼほぼ出来ました。
launchする時に-pで作ったプロファイルを指定できるよ
1回目の記事のときとちょっと起動イメージ名が違うよね?
イメージ名の後ろに/cloudってついてるのが今回重要なcloud-init対応のイメージになるよ
他にも色々あるからLXDUIのリモートイメージをcloudで絞って確認してみよう
一杯あるね!
ところでコンソールすぐ返ってくるの変だよね?
手動でやってたときってaptでかなり時間かかったよね?
そう、実は起動は終わってるんだけど今必死にcloud-initくんが設定した内容をせっせせっせとやってくれてるんだね
それが終わるまで待たないといけないので以下のコマンドで終わるまで待とう!
lxc exec gui -- cloud-init status --wait
なんかずっと.......................って出ると思うけどいま頑張ってますよって証拠だから焦らずにBGMでも付けて眺めてよう
そのうちこんなの出るよ
status: done
doneってでたら成功して終わってるってことだから次へ行こう
とりあえずセットアップは終わったのでvncで繋ぐためのパスワード設定をするよ
$ lxc exec gui -- su ubuntu -c 'vncserver :1 -geometry 1920x1080 -depth 24'
これでPW設定したら起動してるよ。
一度VNCクライアントでgui.local:5901に繋いでみよう。
やった!
1回目の記事でやったことが簡単に出来るようになったね!
続いて2回目の記事でやったdockerが動くかも見てみようか
$ lxc exec gui -- docker run --rm -it alpine ash
Unable to find image 'alpine:latest' locally
latest: Pulling from library/alpine
ca3cd42a7c95: Pull complete
Digest: sha256:ec14c7992a97fc11425907e908340c6c3d6ff602f5f13d899e6b7027c9b4133a
Status: Downloaded newer image for alpine:latest
/ # echo yahoo!
yahoo!
出来てる出来てる
いや〜便利な世の中に乾杯🍾
というわけで自堕落底辺おじさんが楽をするためにprofileを使った時の備忘録でした。
それでは良いLinuxライフを
しゃみしゃっきりー
Discussion