项目标题:基于 Docker 的云之盟项目
简介:
本项目旨在展示如何使用 Docker 技术构建和部署一个简单的 Web 应用程序,并通过 Docker Compose 实现多容器管理。同时,我们将使用 GitLab CI/CD 实现持续集成和持续交付,以便在代码更新后自动进行构建和部署。
项目架构:
项目包含三个服务:Web 应用、数据库和 Nginx 反向代理。Web 应用服务使用 Node.js 构建,数据库服务使用 MySQL 镜像,Nginx 用于反向代理。
** 步骤概述:**
-
安装 Docker 和 Docker Compose
-
创建项目文件夹和文件结构
-
编写应用程序代码和配置文件
-
编写 Dockerfile 和 Docker Compose 文件
-
构建和运行容器
-
配置 Nginx 反向代理
-
设置持续集成和持续交付
** 具体步骤:** -
安装 Docker 和 Docker Compose:
根据您的操作系统,参考 Docker 官方文档进行 Docker 和 Docker Compose 的安装:https://docs.docker.com/get-docker/
- 创建项目文件夹和文件结构:
在您的工作目录中创建一个项目文件夹,然后创建以下文件结构:
my_cloud_project/
|-- docker-compose.yml
|-- web/
|-- Dockerfile
|-- app.js
|-- package.json
|-- db/
|-- Dockerfile
|-- nginx/
|-- Dockerfile
|-- nginx.conf
|-- .gitlab-ci.yml
- 编写应用程序代码和配置文件:
在 web/
文件夹中编写 Node.js Web 应用程序代码。例如,在 app.js
中编写一个简单的 Express.js 服务器:
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Hello, 云之盟 Web App!');
});
app.listen(3000, () => {
console.log('Web App is running on http://localhost:3000');
});
- 编写 Dockerfile 和 Docker Compose 文件:
编写 web/Dockerfile
:
FROM node:14
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]
编写 db/Dockerfile
:
FROM mysql:5.7
ENV MYSQL_ROOT_PASSWORD example_password
ENV MYSQL_DATABASE my_database
EXPOSE 3306
编写 nginx/Dockerfile
:
FROM nginx:latest
COPY nginx.conf /etc/nginx/conf.d/default.conf
编写 nginx/nginx.conf
:
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://web:3000;
}
}
编写 docker-compose.yml
:
version: '3'
services:
web:
build:
context: ./web
dockerfile: Dockerfile
ports:
- "80:3000"
depends_on:
- db
networks:
- my_network
db:
build:
context: ./db
dockerfile: Dockerfile
environment:
MYSQL_ROOT_PASSWORD: example_password
MYSQL_DATABASE: my_database
volumes:
- db_data:/var/lib/mysql
networks:
- my_network
nginx:
build:
context: ./nginx
dockerfile: Dockerfile
ports:
- "80:80"
depends_on:
- web
networks:
- my_network
volumes:
db_data:
networks:
my_network:
- 构建和运行容器:
在项目根目录下运行以下命令构建和运行容器:
docker-compose up -d --build
- 配置 Nginx 反向代理:
根据前面提供的 nginx/nginx.conf
文件内容,设置 Nginx 反向代理,将流量代理到 Web 应用容器。
- 设置持续集成和持续交付:
CI/CD 配置:
.gitlab-ci.yml:
stages:
- build
- test
- deploy
variables:
IMAGE_NAME: my_cloud_app
CONTAINER_NAME: my_cloud_container
build:
stage: build
script:
- docker-compose build
- docker tag $IMAGE_NAME:latest registry.example.com/$IMAGE_NAME:latest
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN registry.example.com
- docker push registry.example.com/$IMAGE_NAME:latest
test:
stage: test
script:
- docker-compose -f docker-compose.yml -f docker-compose.test.yml up --abort-on-container-exit
deploy:
stage: deploy
script:
- ssh user@example.com "docker pull registry.example.com/$IMAGE_NAME:latest && docker stop $CONTAINER_NAME && docker rm $CONTAINER_NAME && docker run -d -p 80:80 --name $CONTAINER_NAME registry.example.com/$IMAGE_NAME:latest"
only:
- master
根据您使用的 CI/CD 工具(如 GitLab CI/CD)的配置,设置持续集成和持续交付。这将使您在代码更新后自动构建和部署应用程序。
总结:
以上是一个简要的步骤概述和详细的实现步骤,用于构建基于 Docker 的云之盟项目。实际项目中,您可能还需要添加更多组件和配置,比如数据库连接池、负载均衡、健康检查、
日志处理等。根据项目的实际需求,您可能还需要调整 Dockerfile、Docker Compose 文件和 Nginx 配置。确保在每个步骤中仔细检查和测试,以确保项目的稳定性和安全性。