docker容器内部署flask
部署docker :
第一步:下载docker服务
sudo apt-get update && sudo apt-get install -y curl gnupg && curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg && echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null && sudo apt-get update && sudo apt-get install -y docker-ce
查看docker版本:
docker --version
配置dokcer国内镜像源
# 1. 配置国内镜像源
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<
EOF
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn"
]
}
EOF
# 2. 重启 Docker 服务
sudo systemctl daemon-reload
sudo systemctl restart docker
# 3. 验证镜像源
docker info | grep -A 5 "Registry Mirrors"
# 4. 测试拉取镜像
docker run hello-world
重启docker服务
systemctl daemon-reload
systemctl restart docker.service
以下是在 Ubuntu 系统上完整操作的代码化、命令化流程,从零开始构建一个 Flask Web 服务的 Docker 镜像并运行。
所有步骤均为 可复制粘贴的终端命令,适合在 Ubuntu 20.04/22.04 等系统上执行。
✅ 目标
在 Ubuntu 上:
- 创建 Flask 项目
- 编写
Dockerfile - 构建镜像
- 运行容器
- 测试服务
最终访问 http://localhost:3000 能看到:<h1>Hello from Docker!</h1>
🧰 前提条件
确保已安装:
- Docker
- Python3 和 pip(用于本地测试,非必须)
🔧 安装 Docker(如果未安装)
# 更新包索引
sudo apt update# 安装必要依赖
sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release# 添加 Docker 官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker.gpg# 添加 Docker 仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null# 更新包索引
sudo apt update# 安装 Docker 引擎
sudo apt install -y docker-ce docker-ce-cli containerd.io# 将当前用户加入 docker 组(避免每次用 sudo)
sudo usermod -aG docker $USER# 提示用户重新登录或重启 shell
echo "✅ Docker 安装完成!请退出并重新登录,或运行: newgrp docker"
⚠️ 执行完
usermod后,请退出终端并重新登录,否则后续命令可能需要加sudo。
📁 步骤 1:创建项目目录并进入
mkdir myweb && cd myweb
📄 步骤 2:创建 app.py
cat > app.py << 'EOF'
from flask import Flaskapp = Flask(__name__)@app.route('/')
def hello():return '<h1>Hello from Docker!</h1>'if __name__ == '__main__':app.run(host='0.0.0.0', port=3000)
EOF
📄 步骤 3:创建 requirements.txt
cat > requirements.txt << 'EOF'
Flask==3.0.3
EOF
📄 步骤 4:创建 Dockerfile
cat > Dockerfile << 'EOF'
# 第一阶段:构建并安装依赖
FROM python:3.11-alpine AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --user -r requirements.txt# 第二阶段:运行环境
FROM python:3.11-alpine
WORKDIR /app
COPY --from=builder /root/.local /root/.local
COPY app.py ./
ENV PATH=/root/.local/bin:$PATH
EXPOSE 3000
CMD ["python", "app.py"]
EOF
🐳 步骤 5:构建 Docker 镜像
docker build -t myweb:v1 .
✅ 预期输出:成功构建镜像,最后显示
Successfully tagged myweb:v1
▶️ 步骤 6:运行容器
docker run -d -p 3000:3000 --name myweb myweb:v1
✅ 预期输出:一串容器 ID(如
a1b2c3d4e5f6)
🔍 步骤 7:测试服务
方法 1:使用 curl 测试
curl http://localhost:3000
✅ 预期输出:
<h1>Hello from Docker!</h1>
方法 2:浏览器访问
打开浏览器,访问:
http://localhost:3000
你应该能看到:Hello from Docker!
🔧 步骤 8:(可选)查看日志
docker logs myweb
🛑 步骤 9:(可选)停止并清理
# 停止容器
docker stop myweb# 删除容器
docker rm myweb# 删除镜像
docker rmi myweb:v1
🎯 总结:一键复制执行清单
# 1. 创建项目
mkdir myweb && cd myweb# 2. 创建 app.py
cat > app.py << 'EOF'
from flask import Flaskapp = Flask(__name__)@app.route('/')
def hello():return '<h1>Hello from Docker!</h1>'if __name__ == '__main__':app.run(host='0.0.0.0', port=3000)
EOF# 3. 创建 requirements.txt
echo "Flask==3.0.3" > requirements.txt# 4. 创建 Dockerfile
cat > Dockerfile << 'EOF'
FROM python:3.11-alpine AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --user -r requirements.txtFROM python:3.11-alpine
WORKDIR /app
COPY --from=builder /root/.local /root/.local
COPY app.py ./
ENV PATH=/root/.local/bin:$PATH
EXPOSE 3000
CMD ["python", "app.py"]
EOF# 5. 构建镜像
docker build -t myweb:v1 .# 6. 运行容器
docker run -d -p 3000:3000 --name myweb myweb:v1# 7. 测试
curl http://localhost:3000
✅ 成功标志
当你看到:
<h1>Hello from Docker!</h1>
恭喜你!你已经成功在 Ubuntu 上:
- 从零搭建了一个 Web 服务
- 使用 Docker 容器化打包
- 构建并运行了镜像
这是现代云原生开发的核心技能,继续加油!🚀
