zoukankan      html  css  js  c++  java
  • python项目编译docker镜像

    docker已经安装好,docker的安装,请见另一篇博客:

    https://blog.csdn.net/u013282737/article/details/85246755

    序言:介绍一下需要运行的Python项目的结构:

    平时在PyCharm里面运行该工程,只要直接运行server.py文件即可

    现在希望将该工程,部署到docker里面,使用容器启动:

    步骤如下:

    1:创建一个上传到Linux系统文件夹(文件名任意)
    docker_EF_NFCS是要上传到Linux系统,生成Docker镜像的文件夹

    docker_EF_NFCS文件夹下面有两个东东,

    一个Dockerfile文件(没有后缀名)
    Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。有了 Dockerfile,就可以创建我们所需要的镜像

    Dockerfile文件内容如下:

    #基于的基础镜像
    FROM python:3.7

    #代码添加到code文件夹
    ADD ./EF_NFCS /code

    # 设置code文件夹是工作目录
    WORKDIR /code

    # 安装支持
    RUN pip install -r requirements.txt

    CMD ["python", "/code/package/server.py"]

    --------------------------------------

    最后一条命令,就是说,当启动容器时候,执行server.py程序。

    一个EF_NFCS(任意起的名字)文件夹:包含工程的代码,和运行工程所需要的环境列表
    所以,EF_NFCS文件夹,有两个成员package和requirements.txt

    package就是Python项目的package(整个源码所在目录)直接复制过来的
    requirements.txt生成方法:
    cmd命令,进入到【D:pythonEF_NFCS】目录,也就是工程目录,package的同级目录,

    执行命令:pip freeze > requirements.txt

    就在该目录下生成了一个requirements.txt文件:

    如下图,可能很大,因为没有配合virtualenv ,就把整个环境中的包都列出来,

    没关系,我们可以删除我们此工程中,不需要的组件

    2:上传到linux环境,生成镜像
    2.1:我们将docker_EF_NFCS文件夹,压缩成zip包,上传到Linux虚拟机系统中的某个路径下面

    2.2:解压:

         执行命令:unzip docker_EF_NFCS.zip

    2.3:进入docker_EF_NFCS文件夹:

    2.4:创建镜像:

             执行命令:docker build -t ef_nfcs_img .

             ef_nfcs_img 为创建的镜像名称,. 表示当前目录(docker_EF_NFCS)

    查看镜像是否创建成功:

    执行命令:docker images

    可以看到ef_nfcs_img的镜像,已经存在了

    3:运行镜像,生成并启动容器
    执行命令:docker run -it -p 9060:9060 --name ef_nfcs ef_nfcs_img

    -it:表示交互式终端的容器,非启动后立刻结束的容器

    -p 9060:9060:表示将docker的9060端口,映射到Linux虚拟机的9060端口

                            也就是说,访问Linux虚拟机的9060端口,就是在访问docker容器的9060端口

    --name ef_nfcs:给容器取个名字,嫌麻烦可以省去

    ef_nfcs_img:容器是用哪个镜像启动的(一个容器,必须依赖一个镜像启动)

    和原来用PyCharm启动的效果一致:

    原来访问系统:

    现在访问系统,只要将IP替换成虚拟机的IP:

    这就OK啦

    4:一些实用命令
    退出容器又不关闭容器:Ctrl + P + Q

    比如这种情况:

    直接输入exit 会退出且关闭容器,工程就stop了

    或者Ctrl + C,会报错KeyboardInterrupt,工程就也stop了

    再访问就访问不了了:

    此时,就需要使用命令:docker start 容器ID,去再启动容器后,就可以继续访问工程了,

    使用命令:

    docker exec -it 容器ID /bin/bash

    或者

    docker attach  容器ID,重新进入容器后,可查看程序打印的日志

    但是,如果使用Ctrl + P + Q退出容器,就不会中断工程,等于退出容器后,还可访问容器的工程,

    再进入,也是使用命令:docker attach  容器ID

    ctrl+d 退出容器且关闭, docker ps 查看无

    ctrl+p+q 退出容器但不关闭

    查看安装的docker:yum list installed | grep docker

    查看容器:docker ps -a

    查看镜像:docker images

    删除容器:docker rm 容器ID

    删除镜像:docker rmi 镜像ID/镜像名

    安装rz上传,sz下载的命令:yum -y install lrzsz

    docker inspect 容器ID:返回一个Json文件记录Docker容器的配置和状态信息

    将容器导出到容器的镜像文件 : docker export 容器ID > update.tar

    用容器的镜像文件创建一个新静像:docker import - 镜像名 < update.tar 

    创建完成之后,生成并启动镜像的容器:docker run -it  镜像名

    不行就在后面加一个/bin/bash ,然后进入code的package目录,手动启动程序:python server.py

    比如报错:Error response from daemon: No command specified


     

    镜像保存为镜像文件: docker save -o update1.tar update(update是一个已经存在的镜像)

    从镜像文件加载生成新镜像:docker load < update1.tar

  • 相关阅读:
    java smtp 发送邮件
    Java 数据库连接配置
    kettle基础操作数据同步
    Java上传文件到服务器指定位置
    Java 操作word
    Java 导出Zip文件
    Java 遍历二叉树字符串
    一款基于vue.js 和node构建个人博客项目
    CSS选择器介绍和优先级
    CSS Position属性
  • 原文地址:https://www.cnblogs.com/hanzeng1993/p/11416883.html
Copyright © 2011-2022 走看看