Ubuntu開発環境づくり:lxd/lxc編

thumbnail for this post

Ubuntu上でそのままアプリ開発しても良いのですが、やはりクリーンなコンテナ上でやるのが今のトレンドでしょう。
開発環境は頻繁に立ち上げたり・消したりしないので、docker等ではなく、lxd/lxcを利用することにします。

前回の「SSH編」で、ここまでセットアップしたので、

SSH接続

SSH接続

今回は、こんな感じにLXD/LXC環境つくって接続できるまでやります。
LXD/LXCコンテナ

LXD/LXCコンテナ

落書きかな?バンクシー目指してるの?

## まずはインストール
sudo apt install lxd btrfs-progs
そして初期設定(全てデフォルト)
sudo lxd init
ストレージが出来上がっているか確認
sudo lxc storage list
sudo lxc storage show default
sudo lxc storage info default
ストレージは後から追加することもできるらしい
sudo lxc storage create xxxx btrfs source=/dev/sdb1
↑↑この場合新しく作成したストレージプールxxxxが/dev/sdb1を専有

コンテナ生成

sudo lxc launch ubuntu:18.04 test
sudo lxc info test

ストレージを指定してコンテナ作成する場合↓

sudo lxc launch ubuntu:18.04 test2 --storage xxxx

確認

sudo lxc list

この状態で、コンテナのシェルを起動して。そのまま作業ができます。

ubuntu~$ sudo lxc exec test bash 
root@test:~# pwd
/root
root@test:~# exit
exit
ubuntu~$ その他のコマンド
sudo lxc stop test #コンテナ停止
sudo lxc delete test #コンテナ削除

ホストからコンテナにssh接続

このままではlxc execコマンドからの作業しかできないので、ホストからssh接続できるようにします。
lxcコンテナが作成された時点でlxcコンテナ内に"ubuntu"ユーザが出来上がっていますが、sshの公開鍵による接続しか受け付けません。
(パスワード接続はできない)
ですが、この"ubuntu"ユーザの~/.ssh/authorized_keysにホストの公開鍵が登録されていないので、このままでは接続ができません。

コマンドlxc exec pushはホストからコンテナにファイルを送り込んでくれるので、これを利用します。

まだ鍵を作っていない人は先にssh-keygenで作成してください

ssh-keygen -t ecdsa -b 521
pass phrase #指定しない
公開鍵をlxcコンテナに送り込みます。
sudo lxc file push ~/.ssh/xxx.pub test/home/ubuntu/.ssh/authorized_keys
↑↑このやり方だとauthorized_keysを上書きしてしまうので注意

ここまできたらssh接続できます。

~$ sudo lxc list #コンテナのIPアドレス確認
~$ ssh ubuntu@<IP addr>
Welcome to Ubuntu 18.04.3 LTS (GNU/Linux 5.0.0-37-generic x86_64)
....
....

ubuntu@test:~$

ブリッジを設定すれば外部からも繋げられるようにできそうですが、今は必要ないのでこのまま使います。

他にどんなOSのイメージがあるの?

他にどんなOSのコンテナが作れるのか見てみましょう
まずはイメージを保持してるリモートレポジトリにどんなところが登録されているのか見てみます

~$ sudo lxc remote list
+-----------------+------------------------------------------+---------------+-----------+--------+--------+
|      NAME       |                   URL                    |   PROTOCOL    | AUTH TYPE | PUBLIC | STATIC |
+-----------------+------------------------------------------+---------------+-----------+--------+--------+
| images          | https://images.linuxcontainers.org       | simplestreams |           | YES    | NO     |
+-----------------+------------------------------------------+---------------+-----------+--------+--------+
| local (default) | unix://                                  | lxd           | tls       | NO     | YES    |
+-----------------+------------------------------------------+---------------+-----------+--------+--------+
| ubuntu          | https://cloud-images.ubuntu.com/releases | simplestreams |           | YES    | YES    |
+-----------------+------------------------------------------+---------------+-----------+--------+--------+
| ubuntu-daily    | https://cloud-images.ubuntu.com/daily    | simplestreams |           | YES    | YES    |
+-----------------+------------------------------------------+---------------+-----------+--------+--------+
imagesがどんなイメージを保持しているか見てみましょう
~$ sudo lxc image alias list images:
めっちゃ出てきますね。。。。
とりあえず、CentOSでgrepしてみましょう。
~$ sudo lxc image alias list images: centos/8
+--------------------------+--------------+-------------+
|          ALIAS           | FINGERPRINT  | DESCRIPTION |
+--------------------------+--------------+-------------+
| centos/8                 | 0706fe017818 |             |
+--------------------------+--------------+-------------+
| centos/8/amd64           | 0706fe017818 |             |
+--------------------------+--------------+-------------+
....
作って、SSH接続設定まで一気にやります。
sudo lxc launch images:centos/8 cent8
sudo lxc exec cent8 bash
[root@cent8] yum -y install openssh-server
[root@cent8] vi /etc/ssh/sshd_config #PasswordAuthenticationをnoに
[root@cent8] service sshd restart
[root@cent8] useradd cent8
[root@cent8] su cent8
[cent8@cent8] cd ~
[cent8@cent8 ~]$ pwd
/home/cent8
[cent8@cent8 ~]$ mkdir .ssh
[cent8@cent8 ~]$ touch .ssh/authorized_keys
[cent8@cent8 ~]$ chmod 700 .ssh
[cent8@cent8 ~]$ chmod 600 .ssh/authorized_keys
[cent8@cent8 ~]$ exit
[root@cent8] exit
sudo lxc file push ~/.ssh/xxx.pub test/home/ubuntu/.ssh/authorized_keys
sudo lxc list
ssh cent8@<cent8のIPアドレス>
[cent8@cent8 ~]$ 

無事動きましたか?

いままで書いた記事の一連の手順がいろいろでてきましたね。

過去記事: 「PCセットアップ:SSH編」

enjoy!!

投げ銭していただける場合は、amazonで15円からできます。宛先はheisakuあっとcomichi.comで。

マイナスは入れられないの?

comments powered by Disqus