docker-compose部署Springboot

docker-compose部署Springboot

1.环境准备

目录构建

此目录结构用于docker-compose执行挂载

├── mysql
│   ├── data
│   └── init.sql
├── redis
│   ├── data
│   └── redis.conf
├── nginx
│   ├── config  
│   │   ├── default.conf    # 默认的配置文件
│   └── app     # 存放前端打包后的文件
├── java
│   ├── Dockerfile  # 构建java容器
│   └── app.jar     
└── LICENSE

default.conf

server {
    listen 80;
    server_name localhost;
    location / {
        root   /server;
        index  index.html index.htm;
        try_files $uri  $uri/ /index.html;
    }
    location /api {
        client_max_body_size 50M;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://java-container:8096; # 此处用容器名称代替IP地址
        rewrite ^.api/?(.*)$ /$1 break;
        proxy_http_version 1.1;
        proxy_read_timeout 3600s;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
    }
}

Dockerfile


FROM  openjdk:8-jdk

MAINTAINER author

RUN mkdir -p /home/server

RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone

WORKDIR /home/server

# 端口
ENV API_PORT=8096

#启动自行加载
ENV PARAMS="--server.port=${API_PORT} --spring.profiles.active=docker,auth,framework "

ENTRYPOINT ["/bin/sh","-c","java -Dfile.encoding=utf8 -Djava.security.egd=file:/dev/./urandom -jar /home/server/engine-api.jar ${PARAMS}"]

2.docker-compose

version: '3'
services:
  mysql:
    image: mysql:8.0
    container_name: mysql-container
    environment:
      MYSQL_ROOT_PASSWORD: "you-password"
      TZ: "Asia/Shanghai"
#    ports:
#      - "3306:3306"
    volumes:
      - ./mysql/data:/var/lib/mysql  # mysql数据存储目录挂载
      - ./mysql/init.sql:/docker-entrypoint-initdb.d/init.sql #初始化mysql容器时sql脚本  
    command:
      --max_connections=1000
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --default-authentication-plugin=mysql_native_password
    networks:
      - my-network

  redis:
    image: redis:3.2
    container_name: redis-container
#    ports:
#      - "6379:6379"
    command: redis-server --requirepass 'you-password'
    volumes:
      - ./redis/data:/data
      - ./redis/redis.conf:/usr/local/etc/redis/redis.conf  # 映射 Redis 配置文件
    networks:
      - my-network
      
  nginx:
    image: nginx:1.22
    container_name: nginx-container
    ports:
      - "80:80"
    volumes:
      - ./nginx/config/:/etc/nginx/conf.d
      - ./nginx/app:/server
    networks:
      - my-network

  java:
    container_name: java-container
    build:
      context: ./java
      dockerfile: Dockerfile
    volumes:
      - ./java:/home/server
    networks:
      - my-network

networks:
  my-network:
    driver: bridge

注意:java配置文件中的mysql、redis连接地址修改为对应容器名称

每次jar包版本更新之后,只需要替换./java目录下的jar包,然后重启java-container容器

docker-compose restart java-container

同理nginx配置文件更新之后,只需要重启nginx-container容器

docker-compose restart nginx-container

docker-compose常用命令

  • docker-compose up:启动容器组,根据 docker-compose.yml 文件中的配置创建和启动容器。

  • docker-compose down:停止并移除容器组,包括容器、网络和卷等相关资源。

  • docker-compose ps:显示当前运行的容器组中的容器状态。

  • docker-compose logs:显示容器组中的容器日志。

  • docker-compose exec:在运行的容器中执行命令。

  • docker-compose build:根据 docker-compose.yml 文件中的配置构建镜像。

  • docker-compose images:列出容器组中使用的镜像。

  • docker-compose pull:拉取在 docker-compose.yml 文件中定义的服务所使用的镜像。

  • docker-compose restart:重启容器组中的服务。

  • docker-compose stop:停止容器组中的服务。

  • docker-compose pause:暂停容器组中的服务。

  • docker-compose unpause:取消暂停容器组中的服务。

  • docker-compose down -v:停止并移除容器组,并移除所有相关的卷。

  • docker-compose down --rmi all 会停止容器并删除容器相关资源,还会删除与服务关联的所有镜像。

  • docker-compose config:验证并显示合并后的 Compose 文件。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值