Parker 轻量级打包工具与容器运行时,一条命令将 php 脚本打包成可执行文件
将工作目录打包成可执行文件,并以轻量级容器的方式直接运行在目标机器上。
示例是一个 c 语言编写的 ip 解析服务 gcc -o ipservice
,其依赖 ipdb 资源文件。
使用 parker 将可执行文件 ipservice 和其依赖的 assert 压缩并打包成新的可执行文件 ipservice-c。
在目标机器上运行 ipservice-c 将会生成一个轻量的容器环境来运行原始的 ipservice 服务和其关联的资源文件。
仓库地址: github.com/weiwenhao/parker
⚙️ 安装
从 github releases 中下载并解压 Parker 安装包。推荐将解压后的 parker
文件夹移动到/usr/local/
下,并将/usr/local/parker/bin
目录加入到系统环境变量。
> parker --version
0.0.1
📦 使用
cd 到工作目录,执行 parker :target
该命令将 :target 连同当前的工作目录一起打包成一个 :target-c
可执行文件,将可执行文件放到目标机器上运行即可。
> cd :workdir && parker :target
示例
上面的可执行文件+资源文件打包是标准使用示例,当然也有一些非标准的使用方式,比如以一个 php 编写的 server 为例子
> tree .
.
├── php # cp /usr/bin/php8.1 ./php
└── server.php
0 directories, 2 files
server.php 内容如下
<?php
echo "hello world";
?>
cd 到工作目录中执行 parker php
,你将会得到一个 php-c
文件,这就是打包好的可执行文件,将其上传到目标机器中执行即可。下面是在目标机器上执行的示例,可以看到此时只有 php-c 文件,而没有 server.php 啦
> > parker php
php-c
├── server.php
└── php
🍻 parker successful
------------------------------------------------------------------------ move php-c to target
> tree .
.
└── php-c
0 directories, 1 file
------------------------------------------------------------------------ run php-c
> ./php-c -S 0.0.0.0:8000 server.php
[Thu Sep 21 14:15:23 2023] PHP 8.1.2-1ubuntu2.14 Development Server (http://0.0.0.0:8000) started
此处 php-c 会将参数传递给 php 进程。
❗️ parker 不解决 php 的动态编译问题。
🚢 运行说明
php-c 是 parker 构建的轻量级容器运行时,并且 php-c 是一个静态编译的可执行文件。其在执行时通过 linux namespace
创建了一个隔离环境,并解压工作目录运行目标 php 。
php-c 将监听 python 主进程的运行,一旦 php 进程停止或异常,php-c 会通过 cgroup 清理容器环境,并清理 php 的所有子进程。
用户像 php-c 中传递的所有参数和信号都会原封不动的传递给 php 进程。
🐧 环境依赖
容器运行时依赖 cgroup 和 namespace,需要 linux 内核版本大于 2.6.24。并且正确挂载了
cgroup。检查文件 /sys/fs/cgroup/cgroup.controllers
或 /sys/fs/cgroup/freezer
中任意一个目录存在即可。
测试环境: ubuntu:22 / ubuntu:20
🛠️ 源码构建
源代码由编程语言 nature 开发,nature 编译器版本需要 >=
0.4.0。安装完成后在源码目录执行 make amd64 && make install
即可安装到 /usr/local/parker 目录下。
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: