利用docker打包和安装ubuntu18.05程序

用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容器启动的时候执行的脚本 名称和内容按需要自定


版权声明:本文为zhouyongku原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。