Ubuntu開発環境づくり:lxd/lxc編
Ubuntu上でそのままアプリ開発しても良いのですが、やはりクリーンなコンテナ上でやるのが今のトレンドでしょう。
開発環境は頻繁に立ち上げたり・消したりしないので、docker等ではなく、lxd/lxcを利用することにします。
前回の「SSH編」で、ここまでセットアップしたので、
今回は、こんな感じに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
コンテナ生成
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
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 #指定しない
sudo lxc file push ~/.ssh/xxx.pub test/home/ubuntu/.ssh/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 |
+-----------------+------------------------------------------+---------------+-----------+--------+--------+
~$ 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 | |
+--------------------------+--------------+-------------+
....
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!!