当前位置: 首页 > news >正文

Docker学习笔记_使用Dockerfile创建flask的一个镜像

一、实验环境

      1、宿主机OS:Win10 64位

      2 、虚拟机OS:Ubuntu18.04 64位    虚拟机名称:Ubuntu18VM1   虚拟机IP:192.168.8.25

      3、账号:docker    

二、简要步骤

  1.编写一个dockerfile文件
  2.编写外部文件requirements.txt
  3.编写一个app.py文件
  4.创建镜像
  5.查看镜像
  6.创建并运行容器
  7.从浏览器里查看

三、详细步骤

       1、建立一个docker的工作文件夹dokerspace,进入这个文件夹,编写dockerfile
           $vi Dockerfile

          

           文件Dockerfile内容:

           FROM python:3.5
           WORKDIR /app
      ADD . /app
           RUN pip install -r requirements.txt
           EXPOSE 80
           ENV NAME World
           CMD ["python","app.py"]
          

  2、编写外部文件requirements.txt

            Flask

            Redis

       3、编写app.py,3、这里app.py是一个简单的Python应用文件内容:

from flask import Flask
from redis import Redis,RedisError
import os
import socket

redis = Redis(host="redis",db=0,socket_connect_timeout=2,socket_timeout=2)
app = Flask(__name__)
@app.route("/")
def hello():
    try:
        visits = redis.incr("counter")
    except RedisError:
        visits = "<i>cannot connect to Redis,counter disababled</i>"
    html = "<h3>Hello {name}!</h3>" \
           "<b>Hostname:</b>{hostname}<br>" \
           "<b>Visits:</b>{visits}"

    return html.format(name=os.getenv("NAME","world"),hostname=socket.gethostname(),visits=visits)

if __name__=="__main__":
    app.run(host='0.0.0.0',port=80)

       4、创建镜像

       $docker build -t hellodocker . 
       其中,docker build是构建镜像的指令;-t参数指定了生成的镜像的名称为hellodocker;最后的点,表明是当前目录。如果Dockerfile不在此目录,则需要将点替换为

Dockerfile所在的目录。

       5、查看镜像

       $sudo docker ps

       6、创建并启动容器

       $sudo docker run -d -p 5000:80 hellodocker

       

       7、从宿主机浏览器里查看

      

        
         至此,一个简单的基于flask镜像创建的容器已经运行。


四、遇到问题及处理

     1、遇到问题:在试验中,能创建镜像,但无法创建并启动容器。

          经检查,是app.py文件里存在bug。把此文件放到一个Python的环境里,排查问题,直到能正常解释执行。修正本实验中的app.py后,后续步骤正常进行。

 

转载于:https://www.cnblogs.com/SH170706/p/10394281.html

相关文章:

  • java 多线程基础, 我觉得还是有必要看看的
  • Nginx压测和并发预估
  • 未发先侃?对比华为,高通第二代5G调制解调器如何?
  • 安卓P底部有空白,需要手动全屏
  • vue.js框架原理浅析
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • SpringBoot 实战 (九) | 整合 Mybatis
  • ThinkSNSPlus 2.0 产品体验报告
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 资源 | 上千份简历模板统统给你!都拿去!
  • idou老师教你学Istio :5分钟简析Istio异常检测
  • CSS 专业技巧
  • 交互设计原则
  • Btrace使用入门
  • GraphQL学习过程应该是这样的
  • [译] React v16.8: 含有Hooks的版本
  • HomeBrew常规使用教程
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • Java的Interrupt与线程中断
  • Laravel Telescope:优雅的应用调试工具
  • LintCode 31. partitionArray 数组划分
  • Python_网络编程
  • rabbitmq延迟消息示例
  • React-生命周期杂记
  • Selenium实战教程系列(二)---元素定位
  • SQLServer之索引简介
  • Vue小说阅读器(仿追书神器)
  • 基于遗传算法的优化问题求解
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 数据结构java版之冒泡排序及优化
  • 微服务入门【系列视频课程】
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 想写好前端,先练好内功
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • # Apache SeaTunnel 究竟是什么?
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #Z0458. 树的中心2
  • #微信小程序(布局、渲染层基础知识)
  • (02)Hive SQL编译成MapReduce任务的过程
  • (1)Nginx简介和安装教程
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (LeetCode C++)盛最多水的容器
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (分类)KNN算法- 参数调优
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)