Loading... # **前言** **使用Docker容器的形式运行一个简单的Flask项目** # **步骤** ## **一.编写py代码** 1.用python编写一个简单的Flask项目,这里我使用的是**PyChram**进行项目的编写 ![image.png](http://type.zimopy.com/usr/uploads/2023/11/4074457228.png) ## 创建一个名叫app.py的文件 如下:(值得注意的是:Flask 需要一波倒包,鼠标移动到Flask 按 Alt + Enter 完成倒包) ```python #!/user/bin/env python3 # -*- coding: utf-8 -*- # @Email : 3431463@qq.com from flask import Flask app = Flask(__name__) @app.route('/') def index(): return '<h1>Hello World!</h1>' @app.route('/user') def getUserName(): return '<h1>Tommy </h1>' if __name__ == '__main__': app.run(host='0.0.0.0', port=7777, debug=True) ``` 2.代码编写完成,首先就是在PyCharm中先运行一波代码,测试下效果,空白处右键选择 Run ‘app’ 代码正常跑起来: 3.打开浏览器输入 [http://localhost:7777](http://localhost:7777/user "http://localhost:7777") 回车 出现 Hello World!说明你Flask没有问题阔以制作docker镜像了 ## 二.把flask服务构建成一个docker镜像 1.创建两个文件 Dockerflie 跟 requirements.txt (注意:Dockerfile是没有拓展名的) 1.1)Dockerfile 是 docker 构建镜像文件的基础,docker会根据Dockerfile的命令构建镜像,Dockerfile代码如下: ```python FROM python:3.8-alpine WORKDIR /app ADD . /app RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple EXPOSE 7777 CMD ["python", "app.py"] ``` 大致意思: ```shell 采用的是 python3.8 版本 设置docker容器的工作目录 /app 将当前目录下的所有内容拷贝到容器中的 /app 目录下(app.py Dockerfile requirements.txt) 倒入app.py所需要的包(这里就是Flask的包了)后面是镜像源,万一你要引入的包需要阔学上网那就不好办了,所以设置了一个国内的镜像源确保万无一失 容器对外暴露的端口号:7777 执行 python 代码 app.py ``` 1.2)requirement.txt为python的依赖库 ```shell Flask==1.1.1 ``` 补充说明。这里有个问题,1.1.1哪里来的?要是我有很多很多的包,我总不能一个一个找吧? 没有错,肯定是不用一个一个找的,我打开pycharm下面的Terminal命令行,输入 pip freeze 回车就会有你这个项目所依赖滴东西加版本 当然了,pip指的是你基于python2,很多老铁电脑里面是python3那就用 pip3 freeze ![image.png](http://type.zimopy.com/usr/uploads/2023/11/3559948158.png) 2.开始构建镜像 2.1)cd 目录到你的python目录下,即:Dockerfile文件目录下 ![image.png](http://type.zimopy.com/usr/uploads/2023/11/3234815889.png) 补充说明一点哈,如果你在这个目录下打包镜像,那么是会把venv这个文件夹一起打包的,无端增加了一波大小,所以最好自己创建一个文件夹,把这三文件丢里面,然后再cd到目录里面继续操作。 2.2)执行构建镜像代码 需要注意的是:我下面都是直接 docker 直接运行了,正常情况下是需要 sudo 去运行的 ```bash 默认情况下,只有 root 或者 有 sudo 权限的用户可以执行 Docker 命令。 想要以非 root 用户执行 Docker 命令,你需要将你的用户添加到 Docker 用户组,该用户组在 Docker CE 软件包安装过程中被创建。想要这么做,输入: $ sudo usermod -aG docker $USER $USER是一个环境变量,代表当前用户名。 登出,并且重新登录,以便用户组会员信息刷新。 ``` ```bash docker build -f Dockerfile -t Flask:tommy . #根据Dockerfile文件,创建一个镜像名为 Flask 标记名为 tommy 的docker镜像 ``` 执行错误提示1: ```bash tommy@tommy-Vostro-3900:~/PycharmProjects/pythonProject$ docker build -f Dockerfile -t Flask:tommy invalid argument "Flask:tommy" for "-t, --tag" flag: invalid reference format: repository name must be lowercase See 'docker build --help'. ``` 执行错误2: ```bash tommy@tommy-Vostro-3900:~/PycharmProjects/pythonProject$ docker build -f Dockerfile -t flask:tommy "docker build" requires exactly 1 argument. See 'docker build --help'. Usage: docker build [OPTIONS] PATH | URL | - Build an image from a Dockerfile ``` 2.3)构建完成执行代码查看镜像 ```bash docker images ``` 可以看到,名称为 flask 标记为 tommy 的镜像已经创建成功。 3.把镜像跑起来 ```bash docker run -d -p 7777:7777 flask:tommy ``` 报错提示: 7777端口被占用 ```bash tommy@tommy-Vostro-3900:~/PycharmProjects/pythonProject$ docker run -p 7777:7777 7790f1ba6894 docker: Error response from daemon: driver failed programming external connectivity on endpoint romantic_nash (25d453a1f5e5bb4c19cebe2c0922349cc6e4f4cff2abe3a9a142c5fd9849560f): Error starting userland proxy: listen tcp4 0.0.0.0:7777: bind: address already in use. ERRO[0000] error waiting for container: context canceled ``` 可以正常访问,到此docker部署flask镜像就算完成了。 # **进阶** ```python # 查看当前镜像 docker images tommy@tommy-Vostro-3900:~$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE localhost:8082/docker.tommy test 9975373d76d2 38 hours ago 217MB sonatype/nexus3 latest f07af611e0df 7 days ago 662MB mysql 5.7 a70d36bc331a 7 weeks ago 449MB python 3.8-slim be5d294735c6 8 weeks ago 113MB python 3.8 b0358f6298cd 8 weeks ago 882MB sonatype/nexus3 <none> 8716903d1912 2 months ago 629MB python 3.8-alpine 64df5e2068e3 2 months ago 44.5MB portainer/portainer latest 62771b0b9b09 7 months ago 79.1MB stakater/java8-alpine latest fbe5af149ba7 4 years ago 183MB training/webapp latest 6fae60ef3446 5 years ago 349MB # 可以看到 python 3.8 这个是全的版本,什么东西都有 882 M 很大,占用很多空间 # 所以docker官网其实也提供了最小精简版本 python 3.8-alpine 这个版本的大小只有183M 还好还好 # 所以Dockerfile文件下的FROM 改下,改成 python:3,8-alpine 可以节约很多空间 FROM python:3.8-alpine WORKDIR /app ADD . /app RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple EXPOSE 7777 CMD ["python", "app.py"] ``` 最后修改:2023 年 11 月 27 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏