博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Docker基础-14-Dockerfile实战练习2
阅读量:4302 次
发布时间:2019-05-27

本文共 1749 字,大约阅读时间需要 5 分钟。

前面我们学习了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 Flaskapp = 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看看效果

根据上面提示,浏览器输入,由于我们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.7LABEL maintainer="Anthony
"RUN pip install flaskCOPY app.py /app/WORKDIR /appEXPOSE 5000CMD ["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端口就能访问,端口之间映射关系暂时不要去弄明白。

转载地址:http://ukows.baihongyu.com/

你可能感兴趣的文章
已知子网掩码,确定ip地址范围
查看>>
判断时间或者数字是否连续
查看>>
docker-daemon.json各配置详解
查看>>
Mac 下docker路径 /var/lib/docker不存在问题
查看>>
Docker(一)使用阿里云容器镜像服务
查看>>
Docker(二) 基础命令
查看>>
Docker(三) 构建镜像
查看>>
Spring 全家桶注解一览
查看>>
JDK1.8-Stream API使用
查看>>
cant connect to local MySQL server through socket /tmp/mysql.sock (2)
查看>>
vue中的状态管理 vuex store
查看>>
Maven之阿里云镜像仓库配置
查看>>
Maven:mirror和repository 区别
查看>>
微服务网关 Spring Cloud Gateway
查看>>
SpringCloud Feign的使用方式(一)
查看>>
SpringCloud Feign的使用方式(二)
查看>>
关于Vue-cli+ElementUI项目 打包时排除Vue和ElementUI
查看>>
Vue 路由懒加载根据根路由合并chunk块
查看>>
vue中 不更新视图 四种解决方法
查看>>
MySQL 查看执行计划
查看>>