docker-compose方式部署docker项目

本文使用docker-compose方式部署mysql、redis、minio、后端项目、前端项目。

整体目录:

说明:

  • data:存放启动命令
  • html:存放前端html、js代码
  • jar:存放jar包
  • minio:存放minio配置
  • mysql:存放mysql配置
  • nginx:存放nginx配置
  • redis:存放redis配置
  • daemon.json:存放国内镜像源
  • 如果是在windows上部署docker服务,则需要安装git,使用git中的sh命令

data


compose-up.sh

bash 复制代码
#docker-compose up -d
docker-compose -f D:\\gxc\\data\\docker-compose.yml up -d  # docker-compose路径
echo "执行成功 $?"

createimages.sh

bash 复制代码
#!/bin/bash
# 确保Docker命令执行成功
# 删除之前的镜像,重新构建镜像
docker rm -f gxc_tenant
docker rmi gxc_tenant:1.0
docker build -t gxc_tenant:1.0 D:\\gxc\\jar
# 删除之前的镜像,重新构建镜像
docker rm -f vue_tenant
docker rmi vue_tenant:1.0
docker build -t vue_tenant:1.0 D:\\gxc\\html\\
sh compose-up.sh
echo "执行成功 $?"

docker-compose.yml

bash 复制代码
version: '1.0'
services:
  mysql:
    restart: always
    privileged: true
    image: mysql:8.0
    container_name: mysql
    volumes:
       - D:\\gxc\\mysql\\conf:/etc/mysql/conf.d
       - D:\\gxc\\mysql\\log:/var/logs
       - D:\\gxc\\mysql\\data:/var/lib/mysql
    command:
       --character-set-server=utf8mb4
       --collation-server=utf8mb4_general_ci
       --explicit_defaults_for_timestamp=true
    environment:
       MYSQL_DATABASE: 'gxc_tenant'						# 项目数据库名
       MYSQL_ROOT_PASSWORD: '123456'
       TZ: Asia/Shanghai
       MYSQL_LC_CTYPE_MAPPINGS: on  # 设置不区分大小写
    ports:
       - 13306:3306
       - 13307:33060
    networks:
      data_security:
        ipv4_address: 192.128.0.10
  redis:
    image: redis:latest
    restart: always
    container_name: redis
    environment:
      - TZ=Asia/Shanghai  # 替换为你的本地时区
    ports:
      - 16379:6379
    volumes: # 数据卷,目录挂载
      - D:\\gxc\\redis\\conf\\redis.conf:/usr/local/etc/redis/redis.conf
      - D:\\gxc\\redis\\data:/data
    networks:
      data_security:
        ipv4_address: 192.128.0.20
    command: redis-server /usr/local/etc/redis/redis.conf # 覆盖容器启动后默认执行的命令  
  minio:
    image: "minio/minio"
    container_name: minio
    restart: always
    ports:
      - "19000:9000"
      - "19001:9001"
    volumes:
      - D:\\gxc\\minio\\data:/data
      - D:\\gxc\\minio\\config:/root/.minio
    command: server  /data --console-address ":9001"
    environment:
      - TZ=Europe/Berlin  # 替换为你的本地时区
      - MINIO_ROOT_USER=minioadmin # 登录web console的用户名
      - MINIO_ROOT_PASSWORD=minioadmin # 登录web console的密码
    networks:
      data_security:
        ipv4_address: 192.128.0.30
  gxc_tenant:
    image: gxc_tenant:1.0
    container_name: gxc_tenant
    ports:
      - 8086:8086
    restart: always
    environment:
      - TZ=Asia/Shanghai  # 替换为你的本地时区
    volumes:
      - D:\\gxc\\jar\\:/eitc_tenant
#      - /usr/share/fonts/Fonts:/usr/share/fonts # 读取本地字体
    logging:
      driver: json-file
      options:
        max-size: "10m"
        max-file: "3"
    depends_on:
      - mysql
      - redis
      - minio
    networks:
      data_security:
        ipv4_address: 192.128.0.40

  vue_tenant:
    image: vue_tenant:1.0
    container_name: vue_tenant
    ports:
      - 9086:9086
    environment:
      - TZ=Asia/Shanghai  # 替换为你的本地时区
    volumes:
      - D:\\gxc\\nginx\\conf\\nginx.conf:/etc/nginx/nginx.conf
      - D:\\gxc\\nginx\\conf\\conf.d:/etc/nginx/conf.d
      - D:\\gxc\\nginx\\log:/var/log/nginx
#      因为项目代码要跟着镜像走,所以前端代码不做挂载
#      - /home/gxc_tenant/html/dist:/usr/share/nginx/html
    restart: always
    depends_on:
      - gxc_tenant
    networks:
      data_security:
        ipv4_address: 192.128.0.50
    privileged: true      # 这个必须要,解决nginx的文件调用的权限问题

networks:
  data_security:      # 自定义网络名字
    driver: bridge 
    ipam:
      config:
        - subnet: 192.128.0.0/24       #自定义固定容器ip 实现容器间通讯,增强docker-compose项目可移植性

html


dist 存放前端打的包
Dockerfile

bash 复制代码
# 基于Node镜像来构建我们的前端环境
FROM nginx:latest
# 暴露80端口(Nginx默认端口)
EXPOSE 9086
# 从Node镜像中复制构建的文件到Nginx的服务目录
COPY ./dist /usr/share/nginx/html
# 启动Nginx服务器
CMD ["nginx", "-g", "daemon off;"]

vue-build.sh前端启用脚本

bash 复制代码
#!/bin/bash
# 确保Docker命令执行成功
# 删除之前的镜像,重新构建镜像
docker rm -f vue_tenant
docker rmi vue_tenant:1.0
docker build -t vue_tenant:1.0 D:\\gxc\\html\\; 
echo "执行成功 $?"

jar

Dockerfile

bash 复制代码
# 使用OpenJDK作为基础镜像  
FROM openjdk:8-jre-alpine
# 设置工作目录  
WORKDIR /data_tenant  
# 将本地的JAR包复制到容器的/app目录下  
COPY gxc-tenant.jar /data_tenant/  
# 设置环境变量,指定JAR包名  
ENV JAR_FILE=gxc-tenant.jar 
# RUN apk add --update ttf-dejavu fontconfig
# 暴露应用的端口(根据你的应用需要修改)  
EXPOSE 8086
# 启动命令  
# CMD ["java", "-jar", "$JAR_FILE"]
ENTRYPOINT java -jar /data_tenant/gxc-tenant.jar

创建桥接网络:

bash 复制代码
docker network create --driver bridge --subnet 192.168.0.0/24 data_security

解决端口总是占用问题:本地没有占用端口,还是展示

bash 复制代码
docker network prune
相关推荐
行云流水剑4 小时前
【学习记录】宝塔面板 + Docker 快速部署 RustDesk 自建远程控制服务器
服务器·docker·开源·p2p·rustdesk
evo-master4 小时前
linux问题10--克隆后ip地址和源linux主机相同
linux·运维·服务器
sayhi_yang4 小时前
服务器上搭建支持GPU的DL+LLM Docker镜像
运维·服务器·docker
一匹电信狗6 小时前
【MySQL】数据库基础
linux·运维·服务器·数据库·mysql·ubuntu·小程序
FL16238631296 小时前
VMware运行python脚本提示libGL error: MESA-LOADER: failed to open swrast
linux·运维·服务器
致宏Rex6 小时前
Docker 完整教程 | 从基础到实战 (1-2)
运维·docker·容器
東雪蓮☆6 小时前
Dockerfile 镜像构建实战
linux·运维·docker
未来之窗软件服务6 小时前
操作系统应用开发(十四)RustDesk服务器配置——东方仙盟筑基期
运维·服务器·远程桌面·rustdesk·仙盟创梦ide·东方仙盟
東雪蓮☆7 小时前
Docker 资源限制与性能优化(CPU / 内存 / IO 管控实战)
linux·运维·docker
爱码社长8 小时前
centos8安装docker【新】
运维·docker·容器