docker之部署mall开源项目

一.前言

mall项目是一套电商系统,包括前台商城系统及后台管理系统,基于SpringBoot+MyBatis实现。 前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心、客户服务、帮助中心等模块。 后台管理系统包含商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理、设置等模块。

mall项目涉及到知识点,比如SpringBoot、ElasticSearch、Redis、Mongodb、MyBatis、MySql、Linux、Docker等,适合初学者入门学习使用。

github地址:https://github.com/macrozheng/mall

二.docker部署mall项目方式一

1.打包项目

在springboot项目mavne工具先后执行 lifecycle->clean->package,打包成功将生成jar包

2.linux服务器新建目录

新建目录

/home/lss0555/docker/project/mall
/home/lss0555/docker/project/mall/logs
3.创建DockerFile文件

在第二步骤新建的目录mall项目下,将生成的jar包重命名放入该路径下;

同时创建Dockerfile文件,内容如下:

FROM java
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp 
# 将jar包添加到容器中并更名为.jar
ADD mall.jar  mall.jar
# 运行jar包,touch命令的作用是修改这个文件的访问时间和修改时间为当前时间,而不会修改文件的内容
RUN bash -c 'touch /mall.jar'
# 配置文件启动prod
ENTRYPOINT ["java", "-jar", "-Dspring.profiles.active=prod","/mall.jar"]

目录结构如下:
image

4.生成镜像文件

在mall目录下,执行下面命令,最后面有个"."点!

docker build -t mall .
5.参数运行镜像容器
docker run -d  -p  8080:8080  --name mall  --link mysql:mysql -v  /home/lss0555/docker/project/mall/logs:/var/logs/  mall 

说明:

  • -d 后台运行
  • -p 8080:8080 本地的端口映射
  • –name mall 容器别名
  • –link mysql:mysql 第一个参数为mysql的docker镜像名称,第二个参数为别名,此处和yml文件中连接mysql的地址保持一致
6.问题解决
1. No plugin found for prefix ‘docker’ in the current project and in the plugin groups

检查pom文件没有任何问题,在maven的conf/setting.xml中要加入以下内容,如果有重新配置该文件,需要在该文件里面修改,比如.m2/setting.xml

<pluginGroups>  
    <pluginGroup>com.spotify</pluginGroup>  
</pluginGroups>
2. Exception caught: Must specify baseImage if dockerDirectory is null
3.Failed to execute goal on project …: Could not resolve dependencies for project …

在父项目下有的子项目在首次运行clean 和install前应该先运行父项目的clean和install

4.Docker开启Remote API 访问 2375端口

编辑docker文件:/usr/lib/systemd/system/docker.service

vi /usr/lib/systemd/system/docker.service

修改ExecStart行为下面内容

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock \

测试,有输出信息即可

curl http://localhost:2375/info

三.docker部署方式二

项目目录结构如下:

image

1.新增docker-compose-env.yml 文件
version: '1'
services:
  mysql:
    image: mysql
    container_name: mysql
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 888888 #设置root帐号密码
    ports:
      - 3306:3306
    volumes:
      - /opt/docker-mysql/data/db:/var/lib/mysql #数据文件挂载
      - /opt/docker-mysql/conf.d:/etc/mysql/conf.d #配置文件挂载
      - /opt/docker-mysql/log:/var/log/mysql #日志文件挂载
  redis:
    image: redis
    container_name: redis
    command: redis-server --appendonly yes
    volumes:
      - /opt/docker-redis/data:/data #数据文件挂载
      - /opt/docker-redis/config:/etc/redis/redis.conf
    ports:
      - 6379:6379
  nginx:
    image: nginx
    container_name: nginx
    external_links:
      - mall_admin:mall_admin
    volumes:
      - /opt/docker-nginx/conf/nginx/conf.d:/etc/nginx/conf.d #配置文件挂载
      - /opt/docker-nginx/html:/usr/share/nginx/html #静态资源根目录挂载
      - /opt/docker-nginx/logs:/var/log/nginx #日志文件挂载
    ports:
      - 80:80
#  rabbitmq:
#    image: rabbitmq
#    container_name: rabbitmq
#    volumes:
#      - /mydata/rabbitmq/data:/var/lib/rabbitmq #数据文件挂载
#      - /mydata/rabbitmq/log:/var/log/rabbitmq #日志文件挂载
#    ports:
#      - 5672:5672
#      - 15672:15672
#  elasticsearch:
#    image: elasticsearch:6.4.0
#    container_name: elasticsearch
#    environment:
#      - "cluster.name=elasticsearch" #设置集群名称为elasticsearch
#      - "discovery.type=single-node" #以单一节点模式启动
#      - "ES_JAVA_OPTS=-Xms512m -Xmx512m" #设置使用jvm内存大小
#    volumes:
#      - /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins #插件文件挂载
#      - /mydata/elasticsearch/data:/usr/share/elasticsearch/data #数据文件挂载
#    ports:
#      - 9200:9200
#      - 9300:9300
#  kibana:
#    image: kibana:6.4.0
#    container_name: kibana
#    links:
#      - elasticsearch:es #可以用es这个域名访问elasticsearch服务
#    depends_on:
#      - elasticsearch #kibana在elasticsearch启动之后再启动
#    environment:
#      - "elasticsearch.hosts=http://es:9200" #设置访问elasticsearch的地址
#    ports:
#      - 5601:5601
#  mongo:
#    image: mongo:3.2
#    container_name: mongo
#    volumes:
#      - /mydata/mongo/db:/data/db #数据文件挂载
#    ports:
#      - 27017:27017

启动

docker-compose -f docker-compose-env.yml up -d

[root@localhost mall]# docker-compose -f docker-compose-env.yml up -d
Creating redis ... done
Creating mysql ... done
Creating nginx ... done
[root@localhost mall]# docker ps
2.新增 docker-compose-app.yml 文件
version: '3'
services:
  mall-admin:
    image: mall
    container_name: mall
    ports:
      - 8081:8080
    external_links:
      - mysql:mysql #可以用db这个域名访问mysql服务
    volumes:
      - /home/lss0555/docker/compose/mall/log:/var/logs/ #日志文件挂载
    command:
      - from java
      - java -jar -Dspring.profiles.active=prod mall.jar

#  mall-search:
#    image: mall/mall-search:1.0-SNAPSHOT
#    container_name: mall-search
#    ports:
#      - 8081:8081
#    external_links:
#      - elasticsearch:es #可以用es这个域名访问elasticsearch服务
#      - mysql:db #可以用db这个域名访问mysql服务
#  mall-portal:
#    image: mall/mall-portal:1.0-SNAPSHOT
#    container_name: mall-portal
#    ports:
#      - 8085:8085
#    external_links:
#      - redis:redis #可以用redis这个域名访问redis服务
#      - mongo:mongo #可以用mongo这个域名访问mongo服务
#      - mysql:db #可以用db这个域名访问mysql服务
#      - rabbitmq:rabbit #可以用rabbit这个域名访问rabbitmq服务

启动

docker-compose -f docker-compose-app.yml up -d

二.问题
1.Caused by: java.net.UnknownHostException: mysql: Temporary failure in name resolution

docker-compose-dev.yml里面的mysql配置这行配置

command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

springboot配置的为

url: jdbc:mysql://mysql:3306/mall?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai

两个不一致导致

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
mall项目是一套电商系统,包括前台商城系统及后台管理系统,基于SpringBoot+MyBatis实现,采用Docker容器化部署。前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心、客户服务、帮助中心等模块。后台管理系统包含商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理、设置等模块。 开发环境: JDK 1.8 Mysql 5.7 Redis 5.0 MongoDB 4.2.5 RabbitMQ 3.7.14 Nginx 1.10 Elasticsearch 7.6.2 Logstash 7.6.2 Kibana 7.6.2 搭建步骤: 1、Windows环境部署 Windows环境搭建请参考:mall在Windows环境下的部署; 注意:只启动mall-admin,仅需安装Mysql、Redis即可; 克隆mall-admin-web项目,并导入到IDEA中完成编译:前端项目地址; mall-admin-web项目的安装及部署请参考:mall前端项目的安装与部署。 2、Docker环境部署 使用虚拟机安装CentOS7.6请参考:虚拟机安装及使用Linux,看这一篇就够了; Docker环境的安装请参考:开发者必备Docker命令; 本项目Docker镜像构建请参考:使用Maven插件为SpringBoot应用构建Docker镜像; 本项目在Docker容器下的部署请参考:mall在Linux环境下的部署(基于Docker容器); 本项目使用Docker Compose请参考: mall在Linux环境下的部署(基于Docker Compose); 本项目在Linux下的自动化部署请参考:mall在Linux环境下的自动化部署(基于Jenkins); 3、相关环境部署 ELK日志收集系统的搭建请参考:SpringBoot应用整合ELK实现日志收集; 使用MinIO存储文件请参考:前后端分离项目,如何优雅实现文件存储; 读写分离解决方案请参考:你还在代码里做读写分离么,试试这个中间件吧; Redis集群解决方案请参考:Docker环境下秒建Redis集群,连SpringBoot也整上了!。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值