一、为什么要学习Docker?

传统应用部署经常遇到"在我本地是好的"问题,原因是开发、测试、生产环境不一致。Docker通过容器化技术解决了这一痛点,带来三大优势:

  1. 环境一致性:确保应用在任何环境运行一致

  2. 快速部署:秒级启动,简化运维流程

  3. 资源高效:比虚拟机更轻量,节省服务器资源

二、准备工作:安装Docker

Windows/Mac用户

  • 下载Docker Desktop

  • 安装后启动,看到右下角Docker图标运行正常即可

Linux用户(Ubuntu示例)

sudo apt-get update
sudo apt-get install docker.io
sudo systemctl start docker
sudo systemctl enable docker

验证安装:docker --version

三、实战:部署Python Flask应用

步骤1:创建项目文件
新建项目目录,包含以下文件:

# app.py
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello():
    return '<h1>Hello, Docker!</h1><p>这是我的第一个容器化应用</p>'

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)
# requirements.txt
flask==2.3.3

步骤2:编写Dockerfile

# 使用官方Python运行时作为父镜像
FROM python:3.9-slim

# 设置工作目录
WORKDIR /app

# 将当前目录内容复制到容器的/app目录
COPY . /app

# 安装requirements.txt中的包
RUN pip install --no-cache-dir -r requirements.txt

# 暴露端口5000
EXPOSE 5000

# 定义环境变量
ENV FLASK_APP=app.py

# 容器启动时运行flask应用
CMD ["flask", "run", "--host=0.0.0.0"]

步骤3:构建Docker镜像
在项目目录下执行:

docker build -t my-python-app .
  • -t:给镜像打标签(名称)

  • .:使用当前目录的Dockerfile

步骤4:运行容器

docker run -d -p 5000:5000 my-python-app
  • -d:后台运行

  • -p 5000:5000:端口映射(主机端口:容器端口)

步骤5:测试应用
浏览器访问:http://localhost:5000
看到欢迎页面即成功!

四、常用Docker命令速查

镜像管理

docker images                    # 查看本地镜像
docker rmi 镜像ID                # 删除镜像
docker pull 镜像名:版本          # 下载镜像

容器管理

docker ps                        # 查看运行中的容器
docker ps -a                     # 查看所有容器
docker stop 容器ID               # 停止容器
docker rm 容器ID                 # 删除容器
docker logs 容器ID               # 查看容器日志

实战技巧

# 进入容器内部(用于调试)
docker exec -it 容器ID /bin/bash

# 查看容器资源使用情况
docker stats

# 一键停止所有容器
docker stop $(docker ps -aq)
五、Dockerfile优化建议

1.使用.dockerignore文件
   避免将不必要的文件复制到镜像:

__pycache__
*.pyc
.git
.DS_Store

2.多阶段构建(适合生产环境)

# 构建阶段
FROM python:3.9 as builder
RUN pip install --user flask

# 生产阶段
FROM python:3.9-slim
COPY --from=builder /root/.local /root/.local
COPY . /app
CMD ["flask", "run"]

3.使用特定版本标签
避免使用latest标签,确保稳定性:

FROM python:3.9-slim  # 而不是 python:latest
六、遇到问题怎么办?

常见问题排查

  1. 端口被占用:换一个端口映射 -p 8080:5000

  2. 镜像构建失败:检查Dockerfile语法和文件路径

  3. 容器立即退出:检查CMD命令是否正确

调试命令

# 查看详细错误信息
docker logs 容器ID

# 交互式运行(测试用)
docker run -it my-python-app /bin/bash

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐