Dockerfile部署Springboot应用

1.首先在linux机器安装docker以及docker-compose

2.创建docker自定义网络 (红色部分为docker网络设置,配置好后各个容器间才能通过容器IP进行通信)

查看docker默认三种网络(bridge、host、none)
docker network ls
删除自定义网络
docker network rm 自定义networkID
创建docker自定义网络
docker network create --subnet=172.18.0.0/16 net

3. 编写docker-compose.yml. 使用自定义的网络,指定容器IP

version: '3.7'
services:
  mysql:
    restart: always
    image: mysql
    container_name: mysql
    ports:
      - 3306:3306
    networks:
      default:
        ipv4_address: 172.18.0.2
    privileged: true
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 123456 
    command:
      --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
    volumes:
      - ./mysql/data:/var/lib/mysql
      - /etc/localtime:/etc/localtime

  redis:
    image: redis:5
    ports:
      - 6379:6379
    networks:
      default:
        ipv4_address: 172.18.0.3
    restart: always
    container_name: redis
    command: redis-server --appendonly yes
    volumes:
      - ./redis/data:/data
      - ./redis/conf/redis.conf:/etc/redis/redis.conf
      - /etc/localtime:/etc/localtime

  nginx:
    restart: always
    image: nginx
    container_name: nginx
    ports:
      - 80:80
    networks:
      default:
        ipv4_address: 172.18.0.4
    volumes:
      - ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf
      - ./nginx/html:/usr/share/nginx/html
      - ./nginx/logs:/var/log/nginx
      - /etc/localtime:/etc/localtime

  rabbitmq:
    restart: always
    image: rabbitmq:management
    container_name: rabbitmq
    ports:
      - 5672:5672
      - 15672:15672
    networks:
      default:
        ipv4_address: 172.18.0.5
    environment:
      TZ: Asia/Shanghai
    volumes:
      - ./rabbitmq/data:/var/lib/rabbitmq
      - /etc/localtime:/etc/localtime

  elasticsearch:
    restart: always
    image: bolingcavalry/elasticsearch-with-ik:6.5.0
    container_name: elasticsearch
    environment:
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - http.cors.enabled=true
      - http.cors.allow-origin=*
      - "ES_JAVA_OPTS=-Xms256m -Xmx256m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - esdata:/usr/share/elasticsearch/data
      - /etc/localtime:/etc/localtime
    ports:
      - 9200:9200
      - 9300:9300
    networks:
      default:
        ipv4_address: 172.18.0.9
    environment:
      TZ: Asia/Shanghai
  kibana:
    restart: always
    image: docker.elastic.co/kibana/kibana:6.5.0
    container_name: kibana
    environment:
      - elasticsearch.hosts=http://elasticsearch:9200
      - i18n.locale=zh-CN
    hostname: kibana
    depends_on:
      - elasticsearch
    networks:
      default:
        ipv4_address: 172.18.0.8
    environment:
      TZ: Asia/Shanghai
    ports:
      - 5601:5601

volumes:
  esdata:
    driver: local

networks:
  default:
    external:
      name: net

启动 docker-compose up -d        停止 docker-compose down

使用mysql客户端导入(ruoyi)数据库

需要其他容器继续在docker-compose.yml中添加即可 

4.查看容器IP

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 容器名

附nginx的初始配置

user root;
worker_processes  1;
events {
    worker_connections  1024;
}
 
http {
    include       mime.types;
    default_type  application/octet-stream;
 
    sendfile        on;
    keepalive_timeout  65;
 
    server {
        listen       80;
        server_name  localhost;
 
        location / {
            root    /usr/share/nginx/html;  // 映射容器内部地址
            index  index.html index.htm;
        }
 
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
 
    }
 
}

附linux目录

5.服务器环境已经准备好,现在开始打包SpringBoot应用上传到服务器运行

以RuoYi-Vue项目作为演示

要修改mysql和redis的host. 修改为容器IP即可

6.准备Dockerfile

# 该镜像需要依赖的基础镜像
FROM java:8
# 将当前目录下的jar包复制到docker容器的/目录下
ADD ruoyi-admin.jar /ruoyi-admin.jar
# 设置时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
# 运行过程中创建一个xx.jar文件
RUN bash -c 'touch /ruoyi-admin.jar'
# 声明服务运行在8080端口
EXPOSE 8080
# 指定docker容器启动时运行jar包
ENTRYPOINT ["java","-jar","/ruoyi-admin.jar"]

7.准备run.sh脚本.SpringBoot容器启动使用自定义网络,指定IP

#!/usr/bin/env bash
# 定义应用名称
app_name='ruoyi-admin'
# 定义镜像名称
images_name='ruoyi-admin.jar'
# 定义应用环境
profile_active='druid'
echo '----copy jar----'
docker rm -f ${app_name}
echo '----rm container----'
docker rmi ${images_name}
echo '----rm image----'
# 打包编译docker镜像
docker build -t ${images_name} .
echo '----build image----'
docker run -p 8080:8080 --name ${app_name} \
--privileged \
--restart=always \
--net=net \
--ip 172.18.0.99 \
-e 'spring.profiles.active'=${profile_active} \
-e TZ="Asia/Shanghai" \
-v /etc/localtime:/etc/localtime \
-v /mydata/app/${app_name}/logs:/home/ruoyi/logs \
-d ${images_name}
echo '----start container----'

8.springboot项目打包.准备好这个3个文件并上传到服务器

9.chmod 777 run.sh

10.启动脚本 sh ./run.sh  (请确保已经导入ruoyi数据库)

11.若依后台项目启动成功

12.部署若依前端项目.将build后的dist文件上传到/usr/local/docker/nginx/html(因为映射的容器路径是这个)

13.设置nginx反向代理 (这个配置若依官网文档有). 需要注意的是要将 proxy_pass 中的localhost换成后台项目的容器IP

worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    upstream ruoyi {
      server 172.18.0.99:8080;
    }


    server {
        listen       80;
        server_name  localhost;

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

        location /jl {
            proxy_pass http://172.18.0.98:9090;
        }

        location /prod-api/{
            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://ruoyi/;
            # proxy_pass http://172.18.0.6:8080/;
        }

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

    }

}
docker restart nginx

14.在宿主机访问虚拟机的80端口 (前端项目默认在80启动)

 验证码能够显示出来,说明前后台已经联通.

至此完成了在docker-compose中启动SpringBoot项目,并且容器之间能够互相通信

参考资料

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值