docker镜像制作

docker 镜像制作
以制作openeuler:22.03为例
  • docker pull openeuler/openeuler:22.03拉取指定版本镜像,如果失败需要设置docker的源

  • 现在openeuler:22.03中需要内置一些rpm,python3.10.9、以及whl

    docker run -itd --name openeuler-22.03 -v /tmp:/tmp openeuler/openeuler:22.03

    docker exec -it openeuler-22.03 bash

    宿主机执行:

    cd /tmp

    yum -y install rpm_name

    宿主机下载pthon3.10.9源码包,依赖rpm包

    容器中执行cd /tmp;rpm -Uvh --nodeps $(ls *.rpm) ;源码编译python3.10.9

  • 宿主机

    生成新的镜像openeuler:22.03-mod

    docker commit -a “user and email” -m “commit msg” openeuler-22.03 openeuler:22.03-mod

  • 项目打包到openeuler:22.03-mod中

    项目app中可能需要新的whl包,rpm包,需要事先下载到对应pip、rpm目录

    # 启动容器
    docker run --network host -itd --name app \
     -v $(pwd)/pip:/pip \
     -v $(pwd)/rpm:/rpm \
     -w /app \ # 容器内部程序的工作目录
     openeuler:22.03-mod \
     /bin/bash || exit -1
    
    
    # 进入容器并执行依赖安装
    docker exec -it app /bin/bash -c 'cd /pip;python3 -m pip install --upgrade --no-deps $(ls);cd /rpm;rpm -Uvh --nodeps $(ls)' || exit -1
    
    # 将项目app-master拷贝到容器/app目录
    docker cp app-master app:/app || exit -1
    
    # 导出容器为app.rootfs.tar
    docker container export -o app.rootfs.tar app || exit -1
    
    # 生成镜像app:0.1
    docker image import app.rootfs.tar app:0.1 || exit -1
    
    # 删除文件
    rm app.rootfs.tar || exit -1
    # 停止删除app容器
    docker stop app || exit -1
    docker rm app || exit -1
    
  • 一般app项目都需要有个监控程序,用于监控进程挂掉之后,重新启动

#!/usr/bin/python3
import subprocess
import time
def get_process_id(process_nm):
    pid = subprocess.run(["ps -ef | grep -w '{}' | grep -v grep | awk '{}'".format(process_nm, '{print $2}')], shell=True)
    
while True:
    pid = get_process_id("start_app")
    print('pid:', pid)
    if not pid:
        subprocess.run(['python3 start_app.py'], shell=True)
    time.sleep(5)

  • 生成docker-compose.yaml文件,用于拉取容器

    version: '3'
    services:
      app:
        container_name: app
        image: app:0.1
        network_mode: host       # 使用主机网络
        privileged: true         # 启用特权模式
        working_dir: /app/app-master
        command: ["python3", "run_app.py"]
    
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值