前言
Docker 已经成为后端开发和运维的必备技能。无论是本地开发环境搭建,还是线上服务部署,掌握 Docker 都能大幅提升效率。本文从核心概念出发,整理最常用的 Docker 命令,并通过一个实战示例,带你完成"编写 Dockerfile → 构建镜像 → 运行容器 → 使用 docker-compose 编排"的完整流程。
一、Docker 核心概念
- 镜像(Image):只读模板,包含运行应用所需的代码、运行时、库和配置。
- 容器(Container):镜像的运行实例,相互隔离,可启动、停止、删除。
- 仓库(Registry):存放镜像的地方,如 Docker Hub、阿里云镜像仓库。
- Dockerfile:描述如何构建镜像的文本文件。
- docker-compose:用于定义和运行多容器应用的工具。
二、常用命令速查
1. 镜像相关
bash
# 拉取镜像
docker pull nginx:latest
# 查看本地镜像
docker images
# 删除镜像
docker rmi nginx:latest
# 构建镜像(-t 指定名称和标签,. 表示当前目录)
docker build -t myapp:1.0 .
2. 容器相关
bash
# 运行容器(-d 后台运行,-p 端口映射,--name 指定名称)
docker run -d -p 8080:80 --name mynginx nginx:latest
# 查看运行中的容器
docker ps
# 查看所有容器(包括已停止)
docker ps -a
# 停止 / 启动 / 重启容器
docker stop mynginx
docker start mynginx
docker restart mynginx
# 进入容器内部
docker exec -it mynginx /bin/bash
# 查看容器日志
docker logs -f mynginx
# 删除容器
docker rm -f mynginx
3. 其他常用命令
bash
# 查看容器资源占用
docker stats
# 查看容器详细信息
docker inspect mynginx
# 清理无用镜像、容器、网络
docker system prune -a
三、实战:用 Docker 部署一个 Python Flask 应用
1. 项目结构
text
flask-demo/
├── app.py
├── requirements.txt
└── Dockerfile
2. 编写应用代码
app.py:
python
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello, Docker!"
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000)
requirements.txt:
text
flask==3.0.0
3. 编写 Dockerfile
dockerfile
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 5000
CMD ["python", "app.py"]
4. 构建并运行
bash
docker build -t flask-demo:1.0 .
docker run -d -p 5000:5000 --name flask-demo flask-demo:1.0
浏览器访问 http://localhost:5000,看到 Hello, Docker! 即部署成功。
四、使用 docker-compose 编排多容器应用
如果应用需要依赖 MySQL、Redis 等服务,手动 docker run 会比较繁琐。这时可以使用 docker-compose.yml。
示例:Flask + Redis
yaml
version: "3.8"
services:
web:
build: .
ports:
- "5000:5000"
depends_on:
- redis
redis:
image: redis:7-alpine
ports:
- "6379:6379"
启动:
bash
docker-compose up -d
停止并删除:
bash
docker-compose down
五、常见问题
-
端口被占用
修改
-p前面的宿主机端口,如-p 8081:80。 -
容器启动后立即退出
查看日志:
docker logs 容器名,通常是启动命令写错或缺少前台进程。 -
构建镜像很慢
配置国内镜像加速器,或在 Dockerfile 中合理利用缓存(先 COPY 依赖文件,再安装依赖)。
-
修改代码后容器内不生效
开发阶段可以挂载目录:
docker run -v $(pwd):/app ...,生产环境建议重新构建镜像。
六、总结
Docker 的核心用法可以概括为:
- 镜像 :用 Dockerfile 定义,
docker build构建。 - 容器 :用
docker run启动,docker exec进入调试。 - 多容器:用 docker-compose 编排,一条命令启动整套环境。
掌握这些,基本可以覆盖日常开发和部署的大部分场景。建议先从部署一个简单应用开始,熟悉后再逐步深入网络、数据卷、镜像优化等高级话题。