把python写的web项目装入Docker的经历

一、下载安装Docker

下载地址:Docker Desktop: The #1 Containerization Tool for Developers | Docker

我是Windows10系统,所以选择的是。

安装很简单,下一步下一步。

建议勾选 "使用 WSL 2 而不是 Hyper-V" 的选项,这样性能会更好。

我是Windows10系统,所以选择的是。

二、运行Docker

安装完毕之后,可以在命令行运行docker --version,如果能看到版本号,就说明安装成功了。

但是打开"Docker Desktop"时报错。

An error occurred while running a WSL command. Please check your WSL configuration and try again.

运行wsl --update,安装了

正在安装: 适用于 Linux 的 Windows 子系统

已安装 适用于 Linux 的 Windows 子系统。

启动Docker Desktop不报错,但是"Starting the Docker Engine"。

netsh winsock reset,然后重启电脑。

在打开Docker Desktop就正常了。

三、编写 Dockerfile

在项目根目录下,创建一个名为 Dockerfile 的无后缀名文件。这是一个文本文件,定义了镜像的构建流程。一个生产环境可用的 Dockerfile ,内容如下:

cs 复制代码
# 1. 选择基础镜像
# 使用官方 Python 轻量级镜像,更小巧高效[reference:9][reference:10]
FROM python:3.7.4

# 2. 设置工作目录
# 容器内所有后续命令的执行路径[reference:11]
WORKDIR /app

# 3. 复制依赖文件并安装
# 先只复制 requirements.txt,能充分利用 Docker 的构建缓存,加速后续构建[reference:13]
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/

# 4. 复制项目代码
# 将项目所有文件复制到容器的 /app 目录[reference:15]
COPY . .

# 5. 暴露端口
# 声明容器运行时监听的端口[reference:16]
EXPOSE 5000

# 6. 设置启动命令
# 生产环境推荐使用 Gunicorn 作为 WSGI 服务器[reference:17]
# 格式: ["gunicorn", "-b", "0.0.0.0:5000", "主文件模块名:Flask实例名"]
CMD ["gunicorn", "--bind", "0.0.0.0:5000", "app:app"]

四、构建 Docker 镜像

打开终端(如 PowerShell),进入项目根目录,执行构建命令:

bash 复制代码
docker build -t my-flask-app .
  • -t my-flask-app:为镜像指定一个名字和标签(名字:标签)
  • .:告诉 Docker 到当前目录下去找 Dockerfile

运行报错:

ERROR internal load metadata for docker.io/library/python:3.7.4

编辑daemon.json文件

增加:

Delphi 复制代码
"registry-mirrors": [
    "https://docker.registry.cyou/",
    "https://docker-cf.registry.cyou/",
    "https://dockercf.jsdelivr.fyi/",
    "https://docker.jsdelivr.fyi/",
    "https://dockertest.jsdelivr.fyi/",
    "https://mirror.aliyuncs.com/",
    "https://dockerproxy.com/",
    "https://mirror.baidubce.com/",
    "https://docker.m.daocloud.io/",
    "https://docker.nju.edu.cn/",
    "https://docker.mirrors.sjtug.sjtu.edu.cn/",
    "https://docker.mirrors.ustc.edu.cn/",
    "https://mirror.iscas.ac.cn/",
    "https://docker.rainbond.cc/",
    "https://jq794zz5.mirror.aliyuncs.com"
  ]

重启电脑,然后再build,如下图,正常了。

持续很久,又报错"ERROR: failed to build: failed to receive status: rpc error: code = Unavailable desc = error reading from server: EOF"。

后来忘记啥问题了,build又正常了。

五、运行容器

复制代码
docker run -d -p 8389:8389 --name my-running-app2 my-flask-app
  • -d:让容器在后台运行。

  • -p 5000:5000:将宿主机的 5000 端口映射到容器的 5000 端口。这样你就可以通过 http://localhost:5000 来访问应用了。

  • --name my-running-app2:给容器起一个名字。

  • my-flask-app:指定要使用的镜像名。

六、验证与测试

打开浏览器,访问 http://localhost:5000,应该能看到你的 Flask 应用正在运行。

你也可以在终端使用 docker ps 命令来查看正在运行的容器列表,确认 my-running-app 的状态是 Up

七、待定