Docker基础-14-Dockerfile实战练习2

前面我们学习了Dockerfile的语法,大部分的指令都介绍过了。今天就来一个Dockerfile的练习。把一个python中的flask web程序打包成镜像,这个镜像包括python编译环境和flask web程序输出hello world的python代码。

 

1 程序准备

这是一个python中一个web框架的一个简单例子,flask程序的一个hello world的入门例子。

先看看linux中python的版本号,默认是python 2.7系列

新建一个flask-hello-world的文件夹,然后在这个文件夹下新建一个app.py文件

文件app.py代码如下

这里贴下代码

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return "hello docker"
if __name__ == '__main__':
    app.run()

保存退出,然后本地先通过pip install flask安装flask

我检查了我centos 7环境,虽然给我安装了python2.7, 但是没有安装pip2组件。

然后再运行yum 安装pip

可能需要升级pip版本(执行  sudo pip install --upgrade pip)

然后pip install flask

等flask安装完成之后,输入python app.py看看效果

根据上面提示,浏览器输入http://127.0.0.1:5000,由于我们IP地址是192.168.24.128,而且是在linux 系统,所以,我们到自己笔记本电脑浏览器去访问。

如果你上面浏览器打不开,先在linux机器上关闭防火墙,命令为sudo  systemctl stop firewalld. 然后刷新浏览器,如果还是出现不了hello docker字符串,那么编辑app.py文件,修改如下:

这样修改之后,应该是可以访问并且显示hello docker的效果。

 

2. 编写Dockerfile

我们在flask-hello-world文件下创建一个Dockerfile,并写下如下内容

贴出Dockerfile的代码

FROM python:2.7
LABEL maintainer="Anthony<xxx.yy@gmail.com>"
RUN pip install flask
COPY app.py /app/
WORKDIR /app
EXPOSE 5000
CMD ["python","/app/app.py"]

3. 制作镜像

利用之前学习过的docker build命令来制作镜像

由于我们FROM使用的base image是python:2.7,这个镜像在我们本地没有下载过,所以需要先下载python:2.7这个镜像里面的不同layer。

下载完之后,我在安装flask之后,报错了。

这里来说一下debug技巧,我们发现在执行RUN pip install flask这行出问题了,我们怎么去调试呢?先主意到这里。

上面红圈表示之执行step 2/7中,红圈这个是一个临时的容器,在docker build的过程中自动创建的容器,运行完之后又自动删除了这个临时的容器。所以,我们可以找到报错这个步骤的容器的id是上面我鼠标话白色背景的,那么我们可以进入这个容器,执行容器里面的bash程序,进行调试。

发现容器里面就是这个步骤报错了。然后这个问题网上搜索下,说是dns设置修改就可以了,和pip安装源没有关系。

我们需要修改一个文件vim /lib/systemd/system/docker.service

添加这行之后(这种方法只在centos和redhat系统里适合),重启docker服务,然后再来docker build

 

4. 启动镜像测试

这个加参数-d是后台运行的意思,来一个不加参数d的对比效果

这个时候,我们的容器是访问看不到hello docker的效果。我们需要run容器的时候指定端口。

看看浏览器访问效果

现在不用去明白为什么外层linux机器我指定8001端口,而容器指定5000端口就能访问,端口之间映射关系暂时不要去弄明白。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值