0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LXDをDockerfileみたいにビルドできるlxdcli

Last updated at Posted at 2023-09-04

目的

コンテナにおけるメリットの一つは可搬性である。LXDはVMよりは軽量ではあるがDockerコンテナ程軽量ではない。そのため、可搬性が失われつつある。
そこで、Dokcerの様にどこでも同じ様にビルドが出来れば可搬性が上がるのではないかと考えた。

配置場所

本コードはgithubにも配置している

インストール方法

pythonが使える事が前提です!

git clone https://github.com/shoma564/lxdcli.git
cd lxdcli
install lxdcli /usr/local/sbin/
pip3 install pylxd
pip3 install scp
pip3 install paramiko

使い方

lxdcliには3つの命令文がある。

$ lxdcli

Usage: lxdcli COMMAND


Common Commands:
  build    build a lxdfile
  copy     copy containers
  delete   delete containers

build

buildはlxdfileに基づいて、lxdコンテナを作成する。また、引数にlxdfileを指定しなければならない。

root@shoma:/home/shoma/lxdcli/sample # lxdcli build

lxdfileを指定してください


root@shoma:/home/shoma/lxdcli/sample # lxdcli build ./lxdfile
>>>>>>>> lxc launch images:ubuntu/23.10 ubuntu-lamp


Error: Failed instance creation: Failed creating instance record: Add instance info to the database: This "instances" entry already exists
Creating ubuntu-lamp

>>>>>>>> lxc start ubuntu-lamp


Error: The instance is already running

copy

copyは既に存在するLXDコンテナを複数個コピーする。引数には、コンテナ名と、コンテナの数を指定する必要がある。

root@shoma:/home/shoma/lxdcli/sample # lxdcli copy

コピーするコンテナ名を指定してください
root@shoma:/home/shoma/lxdcli/sample # lxdcli copy ubuntu-lamp

コピーするコンテナ数を指定してください
root@shoma:/home/shoma/lxdcli/sample # lxdcli copy ubuntu-lamp 2
>>>>>>>> lxc copy ubuntu-lamp ubuntu-lamp-0
root@shoma:/home/shoma/lxdcli/sample # lxc list
+---------------+---------+------------------------------+-----------------------------------------------+-----------+-----------+
|     NAME      |  STATE  |             IPV4             |                     IPV6                      |   TYPE    | SNAPSHOTS |
+---------------+---------+------------------------------+-----------------------------------------------+-----------+-----------+
| alma-lamp     | RUNNING | 10.107.73.31 (eth0)          | fd42:d70a:2761:a81b:216:3eff:fee3:7476 (eth0) | CONTAINER | 2         |
+---------------+---------+------------------------------+-----------------------------------------------+-----------+-----------+
| ubuntu-lamp   | RUNNING | 172.19.0.1 (br-1b82b9c5b955) | fd42:d70a:2761:a81b:216:3eff:fe9d:ab36 (eth0) | CONTAINER | 0         |
|               |         | 172.17.0.1 (docker0)         |                                               |           |           |
|               |         | 10.107.73.158 (eth0)         |                                               |           |           |
+---------------+---------+------------------------------+-----------------------------------------------+-----------+-----------+
| ubuntu-lamp-0 | RUNNING | 172.19.0.1 (br-1b82b9c5b955) | fd42:d70a:2761:a81b:216:3eff:fe6e:a670 (eth0) | CONTAINER | 0         |
|               |         | 172.17.0.1 (docker0)         |                                               |           |           |
|               |         | 10.107.73.112 (eth0)         |                                               |           |           |
+---------------+---------+------------------------------+-----------------------------------------------+-----------+-----------+
| ubuntu-lamp-1 | RUNNING | 172.19.0.1 (br-1b82b9c5b955) | fd42:d70a:2761:a81b:216:3eff:fe28:393a (eth0) | CONTAINER | 0         |
|               |         | 172.17.0.1 (docker0)         |                                               |           |           |
|               |         | 10.107.73.79 (eth0)          |                                               |           |           |
+---------------+---------+------------------------------+-----------------------------------------------+-----------+-----------+

delete

deleteは主にcopyで生成されたコンテナを削除するのに使用する。引数にコンテナ名とコンテナの数を指定する必要がある。

root@shoma:/home/shoma/lxdcli/sample # lxdcli delete

削除するコンテナ名を指定してください
root@shoma:/home/shoma/lxdcli/sample # lxdcli delete ubuntu-lamp

削除するコンテナ数を指定してください
root@shoma:/home/shoma/lxdcli/sample # lxdcli delete ubuntu-lamp 3
>>>>>>>> lxc delete ubuntu-lamp-0 --force
+-------------+---------+------------------------------+-----------------------------------------------+-----------+-----------+
|    NAME     |  STATE  |             IPV4             |                     IPV6                      |   TYPE    | SNAPSHOTS |
+-------------+---------+------------------------------+-----------------------------------------------+-----------+-----------+
| alma-lamp   | RUNNING | 10.107.73.31 (eth0)          | fd42:d70a:2761:a81b:216:3eff:fee3:7476 (eth0) | CONTAINER | 2         |
+-------------+---------+------------------------------+-----------------------------------------------+-----------+-----------+
| ubuntu-lamp | RUNNING | 172.19.0.1 (br-1b82b9c5b955) | fd42:d70a:2761:a81b:216:3eff:fe9d:ab36 (eth0) | CONTAINER | 0         |
|             |         | 172.17.0.1 (docker0)         |                                               |           |           |
|             |         | 10.107.73.158 (eth0)         |                                               |           |           |
+-------------+---------+------------------------------+-----------------------------------------------+-----------+-----------+

LXDfileの書き方

命令文は以下の通り

  1. CONTAINERNAME:コンテナ名(必須)
  2. FROM : コンテナイメージ名(必須)
  3. RUN : コンテナ内で実行するコマンド
  4. ADD : コンテナにファイルを追加する
  5. NUMBER : コンテナ数
  6. PORT : コンテナのポートを外部に公開する(ホスト側のIP ホスト側のポート コンテナポート proxy名)

LXDfileにはCONTAINERNAMEが必須の命令文である。また、CONTAINERNAMEFROMの前に記述をしなければならない。また、NUMBERは必須項目ではないが、書く場合はPORTの前に配置する必要がある。

CONTAINERNAME ubuntu-lamp
FROM ubuntu/23.10

RUN apt -y update
RUN apt -y install docker.io docker-compose
ADD ./docker-compose.yml /etc/
RUN docker-compose -f /etc/docker-compose.yml up -d
RUN docker ps

NUMBER 2
PORT PORT 192.168.219.40 80 80 proxy-lamp
0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?