【fly 您所在的位置:网站首页 构建docker镜像的方法 【fly

【fly

2023-05-29 20:21| 来源: 网络整理| 查看: 265

前言

本文的原文连接是: blog.csdn.net/freewebsys/…

fly-iot飞凡物联专栏: blog.csdn.net/freewebsys/…

未经博主允许不得转载。

博主CSDN地址是:blog.csdn.net/freewebsys

博主掘金地址是:juejin.cn/user/585379…

博主知乎地址是:www.zhihu.com/people/free…

1,关于Actorcloud项目

ActorCloud 使用手册 ActorCloud 是一个面向低功耗IoT网络,为企业提供一站式平台服务的物联网平台。ActorCloud 在安全可靠的基础上,为设备提供多种协议接入的通信能力,设备数据与消息流管理功能。

平台提供基础设备管理功能以连接、管理海量设备,实现设备的消息通信与数据采集持久化;集成规则引擎与数据可视化管理,灵活开放多种权限级别的管理、控制 API,通过 API 可快速开发上层应用,实现多端接入、设备远程控制。

IoT Hub:为终端上云建立可靠双向连接通道,进行认证鉴权、协议解析与消息路由; 设备管理:终端注册开通与生命周期管理,提供状态、故障、流量的不间断监控; 数据引擎:对获取的终端消息高速持久化、实时解析、规则事务处理与可视化展示; 应用使能:提供终端SDK、APP SDK,开放丰富的 REST API 接口,集成消息推送接口。

在这里插入图片描述

2,使用Docker镜像编译代码

docker 镜像通过基础镜像安装,然后再把

COPY --from=builder /usr/local/lib/python3.6/site-packages /usr/local/lib/python3.6/site-packages

通过这种方式,可以减少相关无用中间库的依赖。减少镜像大小。 把镜像拆分成基础镜像和构建镜像,可以减少重复构建的次数,同时基础镜像用作调试使用:

# 构建后端代码: # docker build --tag actorcloud-server:v3.0.0 . # FROM python:3-alpine 使用最新的slim 版本。 # docker build -f ./DockerfileBase -t python:3.6-slim-server-base . FROM python:3.6-slim COPY docker-entrypoint.sh /usr/bin/ # 设置debian的镜像源 RUN echo "deb http://mirrors.aliyun.com/debian/ bullseye main non-free contrib" > /etc/apt/sources.list && \ echo "deb-src http://mirrors.aliyun.com/debian/ bullseye main non-free contrib" >> /etc/apt/sources.list && \ echo "deb http://mirrors.aliyun.com/debian-security/ bullseye-security main" >> /etc/apt/sources.list && \ echo "deb-src http://mirrors.aliyun.com/debian-security/ bullseye-security main" >> /etc/apt/sources.list && \ echo "deb http://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib" >> /etc/apt/sources.list && \ echo "deb-src http://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib" >> /etc/apt/sources.list && \ echo "deb http://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib" >> /etc/apt/sources.list && \ echo "deb-src http://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib" >> /etc/apt/sources.list # 设置python3的镜像源 RUN mkdir /root/.pip/ && echo "[global]" > /root/.pip/pip.conf && \ echo "index-url = https://mirrors.aliyun.com/pypi/simple/" >> /root/.pip/pip.conf && \ echo "[install]" >> /root/.pip/pip.conf && \ echo "trusted-host=mirrors.aliyun.com" >> /root/.pip/pip.conf # 安装需要的lib库 RUN apt update && apt-get install -y locales libpq-dev python3-dev gcc g++ make && \ apt clean #ENV LC_ALL="zh_CN.UTF-8" LANG="zh_CN.UTF-8" #ENV LC_ALL="en_US.utf-8" LANG="en_US.utf-8" ENV LC_ALL="C.UTF-8" LANG="C.UTF-8" ENV PYTHONPATH="/data" ENV FLASK_APP="/data/manage.py" ADD requirements.txt /root/requirements.txt # 最后安装依赖包,然后删除缓存和 pyc 文件,还可以节省40MB 空间。 RUN cd /root && pip3 install -r requirements.txt && rm -rf /root/.cache/ && \ cd /usr/local/lib/python3.6/site-packages && find ./ -name *.pyc | xargs rm -f

同时删除了pyc的基础镜像:

# 删除 *.pyc 文件 python 3.6-slim-server-base ef9e5b350248 689MB 大小从 689 减少到 652 python 3.6-slim-server-base 7134559c9496 652MB

然后是构建的镜像:

# 构建后端代码: # docker build --tag actorcloud-server:v3.0.0 . # FROM python:3-alpine 使用最新的slim 版本。 # FROM python:3.6-slim-server-base as builder # 拷贝本地文件到目录 COPY . /data # service FROM python:3.6-slim # 直接使用基础镜像然后拷贝 site-packages 安装包即可。 COPY --from=builder /data /data COPY --from=builder /usr/local/lib/python3.6/site-packages /usr/local/lib/python3.6/site-packages COPY --from=builder /usr/local/bin/flask /usr/local/bin/flask COPY --from=builder /data/docker-entrypoint.sh /usr/bin/ WORKDIR /data # 设置python 的环境变量和 fask app文件。 ENV LC_ALL="C.UTF-8" LANG="C.UTF-8" ENV PYTHONPATH="/data" ENV FLASK_APP="/data/manage.py" EXPOSE 7000 7001 ENTRYPOINT ["docker-entrypoint.sh"] CMD ["/bin/sh"]

因为进行数据库初始化的时候需要 flask 命令,所以也一起拷贝过去。 经过优化的版本,删除了 pyc 文件之后镜像大小从:

flyiotadm/fly-iot-backend-python v1.0 800d5b69ef0a 355MB 减小到: flyiotadm/fly-iot-backend-python v1.0 5c8ee7c543d0 318MB

这个只是本地的大小,docker hub 上显示的会更小点。

删除的pyc 文件不影响python 使用应用可以正常启动:

NFO [alembic.env] No changes in schema detected. INFO [alembic.runtime.migration] Context impl PostgresqlImpl. INFO [alembic.runtime.migration] Will assume transactional DDL. ########## project_manage.project_upgrade() database upgrade successfully! ######### execute_type upgrade services table init successfully! resources successfully! Update default roles successfully! dict_code table init successfully! system info table init successfully! lwm2m_object lwm2m_item table init successfully! ########## project_manage.project_upgrade() Command '['which', 'gunicorn']' returned non-zero exit status 1. ############# start python3 ############# * Running on http://0.0.0.0:7000/ (Press CTRL+C to quit) 3,总结

终于找到一个办法减少镜像大小了,直接做基础镜像,然后使用copy 文件site-packages 。 可以最大限度的减少镜像大小,加快镜像下载,同时删除了pyc 文件还可以减少 40 MB 存储。 而且不影响镜像启动。都可以正常运行。

本文的原文连接是: blog.csdn.net/freewebsys/…

在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有