欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > 使用docker-compose部署一个springboot项目(包含Postgres\redis\Mongo\Nginx等环境)

使用docker-compose部署一个springboot项目(包含Postgres\redis\Mongo\Nginx等环境)

2025/5/20 1:28:05 来源:https://blog.csdn.net/weixin_40986713/article/details/143200374  浏览:    关键词:使用docker-compose部署一个springboot项目(包含Postgres\redis\Mongo\Nginx等环境)

准备 Docker 环境

Linux

# 安装 Docker
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
systemctl enable --now docker
# 安装 docker-compose
curl -L https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
# 验证安装
docker -v
docker-compose -v
# 如失效,自行百度~

MacOS

推荐直接使用 Orbstack。可直接通过 Homebrew 来安装:

brew install orbstack

或者直接下载安装包进行安装。

Windows

我们建议将源代码和其他数据绑定到 Linux 容器中时,将其存储在 Linux 文件系统中,而不是 Windows 文件系统中。

  • docker官网首页https://www.docker.com/ 下载windows版本的Docker Desktop。

  • 也可以选择直接使用 WSL 2 后端在 Windows 中安装 Docker Desktop。

  • 也可以直接在 WSL 2 中安装命令行版本的 Docker

创建docker-compose.yml文件

新建一个部署项目文件夹,例如myproject文件夹,进入文件夹,创建一个docker-compose.yml文件,修改docker-compose.yml文件内的配置如下:

version: '1.4'
services:postgres:image: postgres:12.20container_name: postgresrestart: alwaysports: # 生产环境建议不要暴露- "5432:5432"networks:- digital-twinenvironment:POSTGRES_USER: usernamePOSTGRES_PASSWORD: passwordPOSTGRES_DB: postgresvolumes:- ./postgres/data:/var/lib/postgresql/datamongo:image: mongo:8.0container_name: mongorestart: alwaysports:- "27017:27017"networks:- digital-twinenvironment:MONGO_INITDB_ROOT_USERNAME: rootMONGO_INITDB_ROOT_PASSWORD: examplevolumes:- ./mongo/data:/data/dbredis:image: redis:7.4.1container_name: redisnetworks:- digital-twinrestart: alwaysports:- "6379:6379"environment:- REDIS_PASSWORD=tarzan123456command: >sh -c "redis-server --requirepass $$REDIS_PASSWORD"volumes:- ./redis/data:/data # 持久化数据,将容器内的 /data 目录映射到宿主机的当前目录下的 data 文件夹web:image: nginx:1.26.2container_name: nginx-webvolumes:- ./nginx/nginx.conf:/etc/nginx/nginx.conf- ./nginx/html:/usr/share/nginx/html- ./nginx/logs:/var/log/nginxports:- "80:80"networks:- digital-twindigital-twin:container_name: coalface-safetyimage: tarzan/coalface-safety:v1.4ports:- "12000:12000"networks:- digital-twindepends_on:- mongo- postgres- redisrestart: alwaysenvironment:- SPRING_DATA_MONGODB_URI=mongodb://root:example@mongo:27017/work_face?authSource=admin- SPRING_DATASOURCE_URL=jdbc:postgresql://postgres:5432/coalface_safety- SPRING_DATASOURCE_USERNAME=username- SPRING_DATASOURCE_PASSWORD=password- SPRING_REDIS_HOST=redis- SPRING_REDIS_PASSWORD=tarzan123456- OPC_TCP=opc.tcp://10.16.91.47:12685
networks:digital-twin:

配置解读

这份 docker-compose.yml 文件定义了一个多服务的 Docker 组合,用于部署一个包含 PostgreSQL、MongoDB、Redis 和 Nginx 的 Web 应用程序,以及一个名为 digital-twin 的自定义应用。下面是对该文件的逐行详细解读:

版本声明

version: '1.4'

指定了此 docker-compose 文件遵循的是版本 1.4 的规范。不同的版本之间可能存在语法差异,因此指定版本是非常重要的。

服务定义

services:

这是所有服务的开始标签,每个服务都是一个独立运行的应用程序或数据库实例。

PostgreSQL 数据库
  postgres:image: postgres:12.20container_name: postgresrestart: alwaysports:- "5432:5432"networks:- digital-twinenvironment:POSTGRES_USER: usernamePOSTGRES_PASSWORD: passwordPOSTGRES_DB: postgresvolumes:- ./postgres/data:/var/lib/postgresql/data
  • image: 使用的镜像是 postgres:12.20,即 PostgreSQL 数据库的版本 12.20。
  • container_name: 容器启动后,其名称将设置为 postgres
  • restart: 设置为 always,意味着无论退出代码为何,Docker 都会自动重启容器。
  • ports: 将容器内的端口 5432 映射到宿主机的端口 5432
  • networks: 容器将连接到名为 digital-twin 的网络。
  • environment: 设置了 PostgreSQL 的环境变量,包括用户名、密码和初始创建的数据库名。
  • volumes: 将本地文件夹 ./postgres/data 映射到容器内的 /var/lib/postgresql/data,以便持久化存储数据库文件。
MongoDB 数据库
  mongo:image: mongo:8.0container_name: mongorestart: alwaysports:- "27017:27017"networks:- digital-twinenvironment:MONGO_INITDB_ROOT_USERNAME: rootMONGO_INITDB_ROOT_PASSWORD: examplevolumes:- ./mongo/data:/data/db
  • image: 使用的镜像是 mongo:8.0
  • container_name: 容器启动后,其名称将设置为 mongo
  • restart: 设置为 always
  • ports: 将容器内的端口 27017 映射到宿主机的端口 27017
  • networks: 容器将连接到名为 digital-twin 的网络。
  • environment: 设置了 MongoDB 的环境变量,包括初始化用户和密码。
  • volumes: 将本地文件夹 ./mongo/data 映射到容器内的 /data/db
Redis 缓存服务器
  redis:image: redis:7.4.1container_name: redisnetworks:- digital-twinrestart: alwaysports:- "6379:6379"environment:- REDIS_PASSWORD=tarzan123456command: >sh -c "redis-server --requirepass $$REDIS_PASSWORD"volumes:- ./redis/data:/data
  • image: 使用的镜像是 redis:7.4.1
  • container_name: 容器启动后,其名称将设置为 redis
  • networks: 容器将连接到名为 digital-twin 的网络。
  • restart: 设置为 always
  • ports: 将容器内的端口 6379 映射到宿主机的端口 6379
  • environment: 设置了 Redis 的密码环境变量。
  • command: 启动 Redis 服务时需要提供密码。
  • volumes: 将本地文件夹 ./redis/data 映射到容器内的 /data
Nginx Web 服务器
  web:image: nginx:1.26.2container_name: nginx-webvolumes:- ./nginx/nginx.conf:/etc/nginx/nginx.conf- ./nginx/html:/usr/share/nginx/html- ./nginx/logs:/var/log/nginxports:- "8080:80"networks:- digital-twin
  • image: 使用的镜像是 nginx:1.26.2
  • container_name: 容器启动后,其名称将设置为 nginx-web
  • volumes: 映射了 Nginx 的配置文件、静态文件目录和日志目录。
  • ports: 将容器内的端口 80 映射到宿主机的端口 8080
  • networks: 容器将连接到名为 digital-twin 的网络。
自定义应用 digital-twin
  digital-twin:container_name: coalface-safetyimage: tarzan/coalface-safety:v1.4ports:- "12000:12000"networks:- digital-twindepends_on:- mongo- postgres- redisrestart: alwaysenvironment:- SPRING_DATA_MONGODB_URI=mongodb://root:example@mongo:27017/work_face?authSource=admin- SPRING_DATASOURCE_URL=jdbc:postgresql://postgres:5432/coalface_safety- SPRING_DATASOURCE_USERNAME=username- SPRING_DATASOURCE_PASSWORD=password- SPRING_REDIS_HOST=redis- SPRING_REDIS_PASSWORD=tarzan123456- OPC_TCP=opc.tcp://10.16.91.47:12685
  • image: 使用的镜像是 tarzan/coalface-safety:v1.4
  • container_name: 容器启动后,其名称将设置为 coalface-safety
  • ports: 将容器内的端口 12000 映射到宿主机的端口 12000
  • networks: 容器将连接到名为 digital-twin 的网络。
  • depends_on: 指定了依赖的服务列表,这些服务在启动之前会被先启动。
  • restart: 设置为 always
  • environment: 设置了一系列环境变量,用于配置应用程序连接到 MongoDB、PostgreSQL 和 Redis 的方式,以及其他配置选项如 OPC UA 服务器地址。

网络定义

networks:digital-twin:

这里定义了一个名为 digital-twin 的网络,所有的服务都会连接到这个网络上,以便它们可以互相通信。

启动容器

docker-compose.yml 同级目录下执行。请确保docker-compose版本最好在2.17以上,否则可能无法执行自动化命令。

# 启动容器
docker-compose up -d

docker-compose up -d 是一个常用的命令,用于启动并运行 Docker Compose 文件中定义的所有服务。这个命令的具体含义如下:

docker-compose

这是调用 Docker Compose 工具的命令。Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过使用 YAML 文件来配置应用程序的服务,你可以轻松地管理一个应用的服务群组。

up

up 命令是 Docker Compose 中用来启动和创建项目中的服务。它执行以下操作:

  • 构建或者重新构建服务中定义的任何镜像。
  • 如果存在已停止的容器,则会启动这些容器。
  • 如果没有容器存在,它会创建并启动新的容器。
  • 如果有需要更新的容器(例如,如果服务的配置已经改变),它会停止并移除旧的容器,然后创建新的容器。

-d

-d 参数代表“detached”模式,即后台运行模式。这意味着当您运行 docker-compose up -d 命令时,Docker 会在后台启动并运行所有服务,并立即将控制台返回给您,而不是保持控制台占用状态显示服务的日志输出。

总结

所以,当你运行 docker-compose up -d 命令时,实际上是告诉 Docker Compose 根据当前目录下的 docker-compose.yml 文件中的配置,在后台启动并运行所有定义的服务。这对于生产环境中部署应用非常有用,因为您可以立即获得控制台访问权限,而服务则在后台持续运行。

示例命令执行流程

  1. 解析 docker-compose.yml 文件:Docker Compose 读取 docker-compose.yml 文件中的配置信息。
  2. 构建镜像(如果需要):根据配置文件中的 build 指令构建所需的 Docker 镜像。
  3. 启动或创建容器:对于每个服务,如果已经有容器存在,则启动这些容器;如果没有,则创建新容器并启动。
  4. 后台运行:由于 -d 参数的存在,所有服务都在后台运行,不会阻塞终端。

注意事项

  • 在使用 docker-compose up -d 命令前,请确保当前工作目录下有一个有效的 docker-compose.yml 文件。
  • 如果你想查看服务的日志输出,可以使用 docker-compose logs 命令。
  • 如果你需要停止所有服务,可以使用 docker-compose down 命令。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com