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

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                                             

查看
![在这里插入图片描述](https://img-blog.csdnimg.cn/dec731ab8353488da24a0c1fca0

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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

日 近 长 安 远

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值