带有Systemd nspawn的容器

nspawn的Python项目详细描述


n黎明

Travis StatusAppvey StatusPackage VersionPython Versions

带有^{}

的容器

功能:

安装

安装python包:

sudo pip install nspawn

生成脚本

要构建映像,请提供并调用可执行的build.py脚本,例如:

对于可用的生成选项,请运行./build.py --help

设置脚本

要设置计算机,请提供并调用可执行的setup.py脚本,例如:

有关可用的设置选项,请运行./setup.py --help

机器服务

要查看已设置、生成和正在运行的计算机服务,请运行:

machinectl
systemctl status <machine>
cat /etc/systemd/system/<machine>.service

例如,演示生成的服务:

机器资源

机器文件和文件夹的位置:

/etc/systemd/system/<machine>.service
/var/lib/machines/<machine>
/var/lib/nspawn/runtime/<machine>

机器管理

要与实时计算机交互:

  • 对于在machinectl
  • 注册的计算机
  • 对于具有systemdinit的机器,例如archlinux
# start interactive shell:
sudo machinectl shell <machine> 
# invoke command with args:
sudo machinectl shell <machine> /bin/command arg1 arg2 ... 
  • 对于未在machinectl
  • 注册的计算机
  • 对于没有systemdinit的机器,例如alpine linux
# start interactive shell:
./setup.py --action=nsenter 
  • 或者,使用package providednspawn-enter命令:
# start interactive shell:
nspawn-enter <machine> 
# invoke command with args:
nspawn-enter <machine> "command arg1 arg2 ..." 

配置

中描述了可用的配置选项 config.ini 文件。

使用config/path_list选项控制配置覆盖文件列表。

图像服务器

包附带设置命令nspawn-hatch 它可以构建和设置本地http/https图像服务器。

# review available services:
nspawn-hatch list
# provision image server service:
nspawn-hatch update image-server
# verify image server machine status:
machinectl

图像服务器设置:

建立DSL

build dsl用于build.py,由from nspawn.build import *激活,并提供关键字:

    'TOOL',
    'IMAGE',
    'PULL',
    'EXEC',
    'WITH',
    'FETCH',
    'COPY',
    'CAST',
    'RUN',
    'SH',
    'PUSH',

设置DSL

setup dsl用于setup.py,由from nspawn.setup import *激活,并提供关键字:

    'TOOL',
    'IMAGE',
    'MACHINE',
    'WITH',
    'EXEC',
    'COPY',
    'CAST',
    'RUN',
    'SH',

DSL语法

TOOL

公开生成/设置实用程序功能:

TOOL.<function>(...)

IMAGE()

声明图像标识:

IMAGE("http://host/path/package.tar.gz")
IMAGE(url="http://host/path/package.tar.gz")

PULL()

设置依赖关系映像:

PULL("http://host/path/package.tar.gz")
PULL(url="http://host/path/package.tar.gz")

EXEC()

声明图像入口点可执行文件,即COMMAND [ARGS...]

EXEC(['/usr/bin/env', 'sh', '-c', 'echo "hello-kitty"'])
EXEC(command=['/usr/bin/env', 'sh', '-c', 'echo "hello-kitty"'])

WITH()

使用nspawn容器设置自定义机器功能:

WITH(
    SettingName1='setting 1 value a',
    SettingName2='setting 2 value b',
    ...,
)

COPY()

复制本地资源:

  • build.py中使用时:目标位于图像中
  • setup.py中使用时:target在主机上
COPY("/etc")
COPY(path="/etc")
COPY(source="/root/input.md", target="/root/output.md")

CAST()

模板本地资源:

  • build.py中使用时:目标位于图像中
  • setup.py中使用时:target在主机上
CAST("/root/readme.md", variable="template varialbe", ...)
CAST(path="/root/readme.md", variable="template varialbe", ...)
CAST(source="/root/input.md", target="/root/output.md", variable="template varialbe", ...)

模板使用python/jinja 格式,即:

this template variable will be substituted: {{variable}}

FETCH()

下载并提取远程资源:

FETCH(
   url="http://server/package.tar.gz", # url for remote resource
   source="package-path", # relative path inside the package extract
   target="/opt/resource", # absolute path inside the build image target
)

RUN()

调用命令,目标取决于上下文:

  • build.py中使用时:在图像内部调用
  • setup.py中使用时:在主机上调用
RUN(['/usr/bin/env', 'ls', '-las'])
RUN(command=['/usr/bin/env', 'ls', '-las'])

SH()

调用shell脚本,目标取决于上下文:

  • build.py中使用时:在图像内部调用
  • setup.py中使用时:在主机上调用
SH("ls -las")
SH(script="ls -las")

注意:

  • SH(script)相当于RUN(command=['/usr/bin/env', 'sh', '-c', script])

PUSH()

将图像结果发布到声明的url:

PUSH()

MACHINE()

声明机器服务:

MACHINE('machine-name')
MACHINE(name='machine-name')
MACHINE(name='machine-name', template='/path/to/service/template/machine.service')

基于包提供的默认值设计自定义服务模板,例如乐:

  • {A25}

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java find安全漏洞不扫描groovy文件   java有没有办法将Jacoco设置为IntelliJ中的默认代码覆盖工具?   有人能帮我吗?我没有得到输出   java从另一个子类中不可用的超类调用子类方法   带undertow servlet容器的springboot应用程序中出现java“无通用密码套件”错误   java Listview:无法解析符号“setAdapter”   PostgreSQL行更改通知java程序,反之亦然   用于密码验证的java正则表达式第一个和最后一个字母不能有符号   java通过SNMP4J连接两台计算机   java如何使用sqlite部署javafx应用程序?   如何修复javax。邮政通过GMail使用SMTP时的MessaginException?   Selenium弹出窗口的java问题   Java主教棋盘算法   当抛出异常时,返回CompletableFuture的java方法执行两次