步骤

  • 1.编辑Dockerfile
  • 2.编辑requirements.txt文件
  • 3.编辑app.py文件
  • 4.生成镜像文件
  • 5.使用镜像,启动容器
  • 6.访问容器的web服务
  • 7.启动redis容器
  • 8.链接到redis容器
  • 9.再次访问容器的web服务

1.编辑Dockerfile

[root@docker1 scdocker]# mkdir /mydocker/
[root@docker1 scdocker]# cd /mydocker/
[root@docker1 mydocker]# vim Dockerfile

内容为:

FROM python:2.7-slim
WORKDIR /app
ADD . /app
RUN pip install --trusted-host  pypi.python.org -r requirements.txt
EXPOSE 80
ENV NAME World
ENV AUTHOR cali
CMD ["python","app.py"]


解释:
FROM python:2.7-slim #导入基础镜像,镜像里已经安装了python 2.7

WORKDIR /app #进入到容器后,会进入的文件夹

ADD . /app #复制linux系统当前目录下的内容到容器的/app目录下 类似于执行docker cp

RUN pip install --trusted-host pypi.python.org -r requirements.txt #在容器内部执行的命令

EXPOSE 80 #容器暴露80端口,监听80端口

ENV NAME World #定义了环境变量NAME赋值world
ENV AUTHOR cali #定义了环境变量AUTHOR赋值cali

CMD [“python”,“app.py”] #容器启动的时候执行命令 python app.py

RUN和CMD指令是不同的阶段执行的
RUN是在制作镜像的过程中执行的,可以RUN很多命令
CMD是镜像制作完成,启动容器使用镜像的时候执行的,容器启动后执行的命令

2.编辑requirements.txt文件

在go目录下编写Dockerfile,vim Dockerfile

[root@docker1 mydocker]# vim requirements.txt
Flask
Redis

3.编辑app.py文件

编辑app.py文件,这是我们的程序文件。

[root@docker1 mydocker]# vim app.py

内容:

from flask import Flask
from redis import Redis, RedisError
import os
import socket# Connect to Redis
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 disabled</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.生成镜像文件

生成sc-hello_1的镜像,执行docker build -t sc-hello_1 .
-t后面指定镜像名字和版本

[root@docker1 mydocker]# docker build -t sc-hello_1 .
[+] Building 87.5s (9/9) FINISHED                                             

查看

5.使用镜像,启动容器

执行docker run -d -p 5544:80 --name jiang-flask-1 sc-hello_1

[root@docker1 mydocker]# docker run -d -p 5544:80 --name jiang-flask-1 sc-hello_1
d9f122061fa54453aa07cca9e554d0b00f29f1596c9af30cb789e61cdf376076

6.访问容器的web服务

curl或者chrome浏览器访问
宿主机ip:http://192.168.1.132:5544/

显示了:
Hello World!
Hostname: f4aeb5d5305a
Visits: cannot connect to Redis, counter disabled
注意出现这个提示证明访问是正常的,只不过提示是因为redis数据库容器没有启动,flask web服务不能连接到redis数据库!!!

7.启动redis容器

执行docker run -d -p 6379:6379 --name jiang-redis-1 redis

[root@docker1 mydocker]# docker run -d -p 6379:6379 --name jiang-redis-1
Unable to find image 'redis:latest' locally
latest: Pulling from library/redis
a2abf6c4d29d: Already exists
c7a4e4382001: Pull complete
4044b9ba67c9: Pull complete
c8388a79482f: Pull complete
413c8bb60be2: Pull complete
1abfd3011519: Pull complete
Digest: sha256:db485f2e245b5b3329fdc7eff4eb00f913e09d8feb9ca720788059fdc2ed8339
Status: Downloaded newer image for redis:latest
efbbd2eec449972dbbef502b20c5782b6b780a05612c507431eb2b9a46bfd12e

8.链接到redis容器

将前面启动的容器删除,再次启动链接redis容器:
删除:

[root@docker1 mydocker]# docker rm jiang-flask-1
jiang-flask-1
[root@docker1 mydocker]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                                       NAMES
efbbd2eec449   redis     "docker-entrypoint.s…"   2 minutes ago   Up 2 minutes   0.0.0.0:6379->6379/tcp, :::6379->6379/tcp   jiang-redis-1

再次启动:

[root@docker1 mydocker]# docker run -d --name jiang-flask-1 -p 5544:80 --link jiang-redis-1:redis sc-hello_1
00623259acd41b22c9c717396a3490192e685c7a45b334ebedfb6bbf6bb8fb6c
[root@docker1 mydocker]# docker ps
CONTAINER ID   IMAGE        COMMAND                  CREATED         STATUS         PORTS                                       NAMES
00623259acd4   sc-hello_1   "python app.py"          3 seconds ago   Up 3 seconds   0.0.0.0:5544->80/tcp, :::5544->80/tcp       jiang-flask-1
efbbd2eec449   redis        "docker-entrypoint.s…"   4 minutes ago   Up 4 minutes   0.0.0.0:6379->6379/tcp, :::6379->6379/tcp   jiang-redis-1

进入查看:

[root@docker1 mydocker]# docker exec -it jiang-flask-1 bash
root@00623259acd4:/app# cat /etc/host
cat: /etc/host: No such file or directory
root@00623259acd4:/app# cat /etc/hosts
127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.3  redis efbbd2eec449 jiang-redis-1
172.17.0.2  00623259acd4

9.再次访问容器的web服务

curl或者chrome浏览器访问
宿主机ip:http://192.168.1.132:5544/

可点击刷新页面,“Visit:”后面的数会依次增加1。

【Docker制作镜像】Linux制作以python为基础镜像,融合Flask框架和Redis数据库相关推荐

  1. 自学Python第十九天-flask框架

    自学Python第十九天-flask框架 安装和引用 使用 创建和运行应用 设置应用 处理函数及路由 另一种路由注册 唯一URL和重定向行为 反向解析 响应 get 和 post 请求 ,以及其他类型 ...

  2. python的migratetodb_Python的Flask框架中使用Flask-Migrate扩展迁移数据库的教程

    我们在升级系统的时候,经常碰到需要更新服务器端数据结构等操作,之前的方式是通过手工编写alter sql脚本处理,经常会发现遗漏,导致程序发布到服务器上后无法正常使用. 现在我们可以使用Flask-M ...

  3. python flask和django_真正搞明白Python中Django和Flask框架的区别

    在谈Python中Django框架和Flask框架的区别之前,我们需要先探讨如下几个问题. 一.为什么要使用框架? 为了更好地阐述这个问题,我们把开发一个应用的过程进行类比,往往开发一个应用(web应 ...

  4. python的django_真正搞明白Python中Django和Flask框架的区别

    在谈Python中Django框架和Flask框架的区别之前,我们需要先探讨如下几个问题. 一.为什么要使用框架? 为了更好地阐述这个问题,我们把开发一个应用的过程进行类比,往往开发一个应用(web应 ...

  5. python虚拟环境搭建安装flask框架_Flask框架搭建虚拟环境的步骤分析

    本文实例讲述了Flask框架搭建虚拟环境的步骤.分享给大家供大家参考,具体如下: 为什么要搭建虚拟环境? 在开发过程中, 当需要使用python的某些工具包/框架时需要联网安装 比如联网安装Flask ...

  6. python Web开发之flask框架展示电影列表

    在之前的学习中,博主通过爬虫获取了豆瓣影片的信息,并将数据插入到了MySQL数据库中,接下来我们接触到了python的第二个应用领域--Web开发 python的应用领域 首先,我们先来了解一下fla ...

  7. linux文件夹制作iso,Linux 制作 ISO

    Linux 环境下制作 iso. 用法: mkisofs -a -I -J -r -o filename.iso /目录 用途: 将Linux下某个目录中的所有文件做成iso镜像.而且我加上了参数,可 ...

  8. Linux下修改python pip镜像源:推荐豆瓣源

    在用户文件夹下新建.pip文件夹及pip.conf文件,写入 [global] index-url = http://mirrors.aliyun.com/pypi/simple/ [install] ...

  9. linux 制作yum,Linux制作本地yum

    标签: 首先在vm上安装centos 1.首先查看挂载光盘的位置:#df -h [root@lang ~]# df -h Filesystem                   Size  Used ...

最新文章

  1. 软件项目管理大作业_信息系统项目管理师该如何备考?
  2. pku1384---Piggy-Bank(动态规划)
  3. XJOI 3585 The rescue plan 营救计划 题解
  4. in和exists以及not in 和not exists有什么不同?(笔记)
  5. php 怎么打印条形码,php – 如何在垂直标签中垂直打印zpl条形码
  6. MFC(ActiveX编程,孙鑫C++第十八讲笔记整理)
  7. JAVA设置新视口,java – 在更大的图像上移动视口; JLablel JScrollPane
  8. day10T1改错记
  9. Spring Cloud Alibaba迁移指南(三):极简的 Config
  10. 动态规划--代码随想录
  11. 【渝粤教育】国家开放大学2018年春季 8668-22T汽车涂装技术(A) 参考试题
  12. 头文件不应该含有非inline函数或对象的定义
  13. 小任务:简单实现银行业务系统(附 ideal编辑器固定序列化版本方法)
  14. Cannot load supported formats: Cannot run program svn: CreateProcess error=2, μ
  15. 手机的小窗口怎么弄_vivo怎么弄小窗口 vivo怎样弄小窗口
  16. HANA数据库备份脚本案例(刘欣)
  17. JAVA导出exls时报oom,Poi导出产生OOM解决方案
  18. python画立体的心_在python3中绘制三维多边形
  19. 在html页面中引入另一个html页面
  20. 高中选科策略隐私政策

热门文章

  1. 相较于OA系统的固定资产管理,资产云管理补充了什么?
  2. Google浏览器强制刷新、清楚缓存(其他浏览器应该也行)
  3. 志之所趋,无远弗届,穷山距海,不能限也
  4. NelsonHall将Cigniti评为人工智能测试与整体质量工程能力方面的领导者
  5. windows在explorer中添加虚拟文件夹(Virtual Folder)
  6. Shell编程学习进度
  7. php 输出数组内容_php如何输出数组
  8. wincc mysql ado_WINCC中使用ADO对象连接数据库 例子 常用属性 方法
  9. postgresql日期相关函数
  10. gbrt(gbdt)源码分享