【Docker制作镜像】Linux制作以python为基础镜像,融合Flask框架和Redis数据库
步骤
- 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数据库相关推荐
- 自学Python第十九天-flask框架
自学Python第十九天-flask框架 安装和引用 使用 创建和运行应用 设置应用 处理函数及路由 另一种路由注册 唯一URL和重定向行为 反向解析 响应 get 和 post 请求 ,以及其他类型 ...
- python的migratetodb_Python的Flask框架中使用Flask-Migrate扩展迁移数据库的教程
我们在升级系统的时候,经常碰到需要更新服务器端数据结构等操作,之前的方式是通过手工编写alter sql脚本处理,经常会发现遗漏,导致程序发布到服务器上后无法正常使用. 现在我们可以使用Flask-M ...
- python flask和django_真正搞明白Python中Django和Flask框架的区别
在谈Python中Django框架和Flask框架的区别之前,我们需要先探讨如下几个问题. 一.为什么要使用框架? 为了更好地阐述这个问题,我们把开发一个应用的过程进行类比,往往开发一个应用(web应 ...
- python的django_真正搞明白Python中Django和Flask框架的区别
在谈Python中Django框架和Flask框架的区别之前,我们需要先探讨如下几个问题. 一.为什么要使用框架? 为了更好地阐述这个问题,我们把开发一个应用的过程进行类比,往往开发一个应用(web应 ...
- python虚拟环境搭建安装flask框架_Flask框架搭建虚拟环境的步骤分析
本文实例讲述了Flask框架搭建虚拟环境的步骤.分享给大家供大家参考,具体如下: 为什么要搭建虚拟环境? 在开发过程中, 当需要使用python的某些工具包/框架时需要联网安装 比如联网安装Flask ...
- python Web开发之flask框架展示电影列表
在之前的学习中,博主通过爬虫获取了豆瓣影片的信息,并将数据插入到了MySQL数据库中,接下来我们接触到了python的第二个应用领域--Web开发 python的应用领域 首先,我们先来了解一下fla ...
- linux文件夹制作iso,Linux 制作 ISO
Linux 环境下制作 iso. 用法: mkisofs -a -I -J -r -o filename.iso /目录 用途: 将Linux下某个目录中的所有文件做成iso镜像.而且我加上了参数,可 ...
- Linux下修改python pip镜像源:推荐豆瓣源
在用户文件夹下新建.pip文件夹及pip.conf文件,写入 [global] index-url = http://mirrors.aliyun.com/pypi/simple/ [install] ...
- linux 制作yum,Linux制作本地yum
标签: 首先在vm上安装centos 1.首先查看挂载光盘的位置:#df -h [root@lang ~]# df -h Filesystem Size Used ...
最新文章
- 软件项目管理大作业_信息系统项目管理师该如何备考?
- pku1384---Piggy-Bank(动态规划)
- XJOI 3585 The rescue plan 营救计划 题解
- in和exists以及not in 和not exists有什么不同?(笔记)
- php 怎么打印条形码,php – 如何在垂直标签中垂直打印zpl条形码
- MFC(ActiveX编程,孙鑫C++第十八讲笔记整理)
- JAVA设置新视口,java – 在更大的图像上移动视口; JLablel JScrollPane
- day10T1改错记
- Spring Cloud Alibaba迁移指南(三):极简的 Config
- 动态规划--代码随想录
- 【渝粤教育】国家开放大学2018年春季 8668-22T汽车涂装技术(A) 参考试题
- 头文件不应该含有非inline函数或对象的定义
- 小任务:简单实现银行业务系统(附 ideal编辑器固定序列化版本方法)
- Cannot load supported formats: Cannot run program svn: CreateProcess error=2, μ
- 手机的小窗口怎么弄_vivo怎么弄小窗口 vivo怎样弄小窗口
- HANA数据库备份脚本案例(刘欣)
- JAVA导出exls时报oom,Poi导出产生OOM解决方案
- python画立体的心_在python3中绘制三维多边形
- 在html页面中引入另一个html页面
- 高中选科策略隐私政策