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引擎是找不到那些文件的。 .运行我们生成的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应用篇>>>>

docker系列之二:构建docker容器的更多相关文章

  1. Docker系列(一)Docker概述,核心概念讲解,安装部署

    部分内容参考链接: Docker实战总结(非常全面,建议收藏) 一. Docker概述 Docker是一个开源的应用容器引擎(基于Go语言开发),让开发者可以打包他们的应用以及依赖包到一个可移植的容器 ...

  2. 【实战】Docker入门实践二:Docker服务基本操作 和 测试Hello World

    操作环境 操作系统:CentOS7.2 内存:1GB CPU:2核 Docker服务常用命令 docker服务操作命令如下 service docker start #启动服务 service doc ...

  3. Docker系列(二)镜像下载、操作容器、镜像导入导出等操作

    一.镜像操作 列出镜像 $sudo docker images 从dockerhub检索image $docker search image_name 下载image $docker pull ima ...

  4. Docker入门系列之二:Docker术语

    原文作者:Jeff Hale 原文地址:https://towardsdatascience.com/learn-enough-docker-to-be-useful-1c40ea269fa8 翻译: ...

  5. Docker系列-第七篇Docker构建SpringBoot应用

    1.基于Dockerfile构建SpringBoot镜像 1.1准备工作 将SpringBoot项目通过maven打成jar包 mvn clean package #使用maven打包项目 1.2使用 ...

  6. Docker系列教程04-Docker构建镜像的三种方式

    简介 创建镜像的方法主要有三种:基于已有镜像的容器创建.基于本地模板导入.基于Dockerfile创建. 今天就逐一讲述为大家讲述,如何构建属于自己的docker镜像. 1.基于容器构建镜像 基于已有 ...

  7. Docker系列06:Linux修改docker镜像和容器数据存储位置

    指定镜像和容器存放路径的参数是--graph=/var/lib/docker,其默认存储位置为/var/lib/docker, Docker 的配置文件可以设置大部分的后台进程参数,在各个操作系统中的 ...

  8. Docker学习(二)——Docker容器使用

    Docker容器使用 1.Docker客户端       命令docker可以查看到Docker客户端的所有命令选项.       命令docker command --help更深入的了解指定的Do ...

  9. Docker系列教程02-操作Docker容器

    简介 通过前面的学习,相信您已经对镜像有所了解,是时候学习容器了. 容器是Docker的另一个核心概念.简单来说,容器是镜像的一个运行实例.正如从虚拟机模板上启动VM一样,用户也同样可以从单个镜像上启 ...

随机推荐

  1. php CI如何实现全站静态生成html,动态创建目录

    php CI如何实现全站静态生成html,动态创建目录CodeIgniter框架生成HTML的方法 public function out_html($code) { $data['articles' ...

  2. android studio学习----gradle多渠道打包

    由于国内Android市场众多渠道,为了统计每个渠道的下载及其它数据统计,就需要我们针对每个渠道单独打包,如果让你打几十个市场的包岂不烦死了,不过有了Gradle,这再也不是事了. 友盟多渠道打包 废 ...

  3. Linux命令: ps

    STAT 进程状态 S-睡眠 s-进程是会话向导进程 N拥有比普通优先级更低的 R-正在运行 D-短期等待 Z-僵尸进程 T被跟踪或者被停止 STATED 进程启动时间 TIME  进程使用CPU时间 ...

  4. 其他综合-CentOS 7 使用二进制包搭建lnmp平台

    CentOS 7 使用二进制包搭建lnmp平台 1.实验描述 通过二进制搭建 lnmp 平台,实现 web 环境基本部署 2.实验环境 虚拟机: 系统:CenOS 7.6 内存:2 G+ 数量:1台 ...

  5. 深度学习中目标检测Object Detection的基础概念及常用方法

    目录 关键术语 方法 two stage one stage 共同存在问题 多尺度 平移不变性 样本不均衡 各个步骤可能出现的问题 输入: 网络: 输出: 参考资料 What is detection ...

  6. 201871010104-陈园园 《面向对象程序设计(java)》第十五周学习总结

    201871010104-陈园园 <面向对象程序设计(java)>第十五周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...

  7. 莫烦TensorFlow_05 add_layer

    import tensorflow as tf import numpy as np def add_layer(inputs, in_size, out_size, activation_funct ...

  8. 【Spring AOP】通知(五)

    一.通知介绍 1. 前置通知(Before) 在目标方法执行之前执行的通知. 前置通知方法,可以没有参数,也可以额外接收一个JoinPoint,Spring会自动将该对象传入,代表当前的连接点,通过该 ...

  9. C++——二维vector初始化大小方法

    初始化二维vector,为r*c的vector,所有值为0.1.直接用初始化方法(刚开始没想到) vector<vector<int> > newOne(r, vector&l ...

  10. web控制树莓派摄像头

    首先测试摄像头保证能顺利拍照 raspistill -o a.jpg 安装flask sudo pip install flask 确认无误之后向下进行. 文件夹结构: CapPic ----stat ...