





















3.1 创建项目文件夹
在 Windows 上,打开 PowerShell 或 CMD,执行:
mkdir D:\docker-deploy-demo
cd D:\docker-deploy-demo
3.2 编写一个简单的 Flask 应用
创建文件 app.py,内容如下:
import os
from flask import Flask
app = Flask(__name__)
# 从环境变量读取问候语,默认为 "Hello"
greeting = os.environ.get('GREETING', 'Hello')
@app.route('/')
def hello():
return f'{greeting} from Docker!'
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
3.3 编写依赖文件
创建 requirements.txt,内容:
flask==2.3.3
3.4 编写 Dockerfile
创建 Dockerfile(无扩展名),内容:
# 使用轻量级 Python 镜像
FROM python:3.9-slim
# 设置工作目录
WORKDIR /app
# 复制依赖文件并安装
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 复制应用代码
COPY app.py .
# 声明端口
EXPOSE 5000
# 启动命令
CMD ["python", "app.py"]
3.5 本地测试(可选)
在项目目录下执行:
docker build -t my-flask-app .
docker run -d --name test-app -p 5000:5000 my-flask-app
打开浏览器访问 http://localhost:5000 ,应该看到 Hello from Docker!。然后停止并删除容器:
docker stop test-app
docker rm test-app
4.1 登录 Docker Hub
在 PowerShell 中执行:
docker login
输入你的 Docker Hub 用户名和密码。
注意:Docker Hub 现在要求使用 Personal Access Token 而不是密码。
登录 Docker Hub 网站 → 点击头像 → Settings → Personal Access Token → New Access Token
生成一个 token(例如 docker-cli-token),复制 token
在 docker login 提示输入密码时,粘贴这个 token 作为密码
登录成功会显示 Login Succeeded。
4.2 给本地镜像打标签
标签格式:<用户名>/<仓库名>:<版本>。例如我的用户名是 zhangsan,那么:
docker tag my-flask-app zhangsan/my-flask-app:v1.0
如果不确定用户名,可以用 docker images 查看已有的镜像名。

可以看到这个新的tag镜像。
4.3 推送镜像到 Docker Hub
docker push zhangsan/my-flask-app:v1.0
等待上传完成。推送成功后,可以在 Docker Hub 网站上看到这个镜像(仓库是公开的)。

如果推送时显示没有权限,那大概率是需要重新登录下(docker login 命令重新登录下)。
推送的速度比较快,虽然看起来有200M,但是在服务器上已经有的镜像层,docker hub一般是不会重复推送的,节约网络和空间,这一点很智能。
如果从来没有安装过docker,演示centos 7下安装docker步骤
安装必要的工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
换aliyun的docker安装源,国内安装提高速度,实测国外也可以
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装docker(3分钟安好)
sudo yum install -y docker-ce docker-ce-cli containerd.io
验证安装成功:

安装完docker是没有启动的,启动,并设置为开机自启动。
# 启动 Docker 服务
systemctl start docker
# 查看 Docker 运行状态
systemctl status docker
# 设置开机自启 Docker
systemctl enable docker
假设你已经进入 Linux 环境(WSL 或 SSH 到云服务器)。以下命令在 Linux 终端中执行。
6.1 拉取镜像
docker pull zhangsan/my-flask-app:v1.0
如果速度慢,可以配置镜像加速器(参考之前章节)。
6.2 运行容器
docker run -d --name myapp -p 5000:5000 zhangsan/my-flask-app:v1.0
6.3 测试访问
如果使用 WSL:在 Windows 浏览器中访问 http://localhost:5000 即可。
如果使用云服务器:在浏览器中访问 http://<服务器公网IP>:5000。注意需要在云服务器安全组中开放 5000 端口。
你应该看到 Hello from Docker!。
6.4 查看容器日志
docker logs myapp
7.1 在 Linux 上通过 -e 传递环境变量
停止并删除旧容器:
docker stop myapp
docker rm myapp
重新运行,设置 GREETING 环境变量:
docker run -d --name myapp -p 5000:5000 -e GREETING="Hi there" zhangsan/my-flask-app:v1.0
刷新浏览器,应该显示 Hi there from Docker!。
7.2 使用环境变量文件
创建文件 env.list(在 Linux 上):
echo "GREETING=Welcome" > env.list
然后运行:
docker run -d --name myapp -p 5000:5000 --env-file env.list zhangsan/my-flask-app:v1.0
效果相同。
8.1 修改代码(在 Windows 上)
编辑 app.py,将返回的字符串改一下,例如:
return f'{greeting} from Docker! (Version 2)'
8.2 重新构建镜像并推送
docker build -t my-flask-app .
docker tag my-flask-app zhangsan/my-flask-app:v2.0
docker push zhangsan/my-flask-app:v2.0
也可以同时更新 latest 标签:
docker tag my-flask-app zhangsan/my-flask-app:latest
docker push zhangsan/my-flask-app:latest
8.3 在 Linux 上更新容器
拉取新镜像:
docker pull zhangsan/my-flask-app:v2.0
停止并删除旧容器:
docker stop myapp
docker rm myapp
启动新容器:
docker run -d --name myapp -p 5000:5000 zhangsan/my-flask-app:v2.0
刷新浏览器,应该看到新内容。
8.4 优化更新流程(零停机)
如果希望更新时不中断服务,可以使用滚动更新策略。简单方式:先启动一个新容器(映射不同端口),测试无误后切换端口,再删除旧容器。或者使用 Docker Compose 的 --scale 和负载均衡。对于简单学习,上述方法足够。
为了方便,可以编写 docker-compose.yml 文件,在 Linux 上直接启动。
9.1 创建 docker-compose.yml
这里需要先安装docker-compose,由于国内不能访问github,所以在线方式安装行不通,那么就先到https://github.com/docker/compose/releases/tag/v2.23.0 上下载编译好的文件,这里我选的是v2.23.0的docker-compose-linux-x86_64,兼容我的老centos7,下载完毕后,先上传到服务器上,比如放在/data下:/data/ocker-compose-linux-x86_64。
然后依次执行:
mv /data/docker-compose-linux-x86_64 /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version
在 Linux 上(例如在 WSL 的 home 目录下),创建一个文件夹 deploy,然后创建 docker-compose.yml:
version: '3'
services:
web:
image: zhangsan/my-flask-app:latest
ports:
- "5000:5000"
environment:
- GREETING=Hello from Compose
restart: always
9.2 启动
docker-compose up -d
9.3 更新
修改 docker-compose.yml 中的镜像标签为 v2.0,然后执行:
docker-compose down
docker-compose pull
docker-compose up -d
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。