python项目以docker形式打包部署详细流程,


目录
  • 一、前言
  • 二、docker安装
    • 1. CentOS安装Docker的先决条件
      • 1.1 确认自己的系统版本
      • 1.2 启用centos-extras存储库
    • 2. 卸载旧版本(如果之前安装过的话)
      • 3. 选择安装方式
        • 4. 安装流程
          • 4.1 设置仓库
          • 4.2 选择版本安装
        • 5. 启动运行docker
          • 6. 卸载 Docker 引擎
          • 三、python项目Dockerfile编写。
            • 1. 选择基础镜像
              • 2. 设置工作目录
                • 3. 复制项目文件到容器中
                  • 4. 安装 tzdata(可选)
                    • 5. 设置容器时区
                      • 6. 安装 Python 依赖
                        • 7. 暴露端口
                          • 8. 设置容器启动时运行的命令
                          • 四、docker镜像打包
                            • 五、根据镜像启动容器
                              • docker 容器相关常用命令
                                • 1. 停止容器
                                  • 2. 重启容器
                                  • 总结 

                                    一、前言

                                    在很久很久以前,我已经听过Docker的大名,当时服务着急上线虽然考虑过用Docker来部署我的服务,但是因为赶期的原因放弃了。

                                    这两天因为华为云服务器到期,而且阿里云服务器优惠力度特别大的原因,我要把华为云服务器里的工程迁移到阿里云。

                                    迁移的过程中,大量的时间精力浪费在了重装python,加载依赖,迁移项目,配置端口等环境配置的工作上。

                                    我在想,如果当时用了Docker部署,我至于受这气?

                                    于是,一不做二不休,就花了点时间把部署以docker的形式部署了。

                                    在部署前,我以为是一件多么苦难的事,结果,操作后才发现,原来最难的一步是跨出第一步。

                                    二、docker安装

                                    还好,在之前我半途而废的过程中,我把经验已经积累下来了。

                                    需要注意的是Docker桌面目前仅支持以下几个操作系统

                                    我的服务器是CentOS,所以这个桌面应该是用不了了,但是影响应该不大。因为Docker引擎目前支持绝大多数操作系统。

                                    1. CentOS安装Docker的先决条件

                                    1.1 确认自己的系统版本

                                    如果需要安装Docker引擎,需要的系统版本必须是7、8、9的版本。并且官方建议Linux内核为3.10及以上。

                                    lsb_release -a

                                    版本为7.9,符合条件。

                                    uname -r

                                    内核为3.10。符合条件。

                                    1.2 启用centos-extras存储库

                                    官方说明,该存储库默认情况下处于启用状态,但是如果你之前禁用过它,则需要重新启用它。

                                    yum repolist enabled

                                    可以看到,extras存储库已启用

                                    如果你之前不巧,使用过以下命令或者其他命令禁用过extras存储库:

                                    sudo vi /etc/yum.repos.d/CentOS-Base.repo

                                    enabled为1 表示正在启用,为0表示已被禁用。

                                    在进行更改后,建议清除YUM缓存,以确保使用最新的仓库配置。

                                    sudo yum clean all

                                    温馨提示,不要随便禁用库。

                                    2. 卸载旧版本(如果之前安装过的话)

                                    sudo yum remove docker \
                                                      docker-client \
                                                      docker-client-latest \
                                                      docker-common \
                                                      docker-latest \
                                                      docker-latest-logrotate \
                                                      docker-logrotate \
                                                      docker-engine

                                    因为,我没安装过旧版Docker,所以这里显示没有删除任何东西。

                                    3. 选择安装方式

                                    • 官方推荐通过设置Docke存储库的方式安装,便于安装和升级。
                                    • 也可以在官方下载 RPM 包,手动安装,然后管理纯靠手动升级。适合安装在无法访问外网的内网系统上。
                                    • 在测试和开发环境中,您可以使用自动化的便捷脚本来安装 Docker。

                                    这边使用官方推荐的存储库安装。

                                    4. 安装流程

                                    4.1 设置仓库

                                    首先需要安装一个工具包yum-util,它提供了yum-config-manager功能:

                                    sudo yum install -y yum-utils

                                    这个是官网的中央仓库,国内速度会有一些慢。

                                    sudo yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo

                                    国内的朋友推荐再加一个阿里云的镜像仓库,体验会好很多。

                                    sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

                                    4.2 选择版本安装

                                    官网给出了直接安装最新版本和安装指定版本的指令。

                                    • 直接安装最新版本

                                    需要一起安装 Docker Engine、containerd 和 Docker Compose

                                    sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
                                    • 选择指定版本安装

                                    首先列出所有版本

                                    yum list docker-ce --showduplicates | sort -r

                                    框住的就是版本号,选择指定版本,然后使用下面的命令进行安装。

                                    sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io docker-buildx-plugin docker-compose-plugin

                                    <VERSION_STRING>部分换为指定版本号即可。

                                    5. 启动运行docker

                                    1. 启动 Docker。

                                    sudo systemctl start docker

                                    2. 通过运行映像来验证 Docker 引擎安装是否成功。hello-world

                                    sudo docker run hello-world

                                    6. 卸载 Docker 引擎

                                    1. 卸载 Docker Engine、CLI、containerd 和 Docker Compose 包:

                                    sudo yum remove docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras

                                    2. 主机上的image、containerd或自定义配置文件不会自动删除,需要手动执行。

                                    sudo rm -rf /var/lib/docker
                                    sudo rm -rf /var/lib/containerd

                                    三、python项目Dockerfile编写。

                                    提前声明,Dockerfile虽然看起来有点复杂,但是其实还是挺容易理清的。可以先参考下我这个工程的Dockerfile,其实并不复杂。

                                    FROM python:3.6
                                    
                                    # 设置工作目录
                                    WORKDIR /app
                                    
                                    # 复制项目文件到容器中
                                    COPY . /app
                                    
                                    # 如果你的镜像中没有 tzdata,则需要安装它
                                    # 注意:python:3.6 官方镜像可能已包含 tzdata
                                    # RUN apt-get update && apt-get install -y tzdata && rm -rf /var/lib/apt/lists/*
                                    
                                    # 设置时区为东八区(中国标准时间)
                                    RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' > /etc/timezone
                                    
                                    # 安装依赖
                                    RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
                                    
                                    # 暴露端口
                                    EXPOSE 7010
                                    
                                    # 设置容器启动时运行的命令
                                    CMD ["python3", "api.py"]

                                    1. 选择基础镜像

                                    FROM python:3.6
                                    • 作用:指定基础镜像为 python:3.6。
                                    • 注意事项:我这里是python项目,选择的是python的镜像,如果是nginx或者java项目,需要设置对应的景象。

                                    2. 设置工作目录

                                    WORKDIR /app
                                    • 作用:设置工作目录为 /app。
                                    • 注意事项:这个目录的设置就见仁见智,有的喜欢用project,有的喜欢什么都不设,看公司规范和个人习惯。我们只需要确保后续的文件操作都是基于这个工作目录的。

                                    3. 复制项目文件到容器中

                                    COPY . /app
                                    • 作用:将当前上下文中的所有文件和目录复制到镜像的 /app 目录下。这里直接用当前目录就行。
                                    • 注意事项:可以使用 .dockerignore 文件排除不需要的文件和目录,以减少镜像大小。规则和gitignore一个路数。需要确保的是敏感文件(如密钥、密码等)不会被复制到镜像中。

                                    4. 安装 tzdata(可选)

                                    # RUN apt-get update && apt-get install -y tzdata && rm -rf /var/lib/apt/lists/*
                                    • 作用:安装 tzdata 以确保时区设置能够正确工作。(可选)
                                    • 注意事项:如果基础镜像已经包含 tzdata,则可以省略此步骤。

                                    5. 设置容器时区

                                    RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' > /etc/timezone
                                    • 作用:设置容器的时区为东八区(中国标准时间)。这个是docker老生常谈的问题,他的时区需要自己更正。
                                    • 注意事项:确保应用或服务需要这个特定的时区设置。国内的一般应该都需要,不然打个日志都不确定是啥时候的了。

                                    6. 安装 Python 依赖

                                    RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
                                    • 作用:下载需要的第三方库。
                                    • 注意事项:这个requirements.txt,直接用pipreqs生成就行。需要注意的是要挂个国内的 PyPI 镜像来安装 Python 依赖,不然依赖下载太慢了。我这里是使用清华大学的镜像。

                                    7. 暴露端口

                                    EXPOSE 7010
                                    • 作用:声明容器在运行时应该监听 7010 端口。
                                    • 注意事项:没啥需要注意的,自己设置需要的端口就行。

                                    8. 设置容器启动时运行的命令

                                    CMD ["python3", "api.py"]
                                    • 作用:设置容器启动时默认执行的命令。
                                    • 注意事项:根据个人需要设置就行。如果你的应用需要特定的环境变量或配置,可以在 CMD 之前使用 ENV 指令来设置它们。

                                    四、docker镜像打包

                                    编写完dockerfile,我们一般喜欢放在需要打包的地方的根路径,然后直接运行

                                    docker build -t opendrop . 
                                    • pythondemo改成自己想要的镜像的名字。

                                    运行之后,docker会自动完成dockerfile里面的每一个步骤。打包完成后,我们就可以看到images。

                                    大家直接docker images 即可看到。

                                    如果要重新打包,需要先删除原来的镜像,执行以下命令即可。

                                    docker rmi a9765c2d0703(镜像id)

                                    操作如下:

                                    五、根据镜像启动容器

                                    根据镜像创建容器执行以下命令

                                    `docker run -d -p 要映射的本机端口:docker中项目运行的端口 镜像名称`

                                    我这里端口都是7010,你们根据需要自行配置。

                                    docker run  -d -p 7010:7010 opendrop

                                    然后用docker ps就能看到执行的容器了。

                                    如果想看项目日志,可以执行以下命令进入docker查看。

                                    docker exec -it 3843cbd6fb40(容器id) /bin/bash

                                    • 退出时使用 ctrl + D 退出

                                    docker 容器相关常用命令

                                    1. 停止容器

                                    docker stop 【容器id】
                                    • 停止一个或多个正在运行的容器。

                                    2. 重启容器

                                    docker restart 【容器id】
                                    • 重启一个或多个容器。

                                    3. 删除容器

                                    docker rm 【容器id】
                                    • 删除一个或多个容器。参数-f:强制删除容器,即使容器正在运行。

                                    4. 导出/导入容器

                                    docker export 【容器id】 > file.tar
                                    docker import file.tar 【镜像名字】
                                    • 将容器导出为tar文件;从tar文件导入容器为镜像

                                    总结 

                                    到此这篇关于python项目以docker形式打包部署的文章就介绍到这了,更多相关python以docker打包部署内容请搜索3672js教程以前的文章或继续浏览下面的相关文章希望大家以后多多支持3672js教程!

                                    您可能感兴趣的文章:
                                    • Docker 打包python的命令详解
                                    • docker python如何实现打包的方法
                                    • docker打包Python环境的过程详解
                                    • 一文教会你用Docker打包Python运行环境
                                    • 详解如何使用Docker打包Python项目

                                    评论关闭