• 【Docker】部署环境


    @[toc] 目录

    本次任务概要

    • 1、 编写dockerfile 然后创建镜像
    • 2、运行容器测试
    • 3、镜像打包及解包
    • 4、docker 设置环境变量

    任务流程具体操作说明

    0、虚拟机环境及初始环境配置

    初始方案

    工作中需要将环境部署到麒麟操作系统上,需要在该操作系统部署相同的环境,以备后续程序可以迁移到新电脑上。 
    初始方案是,在新操作系统上配置一个和原电脑同名的用户名,相同的目录,进入相同的目录配置相同版本的python,及虚拟环境。 
    具体步骤如下
    - 1、在可以上网的虚拟机中,安装好麒麟操作系统,联网安装好 pip、pip3、python3 等。
    [https://www.cnblogs.com/pipci/p/16173352.html](https://www.cnblogs.com/pipci/p/16173352.html)
    
    为了下载速度更快,换源
    在pip 命令末尾加上 '-i 源地址'
    [清华源](https://www.csdn.net/tags/Mtjagg0sOTc1MjgtYmxvZwO0O0OO0O0O.html)
    
    - 2、新建用户 如:admin,切换到该用户登录操作系统
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    // 切换到用户 admin
    su admin
    // 
    
    • 1
    • 2
    • 3
    - 3、在该操作系统下配置虚拟环境 并部署
    
    • 1
    
    // 安装虚拟环境工具 virtualenv 
     pip3 install virtualenv
    // virtualenv 虚拟环境目录创建
    virtualenv /home/admin/admin_env --python=python3
    // 激活
    source /home/admin/admin_jenv/scripts/activate
    // 在该虚拟环境下安装相关库,如
    pip3 install arrow -i 清华源地址
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    1、编写dockerfile 然后创建镜像

    下面为dockerfile.core 的目录

    #FROM    aadebuger/pythonflask
    from python:3.6
    Add src/main/python /code
    
    run pip install iso8601  -i https://pypi.douban.com/simple
    run pip install pingpp  -i https://pypi.douban.com/simple
    run pip install flask  -i  https://pypi.douban.com/simple
    run pip install pymongo -i  https://pypi.douban.com/simple
    run pip install mongoengine -i  https://pypi.douban.com/simple
    run pip install flask_restful -i  https://pypi.douban.com/simple
    run pip install passlib  -i  https://pypi.douban.com/simple
    run pip install qiniu -i https://pypi.douban.com/simple
    run pip install passlib -i https://pypi.douban.com/simple
    run pip install pandas -i https://pypi.douban.com/simple
    run pip install requests -i https://pypi.douban.com/simple
    run pip install redis -i https://pypi.douban.com/simple
    run pip install apscheduler -i https://pypi.douban.com/simple
    run pip install websockets -i https://pypi.douban.com/simple
    run pip install aiohttp -i https://pypi.douban.com/simple
    run pip install jupyter -i https://pypi.douban.com/simple
    run pip install aioredis -i https://pypi.douban.com/simple
    EXPOSE 5000
    workdir /code
    CMD ["python", "jetcloud/jetcloudrest.py","core"]
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    上面程序中的 pip 可以依据安装的环境替换为 pip3
    EXPOSE 为暴露的端口, 部署的demo程序后续可以通过命令行测试

    //命令行使用docker创建镜像
    docker build -t den -f Dockerfile.core .
    
    • 1
    • 2

    在运行该命令的过程中遇到了如下问题:
    1、网络连接不畅通,导致每一个安装包都Retry Retry 直至找不到对应包。
    解决方法链接暂时找不到了,复制Ipv4 连接失败的错误码可找到解决办法,然后搜索相关错误码即可找到解决方法,主要是 修改一下ipv4的配置端口号 = 1 ,然后重启一下,再次执行docker build … 命令即可。

    2、期间可能因为网络不畅通再次出现安装对应包失败的情况,重复执行几次 docker build ,直到最后执行完成时为 successfully 的报告即可。

    3、安装好之后需要进入下一步容器测试,但可能因为demo程序中的一些引用的头文件依赖库太旧而找不到,需要将不再使用的依赖库头文件注释掉,然后重新执行 docker build 程序。

    2、运行容器测试

    docker 创建好镜像之后,运行容器会默认执行dockerfile.core 末尾的[CMD] 代码段之后的命令,如果该命令为demo程序的启动命令,则基于该镜像创建容器之后,会启动该demo程序。

    这一部分可以参考的博客文章

    //docker run 镜像名, 加入参数 -d 后台运行
    docker run den
    //后台运行启动容器  
    docker run -d den
    
    //查看创建的容器列表,包括已经停止的
    docker ps -a 
    
    //查看正在运行的容器列表
    docker ps 
    
    //查看容器的日志 , 最后一个参数为容器的id 
    docker logs 4d3
    
    //删除容器  
    docker stop 容器名/容器ID
    
    //修改相关配置文件
    
    vi 文件名, i 插入,x删除,r替换,:w!强制退出保存。Ctrl+C 退出文本编辑器。 
    
    //检查配置端口
    [启动后暴露端口](https://www.csdn.net/tags/Ntzagg3sMTc4NS1ibG9n.html)
    启动容器的时候通过参数指定
    
    # 暴露特定端口到主机的特定端口
    
    docker run -p 80:80
    
    # 暴露容器的所有端口(exposed 端口)到主机的随机端口
    
    docker run -P
    
    # 添加dockerfile中expose 的端口
    
    docker run -expose
    
    
    wget http://localhost:端口号
    
    想要测试一个接口
    http://localhost:8785/testJob
    
    //显示连接成功即可了。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44

    3、镜像打包及解包

    通过上面的demo程序的镜像程序已经测试通过了,说明各个数据包也安装好了,现在只需要配置一个没有demo程序,只有安装好的数据包的镜像,重新写一个dockerfile.core 文件,将与demo程序有关的部分删去,仅仅保留run pip3 install 的部分, 作为基础镜像,后面需要运行自己的业务程序,则以基础镜像为父镜像,写一个新的xxxfile.core文件,在该文件中引用父镜像的core文件,在头部添加"FROM dockerfile.core", 然后加入对应应用程序需要暴露的端口和,应用程序启动需要的命令,及应用程序需要的安装包即可。

    镜像打包有多种方式,这次只需要用到比较简单的,直接将镜像打包即可。

    使用 save 和 load
    1,查看本机的容器
    这两个命令是通过镜像来保存、加载镜像文件的。首先我们使用 docker images 命令查看本机所有的镜像。
    
    2,保存镜像
    (1)下面使用 docker save 命令根据 ID 将镜像保存成一个文件。
    
    docker save 0fdf2b4c26d3 > hangge_server.tar
    (2)我们还可以同时将多个 image 打包成一个文件,比如下面将镜像库中的 postgres 和 mongo 打包:
    
    docker save -o images.tar postgres:9.6 mongo:3.4
    3,载入镜像
    使用 docker load 命令则可将这个镜像文件载入进来。
    
    docker load < hangge_server.tar
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    4、Docker 设置环境变量

    //ENV key value
    //ENV key1=value1 key2=value
    
    ENV CONFIG /usr/local.config
    
    ENV PYTHON_VERSION 3.5.4
    
    ENV VERSION=1.0 DEBUG=on \
    	NAME="Happy feet"
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在dockerfile.core 中使用

    $NODE_VERSION
    $PYTHON_VERSION
    
    • 1
    • 2

    在docker run 命令中 设置环境变量

    
     - [ ] List item
    
    //docker run --env <key>=<value> <IMAGE-ID>
    docker run -e  VAR1=value1 --env VAR2=value2 ubuntu
    
    docker run --env  VAR1=value1 --env VAR2=value2 ubuntu
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    使用文件作为环境变量:

    
    docker run --env-file .env ubuntu
    
    
    • 1
    • 2
    • 3
    // 其中 .env 文件如下
    //
    VAR1=value1
    VAR2=value2
    USER
    
    • 1
    • 2
    • 3
    • 4
    • 5

    查看环境变量:

    docker inspect <CONTAINER-NAME> OR <CONTAINER-ID>
    
    • 1

    参考资料

  • 相关阅读:
    Win7 搭建NodeJs、Vue2、Vue3,基于 vue-cli 创建建vue工程及相关问题解决思路
    【MySQL】数据库基础
    SpringBoot利用AOP写一个日志管理(Log)
    欧盟:苹果不许限制 iOS 中的浏览器引擎,网友:不怕 Chrome “垄断”市场?
    基于SSM的国学文化网站设计与实现
    【代码随想录】算法训练营 第二十天 第六章 二叉树 Part 6
    select并发服务器实现
    数据库系统原理与应用教程(071)—— MySQL 练习题:操作题 110-120(十五):综合练习
    慢跑是早上跑好,还是晚上跑好?对的时间跑,效果可能还翻倍
    mac jupyter使用现有的python环境
  • 原文地址:https://blog.csdn.net/yinxian9019/article/details/125988117