在一台 Ubuntu 服务器上部署多个 Docker 服务是非常常见的做法。你可以通过运行多个容器来实现,每个服务使用不同的端口、配置和镜像。下面是详细的步骤和最佳实践:
✅ 前提条件
- 已安装 Docker 和 Docker Compose(推荐)
- Ubuntu 系统(18.04 或以上版本均可)
- 基本的 Linux 操作知识
🛠️ 方法一:使用 docker run 手动运行多个服务
你可以为每个服务分别运行一个容器,并指定不同的端口映射。
示例:部署 Nginx 和 MySQL
# 启动 Nginx
docker run -d
--name mynginx
-p 80:80
nginx
# 启动 MySQL
docker run -d
--name mysql
-e MYSQL_ROOT_PASSWORD=my-secret-pw
-p 3306:3306
mysql:latest
-d表示后台运行,--name是容器名,-p是端口映射。
🧱 方法二:使用 Docker Compose 编排多个服务(推荐)
Docker Compose 是管理多服务应用的最佳工具。你只需要编写一个 docker-compose.yml 文件即可定义所有服务。
示例:创建 docker-compose.yml
version: '3'
services:
web:
image: nginx
ports:
- "80:80"
container_name: myweb
db:
image: mysql:latest
environment:
MYSQL_ROOT_PASSWORD: my-secret-pw
ports:
- "3306:3306"
container_name: mydb
然后执行命令启动服务:
docker-compose up -d
使用
-d参数表示后台运行。
🔄 常用操作命令
| 操作 | 命令 |
|---|---|
| 查看运行中的容器 | docker ps |
| 查看所有容器 | docker ps -a |
| 停止所有容器 | docker stop $(docker ps -aq) |
| 删除所有容器 | docker rm $(docker ps -aq) |
| 查看日志 | docker logs <container_id> |
| 进入容器内部 | docker exec -it <container_id> bash |
📦 部署多个 Web 应用(如多个网站)
如果你要部署多个 Web 应用(比如 WordPress + Node.js + Django),可以通过 Nginx 反向X_X + 不同端口或域名 来区分。
示例结构:
| 服务 | 映射端口 | 访问方式 |
|---|---|---|
| WordPress | 8080 | http://ip:8080 |
| Node.js | 3000 | http://ip:3000 |
| Django | 8000 | http://ip:8000 |
也可以使用 Traefik 或 Nginx 做虚拟主机按域名访问。
🌐 使用自定义网络(可选)
多个容器之间通信时,建议使用自定义 Docker 网络:
docker network create mynetwork
然后在 docker run 或 docker-compose.yml 中指定网络。
🔒 安全建议
- 不要将敏感服务暴露到公网(如 MySQL 直接开放 3306)。
- 使用防火墙限制端口访问。
- 使用 HTTPS(可用 Traefik 自动申请证书)。
- 容器中尽量不要以 root 用户运行服务。
✅ 总结
| 方式 | 优点 | 适用场景 |
|---|---|---|
docker run |
快速简单 | 测试/少量服务 |
| Docker Compose | 易维护、结构清晰 | 多个服务编排 |
| Kubernetes | 强大灵活 | 生产环境大规模部署 |
如果你想具体部署某些服务(如 WordPress + Redis + MySQL),可以告诉我,我可以给你一份完整的 docker-compose.yml 示例。
是否需要?😊
ECLOUD博客