一、实验环境

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后,后续步骤正常进行。

Docker学习笔记_使用Dockerfile创建flask的一个镜像的更多相关文章

  1. Docker学习笔记之通过 Dockerfile 创建镜像

    0x00 概述 由于 Docker 镜像的结构优势,使它的占用空间远小于普通的虚拟机镜像,而这就大幅减少了 Docker 镜像在网络或者其他介质中转移所花费的时间,进而提高了我们进行迁移部署的效率.不 ...

  2. docker学习笔记18:Dockerfile 指令 VOLUME 介绍

    在介绍VOLUME指令之前,我们来看下如下场景需求: 1)容器是基于镜像创建的,最后的容器文件系统包括镜像的只读层+可写层,容器中的进程操作的数据持久化都是保存在容器的可写层上.一旦容器删除后,这些数 ...

  3. docker学习笔记17:Dockerfile 指令 ONBUILD介绍

    ONBUILD指令可以为镜像添加触发器.其参数是任意一个Dockerfile 指令. 当我们在一个Dockerfile文件中加上ONBUILD指令,该指令对利用该Dockerfile构建镜像(比如为A ...

  4. docker学习笔记11:Dockerfile 指令 CMD介绍

    我们知道,通过docker run 创建并启动一个容器时,命令的最后可以指定容器启动后在容器内立即要执行的指令,如: docker run -i -t ubunu /bin/bash   //表示容器 ...

  5. Docker学习笔记_网上资源参考

    Docker学习,网上资源参考 1.菜鸟教程:                                                        http://www.runoob.com ...

  6. DOCKER 学习笔记2 认识dockerfile自定义镜像

    Dockerfile 概念 Dockerfile 是一个文本文件,但包含所构建容器在运行时候的参数.库.资源配置.可以简单理解为我们现有的镜像,比如Centos/Nginx 但我们需要构建一个容器的时 ...

  7. Docker学习笔记_安装和使用mysql

    一.系统环境和准备 1.宿主机OS:Win10 64位 2.虚拟机OS:Ubuntu18.04 3.操作账号:docker 二.安装 1.搜索mysql镜像:docker search mysql 2 ...

  8. Docker学习笔记_创建和使用Centos容器

    实验:创建和使用Centos容器 步骤: 1.搜索                                                     sudo docker search cen ...

  9. docker学习笔记14:Dockerfile 指令 ENV介绍

    ENV指令用来在镜像构建过程中设置环境变量.我们来看一个Dockerfile的例子: #test FROM ubuntu MAINTAINER hello ENV MYDIR /mydir RUN m ...

随机推荐

  1. [QT] Tab键切换焦点顺序

    在Qt Designer 中点击“编辑Tab顺序“按钮进入编辑Tab顺序模式,如下图: 之后界面会变成这样: 随处点击右键即可弹出菜单,选择  "制表符顺序列表..." 出现 剩下 ...

  2. SpringMVC 过滤器Filter使用解析

    SpringMVC框架是一个成熟的优秀java web开发框架,学习研究框架设计有助于我们更好的理解和掌握spring MVC,设计和写出更符合的结构和代码. 本节主要是研读SpringMVC框架中的 ...

  3. kali视频学习(6-10)

    第三周 kali视频(6-10)学习 6.信息搜集之主机探测 7.信息搜集之主机扫描(nmap使用) 8.信息搜集之指纹识别 9.信息搜集之协议分析 10.漏洞分析之OpenVAS安装 6.信息搜集之 ...

  4. 解决Net内存泄露原因

    Net内存泄露原因及解决办法 https://blog.csdn.net/changtianshuiyue/article/details/52443821 什么是.Net内存泄露 (1).NET 应 ...

  5. Fragment详解及举例

    1.为什么用Fragment(Android3.0提出)来替代TabActivity(Android4.0以后正式被弃用)? 因为Fragment可以适应各种不同屏幕大小,也就是适应不同屏幕的分辨率. ...

  6. 转载 基于NicheStack协议栈的TCP/IP实现

    一.摘要 Altera软件NIOS II高版本(7.2版本以上,本例程中使用的是9.0版本)中实现TCP/IP所用的协议栈为NicheStack,常用的例程有2个,web_server和simple_ ...

  7. compoer 全局和单个项目切换源 composer update killed

    演示地址: https://blog.csdn.net/hpugym/article/details/72588393 composer update killed https://cloud.ten ...

  8. notifyDataSetChanged() 动态更新ListView

    有时候我们需要修改已经生成的列表,添加或者修改数据,notifyDataSetChanged()可以在修改适配器绑定的数组后,不用重新刷新Activity,通知Activity更新ListView.今 ...

  9. 1023 Have Fun with Numbers

    题意: 给定一个正整数(最多有20位),假设这个数是a1a2a3...ak,把这个数乘以2倍,看得到的结果是否仍然是a1a2a3...ak的一个排列    思路: 大整数与int型整数的乘法:简单哈希 ...

  10. 1024 Palindromic Number

    题意: 给出一个数N(N<=10^10),最多可操作K次(K<=100),每次操作为这个数和其反转之后的数相加,若得到的结果为回文数,则输出:若在K次迭代后仍然不是回文数,在输出第K次操作 ...