在 Ubuntu 服务器上部署项目,如果依赖的服务较多,手动安装和配置会非常繁琐且容易出错。使用 Docker 和 Docker Compose 可以极大地简化这个过程,实现一键部署。本文将详细介绍在 Ubuntu 上通过 Docker 与 Docker Compose 部署项目的完整指南,并分享一些实战经验。
准备工作
首先,确保你的 Ubuntu 服务器上已经安装了 Docker 和 Docker Compose。如果没有,可以使用以下命令安装:
# 更新 apt 包索引
sudo apt update
# 安装 Docker 的依赖包
sudo apt install apt-transport-https ca-certificates curl software-properties-common
# 添加 Docker 的 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 设置 Docker 仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装 Docker Engine
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
# 安装 Docker Compose
sudo apt install docker-compose-plugin
# 验证安装
docker --version
docker compose version
创建 Dockerfile
接下来,为你的项目创建一个 Dockerfile。Dockerfile 定义了如何构建 Docker 镜像。例如,一个简单的 Node.js 项目的 Dockerfile 可能如下所示:
FROM node:16 # 使用 node:16 作为基础镜像
WORKDIR /app # 设置工作目录
COPY package*.json ./ # 复制 package.json 和 package-lock.json
RUN npm install # 安装依赖
COPY . . # 复制所有文件
EXPOSE 3000 # 暴露端口
CMD ["npm", "start"] # 运行命令
编写 docker-compose.yml
docker-compose.yml 文件定义了组成你的应用程序的各个服务。例如,一个包含 Node.js 应用和 MongoDB 数据库的 docker-compose.yml 文件可能如下所示:
version: "3.8"
services:
web:
build: .
ports:
- "3000:3000"
depends_on:
- db
environment:
- NODE_ENV=production
db:
image: mongo:latest
ports:
- "27017:27017"
volumes:
- db_data:/data/db
volumes:
db_data:
这个文件定义了两个服务:web 和 db。
web服务使用当前目录下的 Dockerfile 构建镜像,将容器的 3000 端口映射到主机的 3000 端口,依赖于db服务,并设置NODE_ENV环境变量。db服务使用官方的 MongoDB 镜像,将容器的 27017 端口映射到主机的 27017 端口,并将数据存储在db_data卷中。
对于需要更高性能和稳定性的应用场景,可以考虑使用 Nginx 进行反向代理和负载均衡,提升并发连接数处理能力。如果部署在云服务器上,可以结合宝塔面板等工具进行可视化管理,简化运维工作。
部署项目
将 Dockerfile 和 docker-compose.yml 文件放在项目的根目录下。然后,在终端中进入项目根目录,执行以下命令启动项目:
docker compose up -d
这个命令会构建镜像并启动所有服务。-d 参数表示在后台运行。
常见问题与解决方案
- 端口冲突: 确保你使用的端口没有被其他程序占用。如果端口冲突,可以在 docker-compose.yml 文件中修改端口映射。
- 镜像构建失败: 检查 Dockerfile 是否正确,例如基础镜像是否存在,依赖是否正确安装。
- 容器无法启动: 查看容器的日志,了解容器启动失败的原因。可以使用
docker logs <container_id>命令查看日志。 - 数据卷挂载问题: 检查数据卷是否正确挂载。如果数据卷没有正确挂载,数据可能会丢失。
总结
通过 Docker 和 Docker Compose,我们可以轻松地在 Ubuntu 服务器上部署复杂的项目。掌握 在 Ubuntu 上通过 Docker 与 Docker Compose 部署项目的完整指南 ,能够极大地提高开发和部署效率。希望本文能够帮助你更好地使用 Docker Compose,并避免一些常见的坑。
冠军资讯
码农张三