我通常想能不能給客戶一個文件,然后客戶通過執行這個簡單的指令就可以吧,一個服務在本地起來?
這是一種文件即服務的思想,不知道你有沒有類似的想法,當我發現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 腳本到目標機器,賦予該腳本可執行權限,執行該腳本即可啟動對應的服務。