C/C++开发,如何将自己做好的服务进行容器化部署

本文介绍如何将一个简单的服务程序及其依赖打包成Docker容器,并使用docker-compose进行部署。包括创建Dockerfile、配置docker-compose.yml文件、构建容器镜像和服务部署流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、业务假设

二、创建能装载自己服务或app的容器

三、服务容器化部署

四、部署过程


一、业务假设

        现在假设有一个我们编译好的服务程序pyfree_svr,该服务程序可以运行在centos7x系统上,运行时依赖一个额外的动态库libpyfree.so,需要加载一个配置文件svrconf.ini文件,需要对外开放一个10001、10002端口,便于客户端连接进来。     

        服务程序及库文件目录结构如下:

mysvr
    pyfree_svr       #服务程序
    svrconf.ini      #服务配置文件
    pyfree_svr.sh    #服务运行脚本
pyfree_lib
    libpyfree.so.1   #服务程序依赖的三方动态库
    ln_install.sh    #服务程序依赖动态库部署运行脚本

  其中,pyfree_svr.sh是服务程序启动脚本,很简单:

#!/bin/sh
./pyfree_svr

二、创建能装载自己服务或app的容器

        基于centos7创建一个部署pyfree_svr服务的容器(centos:pyfree),其配置文件Dockerfile如下:

FROM       centos:7
LABEL	   maintainer="pyXXX@163.com" \
           version="v1.01" \
           release="2022-08-15" 

RUN        /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
COPY	   pyfree_lib /usr/lib
RUN		   /bin/bash /usr/lib/ln_install.sh
EXPOSE     10001/tcp 10002/tcp

        COPY命令是将依赖动态库拷贝进容器,并接着调用RUN命令调用脚本进行动态库配置使其生效。

ln_install.sh的配置如下:

#注意是先拷贝到容器,再进行连接,因此文件路径是基于容器内的路径
ln -sf /usr/lib/libpyfree.so.1 /usr/lib/libpyfree.so
#重新加载动态库,使其生效
ldconfig

三、服务容器化部署

将基于前面创建的centos:pyfree容器进行融合化部署,先配置其docker-compose.yml文件:

version: "3.6"
services:
  pyfreesvr: 
     image: centos:pyfree
     container_name: pyfreesvr
     working_dir: /mysvr
     environment: 
       - PORT=998 
     ports: 
       - "10001:10001"
       - "10088:10002"
     stdin_open: true 
     networks: 
        pyfree:
            ipv4_address: 172.100.100.2
     tty: true
     privileged: true 
     volumes: 
       - ./mysvr:/mysvr
     entrypoint: 
       - /bin/bash 
       - pyfree_svr.sh
networks:
  pyfree:
     driver: bridge 
     ipam:
       driver: default
       config:
          - subnet: 172.100.100.0/16

        配置文件中,指定是基于centos:pyfree容器,将服务程序所在目录./mysvr挂载到容器内的/mysvr目录下,配置桥接网络为pyfree,并开放了10001、10002端口,容器IP地址是172.100.100.2。并启动命令工具bash,调用pyfree_svr.sh脚本运行服务。

        另外将配置服务部署的安装脚本及卸载脚本

        build.sh:

#!/bin/sh
#创建容器镜像
docker build -t centos:pyfree .
#服务部署,创建容器实例
docker-compose up

remove.sh:

#!/bin/sh
#停止及删除容器实例
docker rm -f $(docker ps -aq)
#删除容器
docker rmi centos:pyfree
#删除网络
docker network prune

四、部署过程

整个案例目录结构如下:

docker_test
    mysvr
        pyfree_svr       #服务程序
        svrconf.ini      #服务配置文件
        pyfree_svr.sh    #服务运行脚本
    pyfree_lib
        libpyfree.so.1   #服务程序依赖的三方动态库
        ln_install.sh    #服务程序依赖动态库部署运行脚本
    docker-compose.yml
    Dockerfile
    build.sh
    remove.sh

        本测试demo时在win10系统(主机)下,通过vmware安装了centos7服务器(虚拟机,非桌面版),并在centos7虚拟机中安装了docker以及docker-compose引擎,将在win10下的案例目录映射到centos7虚拟机的/mnt/hfgs下。

        部署:
        (1)运行./build.sh即可,可以提前加载镜像,docker pull centos:7,否则在运行build.sh脚本时,如果没预期拉去镜像centos:7,会先拉取centos:7镜像,命令语句“docker build -t centos:pyfree .”加载会较慢,是网络情况而定
        (2)运行脚本中的"docker-compose up"命令语句会构建容器实例、网桥,并运行服务
        (3)运行./remove.sh,删除容器实例、镜像centos:pyfree及网桥
        (4)启动或停止容器docker start(stop) pyfreesvr(容器实例名)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

py_free-物联智能

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值