构建java前后端应用程序的通用docker镜像

构建java前后端应用程序的通用docker镜像

本文地址:https://www.cnblogs.com/muphy/p/16311465.html

后端

只需要将job映射到/app/app.jar目录就可以使用docker启动

Dockerfile

#FROM anapsix/alpine-java:8_server-jre_unlimited
FROM openjdk:8-jre-alpine

MAINTAINER www.muphy.me

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

RUN mkdir -p /app /app/logs /app/data

WORKDIR /app

EXPOSE 8080

# 默认设置内存
ENV JAVA_OPTS="-Xms512m -Xmx512m"
# ADD ./xxl-job-admin.jar ./

# CMD sleep 10;java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar app.jar
CMD ["/bin/sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar app.jar"]

构建成镜像java_app

docker build -t java_app .

前端

直接使用ngnix镜像
运行npm run build编译前端项目到dist目录,并将目录中的内容映射到/usr/share/nginx/html目录即可使用docker启动

nginx.conf ngnix配置文件

worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

stream {
    upstream azi {
        server 127.0.0.1:8808 max_fails=30 fail_timeout=30s;
    }

    server {
        listen 8809;
        proxy_connect_timeout 10s;
        proxy_timeout 30s;
        proxy_pass azi;
    }
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    # 限制body大小
    client_max_body_size 100m;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    upstream server {
        ip_hash;
        # gateway 地址
        server 172.30.0.101:8080;
    }

    server {
        listen       80;
        server_name  localhost;

        # https配置参考 start
        #listen       443 ssl;

        # 证书直接存放 /docker/nginx/cert/ 目录下即可 更改证书名称即可 无需更改证书路径
        #ssl on;
        #ssl_certificate      /etc/nginx/cert/xxx.local.crt; # /etc/nginx/cert/ 为docker映射路径 不允许更改
        #ssl_certificate_key  /etc/nginx/cert/xxx.local.key; # /etc/nginx/cert/ 为docker映射路径 不允许更改
        #ssl_session_timeout 5m;
        #ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        #ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        #ssl_prefer_server_ciphers on;
        # https配置参考 end

        # 演示环境配置 拦截除 GET POST 之外的所有请求
        # if ($request_method !~* GET|POST) {
        #     rewrite  ^/(.*)$  /403;
        # }

        # location = /403 {
        #     default_type application/json;
        #     return 200 '{"msg":"演示模式,不允许操作","code":500}';
        # }

        location / {
            root   /usr/share/nginx/html;
            try_files $uri $uri/ /index.html;
            index  index.html index.htm;
        }

        # 参考下面minio配置后端代理地址

        location /minio/ {
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header REMOTE-HOST $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://minio:9000/;
            proxy_pass http://127.0.0.1:8809/;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

使用docker-compose启动

docker-compose内容

点击查看代码
version: '3'

services:
  mysql:
    image: mysql:8.0.27
    container_name: mysql
    environment:
      # 时区上海
      TZ: Asia/Shanghai
      # root 密码
      MYSQL_ROOT_PASSWORD: azi123...
      # 初始化数据库
    ports:
      - "3306:3306"
    volumes:
      # 数据挂载
      - ./data/mysql/data/:/var/lib/mysql/
      - ./data/mysql/logs/:/var/lib/logs/
      # 配置挂载
      - ./data/mysql/conf/:/etc/mysql/conf.d/
    command:
      # 将mysql8.0默认密码策略 修改为 原先 策略 (mysql8.0对其默认策略做了更改 会导致密码无法匹配)
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
    privileged: true
    restart: always

  redis:
    image: redis:6.2.6
    container_name: redis
    ports:
      - "6379:6379"
    environment:
      # 时区上海
      TZ: Asia/Shanghai
    volumes:
      # 配置文件
      - ./data/redis/conf:/redis/config
      # 数据文件
      - ./data/redis/data/:/redis/data/
    command: "redis-server /redis/config/redis.conf"
    privileged: true
    restart: always

  minio:
    image: minio/minio:RELEASE.2021-10-27T16-29-42Z
    container_name: minio
    ports:
      # api 端口
      - "9000:9000"
      # 控制台端口
      - "9001:9001"
    environment:
      # 时区上海
      TZ: Asia/Shanghai
      # 管理后台用户名
      MINIO_ACCESS_KEY: ruphy
      # 管理后台密码,最小8个字符
      MINIO_SECRET_KEY: azi123...
      # https需要指定域名
      MINIO_SERVER_URL: ""
      # 开启压缩 on 开启 off 关闭
      MINIO_COMPRESS: "off"
      # 扩展名 .pdf,.doc 为空 所有类型均压缩
      MINIO_COMPRESS_EXTENSIONS: ""
      # mime 类型 application/pdf 为空 所有类型均压缩
      MINIO_COMPRESS_MIME_TYPES: ""
    volumes:
      # 映射当前目录下的data目录至容器内/data目录
      - ./data/minio/data:/data
      # 映射配置目录
      - ./data/minio/config:/root/.minio/
    command: server --address ':9000' --console-address ':9001' /data  # 指定容器中的目录 /data
    privileged: true
    restart: always

  nginx-web:
    image: nginx:1.21.3
    container_name: nginx-web
    environment:
      # 时区上海
      TZ: Asia/Shanghai
    ports:
      - "8080:80"
      - "443:443"
    volumes:
      # 证书映射
      - ./data/nginx/cert:/etc/nginx/cert
      # 配置文件映射
      - ./data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
      # 页面目录
      - ./data/nginx/html:/usr/share/nginx/html
      # 日志目录
      - ./data/nginx/log:/var/log/nginx
    privileged: true
    restart: always

  xxl-job-admin:
    container_name: xxl-job-admin
    image: java_app
    ports:
      - 9100:9100
    environment:
      - spring.profiles.active=prod
    volumes:
      - ./data/xxl-job:/app
      - ./data/xxl-job/logs/:/app/logs
      - ./xxl-job-admin.jar:/app/app.jar

  sdzfw-admin:
    restart: always
    container_name: sdzfw-admin
    image: java_app
    ports:
      - 8881:8881
      - 9101:9101 # xxl-job-excutor
    environment:
      - JAVA_OPTS=-Xms8g -Xmx8g
      - spring.profiles.active=prod
    volumes:
      - ./data/sdzfw:/app
      - ./data/sdzfw/logs:/app/logs
      - ./sdzfw-admin.jar:/app/app.jar
    deploy:
      resources:
        limits:
          #cpus: 0.25
          memory: 10g
        reservations:
          # cpus: 0.2
          memory: 10g
### 启动 ```shell docker-compose up -d ```
posted @   明月心~  阅读(368)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示