zoukankan      html  css  js  c++  java
  • docker系列之二:构建docker容器

    1.创建在FlaskApp/app中创建Flask项目:
    
    2.生成web项目所需的运行环境:pip3 freeze > ../requirements.txt 
    3.编辑Dockerfile:
    # 依赖的的操作系统
    FROM ubuntu:16.04
    # image的作者和作者邮箱
    MAINTAINER oldeleven "gsfmcntt1022@163.com"
    # 安装项目的执行环境
    RUN apt-get update -y && 
        apt-get install -y python3-pip python3-dev
    # COPY 指令将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置。
    #<目标路径> 可以是容器内的绝对路径,也可以是相对于工作目录的相对路径(工作目录可以用 WORKDIR 指令来指定)。目标路径不需要事先创建,如果目录不存在会在复制文件前先行创建缺失目录。
    # ./requirements.txt:此文件指的是docker引擎中展开的构建上下文中的文件,并不是本地文件的目录文件
    COPY ./requirements.txt /requirements.txt
    # Docker引擎的工作目录
    WORKDIR /
    # 安装项目依赖项
    RUN pip3 install -r requirements.txt
    # 复制所有的文件到工作目录下
    COPY . /
    # 入口点
    ENTRYPOINT [ "python3" ]
    # 要执行的项目入口
    CMD [ "app/app.py" ]
    
    
    
    4.生成image镜像文件:docker build -t docker-flask:0.1 .  # 意思是将Dockerfile所在的目录中的所有内容打包上传给docker引擎
    # -t :image的那么和tag
    那么当我们使用 docker build 命令来构建镜像时,这个构建过程其实是在 Docker引擎 中完成的,而不是在本机环境。
    那么如果在 Dockerfile 中使用了一些 COPY 等指令来操作文件,如何让 Docker引擎 获取到这些文件呢?
    这里就有了一个镜像构建上下文的概念,当构建的时候,由用户指定构建镜像的上下文路径,而 docker build 会将这个路径下所有的文件都打包上传给 Docker 引擎,引擎内将这些内容展开后,就能获取到所有指定上下文中的文件了(参考下方docker架构图)。
    
    比如说 dockerfile 中的 COPY ./package.json /project,其实拷贝的并不是本机目录下的 package.json 文件,而是 docker引擎中展开的构建上下文中的文件,所以如果拷贝的文件超出了构建上下文的范围,Docker引擎是找不到那些文件的。
    
    5.运行我们生成的image镜像文件
    docker run -d --name flask_app -p 5000:5000  docker-flask:0.1
    或者 docker run -d --name flask_app -v $PWD/app:/app -p 8000:5000 docker-flask:0.1
    #  docker run 守护模式 --name 设置container的名字 -p 本机接口:容器接口 imageID或者imageName:tag
    # 注意:-p 5000:5000:注意这个5000是flask中配置的port
    #  $PWD/app:表示实体机中app.py所在的位置:$PWD:是做镜像的绝对工作路径::/app:表示镜像中app.py的位置,dockerfile中我们的WORKDIR= /,所以镜像中的app.py的位置就是/app/
    
    6、标记我们自己制作的image
    docker tag docker-flask  gsfmcntt1022/docker-flask:v1.0
    #
    gsfmcntt1022 是用户名需要替换成你自己的docker用户名,这个用户名也是你的docker仓库名,
    # 你在pull和push的时候docker引擎会通过你的用户名将你制作的docker容器上传到你自己的容器仓库之中
    7、上传到我们自己的docker仓库中 docker login # 登录docker 
    docker push gsfmcntt1022/docker-flask:v1.0 # dockerhub跟github不太一样,不用git init初始化仓库,他可以直接通过你的用户名来寻找你的docker仓库位置,登录之后直接push就可以了
    8、在我们web服务器中pull login docker docker pull gsfmcntt1022/docker-flask:v1.0 # 如果版本为latest可以省略

    ☆  至此我们已经可以制作自己的docker容器,并且上传到自己的容器仓库中(https://hub.docker.com/),那么django,爬虫或者其他项目大致流程也是如此,大家可以模拟制作

    ☆ >>>>下一篇docker应用篇>>>>

  • 相关阅读:
    javascript中的require、import和export模块文件
    MFC CDHtmlDialog 加载本地资源
    互斥和信号量
    CString与char *互转总结
    MFC消息-自定义消息
    Python网络爬虫之Scrapy框架(CrawlSpider)
    scrapy中selenium的应用
    UA池和代理池
    抓取js动态生成的数据分析案例
    scrapy框架的日志等级和请求传参
  • 原文地址:https://www.cnblogs.com/888888CN/p/12016475.html
Copyright © 2011-2022 走看看