包教会docker-compose快速部署springboot前后端分离项目

以后端单体项目为例子

环境:后端项目,编译好的前端,mysql,redis

1.构建需要的镜像

后端镜像的Dockerfile

#依赖java8,我的jdk8镜像是自己构建的,你们可以用docker search搜一下选一个
FROM jdk8:1.0
#创建者
MAINTAINER gouge
#暴露8081端口
EXPOSE 8081
#将jar包打入镜像
ADD usmp-api.jar /usmp-api.jar
#挂载目录
VOLUME /tmp
#容器已启动 默认运行命令 java -jar app.jar
#生产环境启动 可以写#容器已启动 默认运行命令 java -jar app.jar
#ENTRYPOINT ["java","-jar","/app.jar","--spring.profiles.active=prod"]
#解决OOM问题 指定内存初始128M 最大300M ENTRYPOINT ["java","-jar","-Xms128m","-Xmx300m","/app.jar","--spring.profiles.active=prod"]
ENTRYPOINT ["java","-jar","/usmp-api.jar"]

这里注意的点,jar包和Dockerfile文件要在同一路径下

进入这个目录执行,docker build   -t   镜像名:版本  .  ,(不要忽略最后的点)

执行docker images查看是否构建成功

前端镜像的Dockerfile

# 使用官方Nginx基础镜像
FROM nginx:alpine

# 设置工作目录
WORKDIR /usr/share/nginx/html

# 将构建好的Vue应用文件复制到Nginx服务器目录
COPY ./dist/ .

# 复制自定义Nginx配置文件
#COPY nginx.conf /etc/nginx/conf.d/nginx.conf

# 暴露80端口
EXPOSE 80

# 启动Nginx服务器
CMD ["nginx", "-g", "daemon off;"]

将编译好的dist包,Dockerfile文件,nginx.conf文件放在同一路径下,nginx.conf最好提前配置好

执行docker build -t  镜像名:版本  .  

docker images 查看是否构建成功

mysql和redis镜像从docker hub或阿里云拉取即可

2.编写docker-compose.yml文件

version: '3.8' #docker compose版本

services:
  frontend: #服务名(网络别名,可以用于容器的互相访问)
    image: usmp-ui:latest #使用的镜像名称
    ports:
      - "80:80"  #端口映射
    networks:
      - app-network  #使用的网络空间

  backend:
    image: usmp:latest
    ports:
      - "8081:8081"
    depends_on: #容器的执行顺序,mysql和redis必须在后端之前执行
      - mysql
      - redis
    networks:
      - app-network

  mysql:
    image: mysql:8.0.26
    ports:
      - "3306:3306"
    environment:  
      MYSQL_ROOT_PASSWORD: 1234
      MYSQL_DATABASE: usmp
      MYSQL_USER: czc
      MYSQL_PASSWORD: 1234
    command: --lower_case_table_names=1
    volumes:  #注意前面的路径必须在宿主机提前创建好
      - /home/mysql/log:/var/log/mysql # 映射日志目录,宿主机:容器
      - /home/mysql/data:/var/lib/mysql # 映射数据目录,宿主机:容器
      - /home/mysql/conf.d:/etc/mysql/conf.d # 映射配置目录,宿主机:容器
      - /etc/localtime:/etc/localtime:ro # 让容器的时钟与宿主机时钟同步,避免时间的问题,ro是read only的意思,就是只读。
    networks:
      - app-network

  redis:
    image: redis:latest
    ports:
      - "6379:6379"
    networks:
      - app-network

networks:
  app-network:
    driver: bridge

volumes:
  mysql-data:

在compose脚本中我们把mysql的配置文件挂载到了宿主机,这里需要使用

chmod 644  my.cnf 给配置文件赋予下权限,否则mysql容器启动会报错

容器启动后,发现后端项目会自己停止,是因为这种方式构建的mysql默认不能远程连接(正常docker构建是可以的)

需要登陆进容器执行一段代码

docker exec -it 容器id /bin/bash

msyql -uroot -p 

# 修改本地登陆
# 修改密码过期规则----》永不过期
ALTER USER 'root'@'localhost' IDENTIFIED BY '1234' PASSWORD EXPIRE NEVER; 
# 更新用户的密码修改加密规则
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '1234'; 
# 刷新权限
FLUSH PRIVILEGES;
# 重置密码(==非必须==)
ALTER USER 'root'@'localhost' IDENTIFIED BY '1234';

# 修改远程登陆
# 修改密码过期规则----》永不过期
ALTER USER 'root'@'%' IDENTIFIED BY '1234' PASSWORD EXPIRE NEVER; 
# 更新用户的密码修改加密规则
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '1234';
# 刷新权限
FLUSH PRIVILEGES;
# 重置密码(==非必须==)
ALTER USER 'root'@'%' IDENTIFIED BY '1234';

重启后端项目即可

使用compose构建出来的这四个容器都处于一个网络空间内,互相可以使用网络别名来访问

例如后端访问数据库

jdbc:mysql://mysql:3306/tesst?characterEncoding=utf8&serverTimezone=UTC&useUnicode=true

使用mysql这个网络别名而不是ip地址即可直接访问到,容器直接相互访问要用容器的端口

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值