Windows / Linux 中如何使用 Docker 部署项目
适合开发者从零起步理解 Docker + Compose 实践流程。
🧩 一、Docker 是什么?
Docker 可以理解为一个“轻量级虚拟机系统”,
它让你把应用及其依赖(Python、Node、数据库等)打包成镜像,
然后随时随地启动运行,避免“我这能跑你那不能跑”的问题。
🪟 二、Windows 下:从零部署项目到 Docker
1️⃣ 安装 Docker Desktop
-
看这篇文章:
👉 在 Windows 上安装 Docker Desktop -
安装完成后,打开 PowerShell 测试:
docker version
若显示版本号说明安装成功。
💡Docker Desktop 实际运行在 WSL2 虚拟机中,本质是 Linux 环境。
2️⃣ 准备项目
假设我们要部署一个简单的 Flask 项目:
C:\myproject├─ app.py├─ requirements.txt└─ Dockerfile
app.py
from flask import Flask
app = Flask(__name__)@app.route('/')
def home():return "Hello Docker from Windows!"
requirements.txt
flask
3️⃣ 编写 Dockerfile
FROM python:3.10-slim
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
EXPOSE 8080
CMD ["python", "app.py"]
4️⃣ 构建镜像
cd C:\myproject
docker build -t my-flask-app .
5️⃣ 运行容器
docker run -d -p 8080:8080 --name flask-demo my-flask-app
访问
👉 http://localhost:8080
6️⃣ Windows 文件挂载
例如想让容器读取本地日志:
docker run -d -p 8080:8080 \-v /c/myproject/logs:/app/logs \my-flask-app
注意路径前的 /c/...
格式,这是 Windows Docker 的路径映射方式。
🐧 三、Linux 下(以 CentOS7 为例)
1️⃣ 安装 Docker CE
sudo yum remove docker docker-common docker-selinux docker-engine
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce
sudo systemctl enable docker
sudo systemctl start docker
docker version
2️⃣ 创建项目目录
mkdir -p /opt/my-flask-app
cd /opt/my-flask-app
app.py
from flask import Flask
app = Flask(__name__)@app.route('/')
def home():return "Hello Docker from Linux!"
requirements.txt
flask
Dockerfile
FROM python:3.10-slim
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
EXPOSE 8080
CMD ["python", "app.py"]
3️⃣ 构建与运行
docker build -t my-flask-app .
docker run -d -p 8080:8080 --name flask-demo my-flask-app
浏览器访问:
http://<服务器IP>:8080
4️⃣ 映射宿主机路径(日志或配置)
docker run -d \-p 8080:8080 \-v /home/tomcatlog/jkwh_app_out.log:/app/logs/current.log \-v /home/tomcatlog/backuplog:/app/backuplog \my-flask-app
⚙️ 四、docker-compose:让部署更简单
1️⃣ 为什么需要 docker-compose?
如果一个项目包含多个服务,比如:
- Flask Web 后端
- MySQL 数据库
- Redis 缓存
那你得启动三个容器,命令很繁琐。
用 docker-compose.yml
文件就可以一键启动全部。
2️⃣ docker-compose.yml 示例
在项目根目录下新建:
version: "3.8"services:web:build: .container_name: flask-webports:- "8080:8080"depends_on:- db- redisenvironment:- DATABASE_URL=mysql://root:123456@db/mydb- REDIS_HOST=redisdb:image: mysql:8container_name: mysql-dbrestart: alwaysenvironment:MYSQL_ROOT_PASSWORD: 123456MYSQL_DATABASE: mydbvolumes:- db_data:/var/lib/mysqlredis:image: redis:latestcontainer_name: redis-cacherestart: alwaysvolumes:db_data:
3️⃣ 启动与管理命令
# 启动全部服务(后台模式)
docker compose up -d# 停止并清理
docker compose down# 查看状态
docker compose ps# 查看实时日志
docker compose logs -f
4️⃣ 在你的日志可视化系统中使用
比如你要部署的日志系统 /opt/log-visualizer
,可以这样写:
version: "3.8"services:log-viewer:build: .container_name: log-viewerports:- "8080:8080"volumes:- /home/tomcatlog/jkwh_app_out.log:/app/logs/current.log- /home/tomcatlog/backuplog:/app/backuplogrestart: always
然后执行:
docker compose up -d
即可部署运行。
后期如果你想加入 ElasticSearch、Grafana 等模块,
只需在这个文件中新增 services:
节点,非常方便。
🧠 五、Docker 常用命令速查
操作 | 命令 |
---|---|
查看运行中容器 | docker ps |
查看所有容器 | docker ps -a |
查看容器日志 | docker logs -f 容器名 |
进入容器终端 | docker exec -it 容器名 /bin/bash |
停止容器 | docker stop 容器名 |
删除容器 | docker rm 容器名 |
删除镜像 | docker rmi 镜像名 |
查看占用空间 | docker system df |
🧩 六、Windows 与 Linux 对比总结
项目 | Windows | Linux |
---|---|---|
安装方式 | Docker Desktop(图形化) | Docker CE(命令行) |
容器环境 | 运行在 WSL2 虚拟机 | 原生 Linux |
文件路径 | /c/... | 直接用 /home/... |
网络访问 | localhost | 使用服务器 IP |
性能 | 稍慢 | 更高效、更稳定 |
推荐用途 | 开发测试 | 正式部署 |
✅ 七、总结一句话
工具 | 作用 |
---|---|
Dockerfile | 定义“镜像怎么构建” |
docker run | 启动单个容器 |
docker-compose.yml | 描述“多个容器如何协作运行” |
docker compose up -d | 一键部署整套系统 |