• Docker的基本使用(部署python项目)


    一、准备项目

    我写的是一个爬取某ppt网站的代码,就一个ppt1.py是爬虫,然后,ppts是存放下载的ppt的

    二、准备requirement.txt文件

    这个是需要哪些python库支持,写好

     

    三、准备Dockerfile文件

    需要一个名为Dockerfile的文件,没有后缀,这个创建docker镜像的配置文件

    复制代码
    FROM python:3.6
    ENV PATH /usr/local/bin:$PATH
    ADD . /code
    WORKDIR /code
    RUN pip install -r requirements.txt
    CMD python ppt1.py
    复制代码

    FROM:需要什么环境

    ENV:修改path,即增加/usr/local/bin这个环境变量

    ADD:将本地代码放到虚拟容器中,它有两个参数,第一个是 . ,代表本地当前路径;第二个参数是/code,代表虚拟容器中的路径,即将本地项目的所有内容放到虚拟容器的/code目录下,以便在虚拟容器中运行代码

    WORKDIR:指定工作目录,也就是刚才的/code,在虚拟容器中的目录

    RUN:执行某些环境准备工作,docker容器中只有python3环境,还需要python的库,这里安装那些库

    CMD:运行项目的命令行命令

    四、开始创建镜像

     docker build -t pptdemo:latest .

    这样应该就没错了,最后报了个警告,有时间去了解了解...

    复制代码
    $ docker build -t pptdemo:latest .
    Sending build context to Docker daemon  23.55kB
    Step 1/6 : FROM python:3.6
     ---> 55fb8aca33df
    Step 2/6 : ENV PATH /usr/local/bin:$PATH
     ---> Using cache
     ---> 97e82715b8ee
    Step 3/6 : ADD . /code
     ---> 9d2d253015ee
    Step 4/6 : WORKDIR /code
    Removing intermediate container 25ccdad420a0
     ---> ec462b723417
    Step 5/6 : RUN pip install -r requirements.txt
     ---> Running in 83e607d0bc06
    Collecting requests (from -r requirements.txt (line 1))
      Downloading https://files.pythonhosted.org/packages/7d/e3/20f3d364d6c8e5d2353c72a67778eb189176f08e873c9900e10c0287b84b/requests-2.21.0-py2.py3-none-any.whl (57kB)
    Collecting pyquery (from -r requirements.txt (line 2))
      Downloading https://files.pythonhosted.org/packages/09/c7/ce8c9c37ab8ff8337faad3335c088d60bed4a35a4bed33a64f0e64fbcf29/pyquery-1.4.0-py2.py3-none-any.whl
    Collecting idna<2.9,>=2.5 (from requests->-r requirements.txt (line 1))
      Downloading https://files.pythonhosted.org/packages/14/2c/cd551d81dbe15200be1cf41cd03869a46fe7226e7450af7a6545bfc474c9/idna-2.8-py2.py3-none-any.whl (58kB)
    Collecting chardet<3.1.0,>=3.0.2 (from requests->-r requirements.txt (line 1))
      Downloading https://files.pythonhosted.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl (133kB)
    Collecting certifi>=2017.4.17 (from requests->-r requirements.txt (line 1))
      Downloading https://files.pythonhosted.org/packages/9f/e0/accfc1b56b57e9750eba272e24c4dddeac86852c2bebd1236674d7887e8a/certifi-2018.11.29-py2.py3-none-any.whl (154kB)
    Collecting urllib3<1.25,>=1.21.1 (from requests->-r requirements.txt (line 1))
      Downloading https://files.pythonhosted.org/packages/62/00/ee1d7de624db8ba7090d1226aebefab96a2c71cd5cfa7629d6ad3f61b79e/urllib3-1.24.1-py2.py3-none-any.whl (118kB)
    Collecting lxml>=2.1 (from pyquery->-r requirements.txt (line 2))
      Downloading https://files.pythonhosted.org/packages/5d/d4/e81be10be160a6323cf5f29f1eabc9693080cb16780a2e19c96091ee37ee/lxml-4.3.0-cp36-cp36m-manylinux1_x86_64.whl (5.7MB)
    Collecting cssselect>0.7.9 (from pyquery->-r requirements.txt (line 2))
      Downloading https://files.pythonhosted.org/packages/7b/44/25b7283e50585f0b4156960691d951b05d061abf4a714078393e51929b30/cssselect-1.0.3-py2.py3-none-any.whl
    Installing collected packages: idna, chardet, certifi, urllib3, requests, lxml, cssselect, pyquery
    Successfully installed certifi-2018.11.29 chardet-3.0.4 cssselect-1.0.3 idna-2.8 lxml-4.3.0 pyquery-1.4.0 requests-2.21.0 urllib3-1.24.1
    Removing intermediate container 83e607d0bc06
     ---> 22244632da67
    Step 6/6 : CMD python ppt1.py
     ---> Running in c5ff77a9f680
    Removing intermediate container c5ff77a9f680
     ---> 07cfec786f1a
    Successfully built 07cfec786f1a
    Successfully tagged pptdemo:latest
    SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.
    复制代码

    继续输入代码查看是否创建成功

    五、运行

    docker run pptdemo

    我成功了!

    顺便一提,如果我们需要暴露接口,比如搭了一个网站,需要暴露端口,因为暴露的是容器的端口,需要访问宿主机能访问到,所以需要做端口映射

    可以参考:https://www.cnblogs.com/jie-fang/p/7920863.html

    docker run -d -p 8080:80 nginx

    比如这样,就将宿主机的8080端口映射到容器的80端口,访问localhost:8080就可以了

    注意,windows下不同,因为docker需要Linux环境,其实在windows上开了一个虚拟机

    dcoker-machine ip default

    可以显示出ip为多少,这样,需要利用这个ip才能访问容器,一般是,192.168.99.100,那么192.168.99.100:8080即可访问到接口,不然就是你配错了

    进入docker容器:

    docker exec -i -t  pptdemo /bin/bash

    查看docker容器运行日志:

    docker logs pptdemo

    六、关于部署

    1.push到dockerhub,然后在装好docker的服务器上pull下来镜像,run即可

    2.复制源代码到服务器,在装好docker的服务器上重新执行 build,run

    3.将image导出,复制到装好docker的服务器,载入image,run即可

    1.push到dockerhub 

    优点在于,推送到dockerhub,只要有网即可方便推拉,缺点是,推送特别慢,而且要反复推,我正在查有没方法换源之类。。。

    1.在dockerhub注册帐号

    2.新建一个库,我的叫:pptdemo

    3.命令行登录

    docker login -u happycodes

    4.tag打标签

    docker tag pptdemo:latest happycodes/pptdemo:latest

    5.push

    docker push happycodes/pptdemo

    2、复制源码到服务器

    这个比较简单,就类似于再构建一遍,缺点是又要下依赖,又要重新构建,比较慢

    3、导出image,拷贝image,载入image

    比较合适的方法,构建一遍,复制多遍,即可

    复制代码
    #将镜像存储
    docker save nginx:latest > ./nginx.tar
    docker save xxxxx(image id) > ./nginx.tar
    
    #导入镜像文件
    docker load --input ./nginx.tar
    
    #通过符号的方式来导入
    docker load < ./nginx.tar
    复制代码

    七、可选、删除多余的容器和镜像

    容器不停,不能删对应的image

    关于容器:

    复制代码
    $ docker ps // 查看所有正在运行容器
    $ docker stop containerId // containerId 是容器的ID
    
    $ docker ps -a // 查看所有容器
    $ docker ps -a -q // 查看所有容器ID
    
    $ docker stop $(docker ps -a -q) //  stop停止所有容器
    $ docker  rm $(docker ps -a -q) //   remove删除所有容器
    复制代码

    关于images

    docker images  // 查看当前有些什么images
    docker rmi <image id>  // 删除指定id的image
    docker rmi $(docker images -q)  // 要删除全部image的话
    

      

    八、使用docker-compose部署

    简单说说docker-compose,他是python写的,为了解决docker部署的繁杂配置和多容器部署的配置问题,例如需要做容器端口和宿主机端口映射,配置容器ip等。

    pip install docker-compose 即可

    使用很简单,编写 docker-compose.yml 文件即可,例如我的代理池,需要配置映射端口

    转自:https://www.cnblogs.com/haoabcd2010/p/10279734.html

  • 相关阅读:
    [译]《Sphinx权威指南》
    sphinx 配置文件全解析
    利用 crontab 來做 Linux 固定排程
    http协议中用于上传多个文件的 multipart 字段
    Python 代码覆盖率统计工具 coverage.py
    Disruptor 基础篇
    NPM:常用命令的生命周期脚本
    十大经典排序算法(动图演示)【转】
    TypeScript Jest 调试
    NPM: 日常开发环境配置
  • 原文地址:https://www.cnblogs.com/zmdComeOn/p/11801443.html
Copyright © 2020-2023  润新知