用cmake编译了程序,但是由于依赖问题,不好处理,所以用脚本收集了依赖库,并且将运行环境放到docker,对外发布docker的镜像
在编译辑器上收集程序的依赖库
#!/bin/sh
# 可执行程序名
appname="AlarmServer"
# 目标文件夹
dst="./"
# 利用 ldd 提取依赖库的具体路径
liblist=$(ldd $appname | awk '{ if (match($3,"/")){ printf("%s "), $3 } }')
# 目标文件夹的检测
if [ ! -d $dst ];then
mkdir $dst
fi
# 拷贝库文件和可执行程序到目标文件夹
cp $liblist $dst
cp $appname $dst
在编译辑器上安装docker环境
apt-get install -y docker
snap install docker
在docker里面安装ubutun18.04
sudo docker pull ubutun:18.04
在编译机器上开启docker
sudo docker run -i -t ubuntu:18.04
更改 apt-get 下载软件镜像源:换成国内阿里云镜像源
# 备份原镜像软件源
mv /etc/apt/sources.list /etc/apt/sources.list.bak
# 更改镜像为阿里镜像源
echo "deb http://mirrors.aliyun.com/ubuntu/ trusty main multiverse restricted universe" >> /etc/apt/sources.list &&
echo "deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main multiverse restricted universe" >> /etc/apt/sources.list &&
echo "deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main multiverse restricted universe" >> /etc/apt/sources.list &&
echo "deb http://mirrors.aliyun.com/ubuntu/ trusty-security main multiverse restricted universe" >> /etc/apt/sources.list &&
echo "deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main multiverse restricted universe" >> /etc/apt/sources.list &&
echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty main multiverse restricted universe" >> /etc/apt/sources.list &&
echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main multiverse restricted universe" >> /etc/apt/sources.list &&
echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main multiverse restricted universe" >> /etc/apt/sources.list &&
echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main multiverse restricted universe" >> /etc/apt/sources.list &&
echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main multiverse restricted universe" >> /etc/apt/sources.list
更新源
apt-get update
apt-get install wget
将编译辑器中的程序拷贝到 docker ubuntu
root@ubuntu:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
22f7bec41ba2 ubuntu:18.04 "bash" 23 seconds ago Up 21 seconds flamboyant_brown
root@ubuntu:~# docker cp /home/zhouyong/work/AlarmServer/ 22f:/home/zhouyong/AlarmServer
在docker里面设置so依赖路径(我的so统统放到程序当前路径的 所以是./)
export LD_LIBRARY_PATH=./:$LD_LIBRARY_PATH
运行程序-成功!
./AlarmServer
编写docker容器启动脚本
touch /start.sh
vi /start.sh
#!bin/bash
export LD_LIBRARY_PATH=./:$LD_LIBRARY_PATH
/*
这里写你的看门狗程序
*/
chmod +x start.sh
将程序环境配置好的docker容器导出成镜像
sudo docker export 容器ID >镜像名称.tar
我的是 AlarmServer202107021120.tar
将镜像部署到服务器
1.拷贝AlarmServer202107021120.tar到服务器
2.sudo docker import AlarmServer202107021120.targ alarmserver
备注 最后一个参数是别名 需要小写
3.docker 创建一个容器
docker run -itd --net=host --restart=always --name alarmserver alarminstance /start.sh
备注:容器别名需要小写
--net=host代表docker里面的端口全部映射到服务器本机
--restart=always代表docker启动的时候自动加载该容器
/start.sh代表docker容器启动的时候执行的脚本 名称和内容按需要自定