我通常想能不能给客户一个文件,然后客户通过执行这个简单的指令就可以吧,一个服务在本地起来?
这是一种文件即服务的思想,不知道你有没有类似的想法,当我发现https://makeself.io/ ,我觉得它能很好的解决我的问题。
https://makeself.io/
下载
wget https://github.com/megastep/makeself/releases/download/release-2.5.0/makeself-2.5.0.run
安装
sh makeself-2.5.0.run --target /tmp/makeselfcp /tmp/makeself/makeself-header.sh /usr/local/bin/
cp /tmp/makeself/makeself.sh /usr/local/bin/rm -rf /tmp/makeself
Demo
文件夹准备
# pwd
/tmp
# mkdir demo
# cd demo
docker-compose-springboot.yml 准备
version: '3'
services:springboot-toy:image: harbor.x.com/demo/springboot-toy:0.0.1-SNAPSHOTcontainer_name: springboot-toyports:- "8080:8080" # 将主机的8080端口映射到容器的8080端口environment:SPRING_PROFILES_ACTIVE: dev # 设置Spring Boot环境变量,视需要调整# 其他环境变量可以在这里定义JAVA_OPTS: "-Xms2G -Xmx2G -server -Dfile.encoding=UTF-8 -Dsun.net.inetaddr.ttl=15 -XX:+DisableExplicitGC -XX:+UseG1GC -XX:ParallelGCThreads=4 -Dreactor.ipc.netty.workerCount=4" # 设置JVM启动参数,视需要调整
# volumes:
# - /path/to/local/config:/config # 将本地目录挂载到容器内,如果有需要加载配置文件restart: unless-stopped # 自动重启策略
vim springboot.sh 准备
docker compose -f docker-compose-springboot.yml up -d
springboot.sh 添加可执行权限
chmod 777 springboot.shls -ll
total 8
-rw-r--r-- 1 root root docker-compose-springboot.yml
-rwxrwxrwx 1 root root springboot.sh
压缩并制作启动脚本
# cd ..
# pwd
demo# makeself.sh demo install-springboot.sh "spring boot run toy" springboot.sh
Header is 714 lines longAbout to compress 12 KB of data...
Adding files to archive named "install-springboot.sh"...
./docker-compose-springboot.yml
./springboot.sh
CRC: 3910470645
MD5: 5d970cd724ad4e5027def7c26f253b0dSelf-extractable archive "install-springboot.sh" successfully created.
# ls
demo install-springboot.sh
使用启动 install-springboot.sh 启动服务
服务运行的基础环境不在这个考虑范围内
拷贝 install-springboot.sh 脚本到目标机器,赋予该脚本可执行权限,执行该脚本即可启动对应的服务。