首页 > 其他分享 >【谷粒商城】(一)docker搭建以及项目的创建

【谷粒商城】(一)docker搭建以及项目的创建

时间:2022-08-18 00:13:56浏览次数:102  
标签:mydata redis grainmall 谷粒 conf mysql docker 商城

网络地址转换-端口转发

VmWare网络配置可以参考这篇:VMWare虚拟机网络连接设置_santirenpc的博客-CSDN博客_vmware 上网设置,真的是被折磨到了。。

Docker

虚拟化容器技术,Docker基于镜像,可以秒级启动各种容器。每一种容器都是一个完整的运行环境,容器之间相互隔离。

  • Docker启动:

    sudo systemctl start docker
    
  • 查看安装镜像:

    docker images
    
  • 启用docker开机自启:

    sudo systemctl enable docker
    

Docker阿里云镜像加速

阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台

Docker安装mysql

①下载镜像文件

docker pull mysql:5.7

②创建实例并启动

docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7

其中3306:3306表示mysql容器到虚拟机的端口映射,访问虚拟机的3306 端口即可访问mysql容器的

-v表示文件在虚拟机的挂载位置

-e表示设置

-d表示是哪一个镜像文件

Docker容器文件挂载与端口映射

首先通过命令进入mysql容器,然后发现linux提示符由localhost 加文件目录,变成了docker的id,表示进入了容器内部,容器内部可以视作一个独立的linux空间。

docker exec -it mysql /bin/bash

ls一下,发现容器内部的结构如下,其中mysql的配置文件都存放在/etc/mysql下,日志文件都存放在/var/log/mysql下。

root@540ca30db5f3:/# ls
bin  boot  dev    docker-entrypoint-initdb.d  entrypoint.sh  etc    home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

这样就存在一个问题,那就是每次想要修改配置或者查看日志都得需要进入容器内部,再进入目录结构,所以docker run -v命令,将这两个目录挂载到linux目录下,这样就可以在linux目录下查看修改了。此时在/mydata/mysql/conf下创建一个my.cnf文件用于设置编码,就会映射到mysql容器的/ect/mysql目录下,重启容器就会生效。

my.cnf

[client]
default_character_set=utf8
[mysql]
default-character-set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8
skip-character-set-client-handshake
skip-name-resolve

Docker设置mysql自动启动

docker update mysql --restart=always

Docker 安装redis

安装redis镜像
docker pull redis
创建实例并运行
mkdir -p /mydata/redis/conf
touch /mydata/redis/conf/redis.conf
docker run -p 6379:6379 --name redis -v /mydata/redis/data:/data \
-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf

-v /mydata/redis/data:/data 表示将redis数据文件挂载到/mydata/redis/data

-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf 表示将配置文件挂载到/mydata/redis/conf/redis.conf

-d redis redis-server /etc/redis/redis.conf 表示在启动的时候配置/etc/redis/redis.conf

最新版本的redis配置文件挂载到了/usr/local/etc/redis,所以应该修改为:

mkdir -p /mydata/redis/conf
touch /mydata/redis/conf/redis.conf

docker run -p 6379:6379 --name redis -v /mydata/redis/data:/data \
-v /mydata/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf \
-d redis redis-server /usr/local/etc/redis/redis.conf

这里先创建配置文件的原因是,容器中目录/usr/local/etc/redis/下是没有conf文件的,如果linux也不创建的话redis.cong就会被当做目录(linux是没有文件后缀名的,而且目录也被视作文件

执行docker ps:

[root@localhost conf]# docker ps
CONTAINER ID   IMAGE       COMMAND                  CREATED          STATUS          PORTS                                                  NAMES
dbdfbaae3b96   redis       "docker-entrypoint.s…"   3 seconds ago    Up 3 seconds    0.0.0.0:6379->6379/tcp, :::6379->6379/tcp              redis
bbe4e2af2c36   mysql:5.7   "docker-entrypoint.s…"   35 minutes ago   Up 33 minutes   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql
进入redis测试
[root@localhost conf]# docker exec -it redis redis-cli
127.0.0.1:6379> set a b
OK
127.0.0.1:6379> get a
"b"
127.0.0.1:6379> exit
redis 持久化

上面的测试在redis重启之后之前的版本应该是不能够再次获取,这是因为没有进行持久化,键值对仅存在于内存中,因此需要进行配置开启持久化。

vim /mydata/redis/conf/redis.conf

redis.conf

appendonly yes

然后在redis容器/usr/local/redis/redis.conf中可以看到被映射的配置,重启redis即可生效。

Docker 设置redis自动启动
docker update redis --restart=always

项目搭建

1 创建项目微服务

商品服务(product)、仓储服务(ware)、订单服务(order)、优惠券服务(coupon)、用户服务(member)

共同

  • 都导入web、openfeign模块

  • 每一个服务的包名为 com.hikaru.grainmall.xxx

  • 模块名grainmall-coupon

2 整合pom

复制一个其他module下的pom文件到父工程中,对其他module的pom进行整合。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.hikaru.grainmall</groupId>
    <artifactId>grainmall</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>grainmall</name>
    <description>聚合服务</description>
    <packaging>pom</packaging>

    <modules>
        <module>grainmall-coupon</module>
        <module>grainmall-member</module>
        <module>grainmall-order</module>
        <module>grainmall-product</module>
        <module>grainmall-ware</module>
    </modules>

</project>

3 设置git.ignore

target/
pom.xml.tag
pom.xml.releaseBackup
pom.xml.versionsBackup
pom.xml.next
release.properties
dependency-reduced-pom.xml
buildNumber.properties
.mvn/timing.properties
# https://github.com/takari/maven-wrapper#usage-without-binary-jar
.mvn/wrapper/maven-wrapper.jar

**/mvnw
**/mvnw.cmd
**/.mvn
.idea
**/.gitignore

可以在git>local Changes 查看更改和提交的文件

4 整合MyBatisPlus

  • 导入依赖
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.3.1</version>
        </dependency>
  • 配置数据源

    • 导入数据库驱动

              <dependency>
                  <groupId>mysql</groupId>
                  <artifactId>mysql-connector-java</artifactId>
                  <version>8.0.29</version>
              </dependency>
      
    • 在application.yml中配置数据源相关信息

      spring:
        datasource:
          username: root
          password: root
          url: jdbc:mysql://192.168.60.3:3306/grainmall_pms
          driver-class-name: com.mysql.cj.jdbc.Driver
      
  • 配置Mybatis-Plus

    • 使用@MapperScan扫描mapper接口

      @MapperScan(basePackages = "com/hikaru/grainmall/product/dao")
      @SpringBootApplication
      public class GrainmallProductApplication {
      
          public static void main(String[] args) {
              SpringApplication.run(GrainmallProductApplication.class, args);
          }
      
      }
      
    • 告诉mybatis-plus mapper映射文件位置

      spring:
        datasource:
          username: root
          password: root
          url: jdbc:mysql://192.168.60.3:3306/grainmall_pms
          driver-class-name: com.mysql.cj.jdbc.Driver
      mybatis-plus:
        mapper-locations: classpath:/mapper/**/*.xml
      

      classpath*表示不止扫描自己类路径下的xml文件还去扫描依赖的其他包下面的xml文件

    • 设置自动递增

      可以看到默认的entity主键上都添加了@TableId,默认为IdType为None表示不进行递增。可以通过配置文件进行修改。

      mybatis-plus:
        mapper-locations: classpath:/mapper/**/*.xml
        global-config:
          db-config:
            id-type: auto 
      

5 记录一些坑点

①提示找不到Bean:原因是common module导入了lombok依赖,子组件虽然使用@Data注解不报错但是会提示找不到getter、setter方法(解决方法:在子组件引入lombok组件,lombok代码入侵性太强,这次报错也不知道是为什么,建议还是自己写getter、setter吧)

②# Error creating bean with name ‘configurationPropertiesBeans‘ :SpringBoot 与 SpringCloud版本不一致:目前我使用的是SpringBoot 2.3.5.RELEASE + SpringCloud Hoxton.SR9

标签:mydata,redis,grainmall,谷粒,conf,mysql,docker,商城
From: https://www.cnblogs.com/tod4/p/16597287.html

相关文章

  • 【谷粒商城】(二)SpringCloudAlibaba分布式组件
    微服务分布式组件注册中心:每一个微服务上线都应该注册到注册中心。这样做的好处在于方便微服务之间的相互调用,比如订单服务想要调用商品服务,就可以通过注册中心查看有哪......
  • 谷粒商城(无CURD代码)
    GUIGU-GULIMALL项目:写在开头:这份笔记仅仅记录了一些环境搭建以及基础篇中一些技术的使用,基本的CURD大部分没有记录,参考了很多网友的博客。若有冒犯,请联系我删除。参考......
  • docker Desktop使用
    目录1.下载并安装DockerDesktop2.创建实例3.下载镜像4.查看已有镜像dockerimages5.创建实例6.映射文件夹挂载到window目录直接使用默认的挂载路径自定义挂载卷7.......
  • Docker安装ElasticSearch和Kibana
    1.安装dockerdocker安装参考:https://www.runoob.com/docker/macos-docker-install.html2.拉取elasticsearch镜像dockerpullelasticsearch:7.16.23.启动elasticsea......
  • docker --restart 重启策略
    docker--restart重启策略--restart=no,默认策略,在容器退出时不重启容器--restart=on-failure,在容器非正常退出时(退出状态非0),才会重启容器--restart=on-failure:3,在容......
  • Docker/Docker Compose部署ELK
    目录Docker/DockerCompose部署ELKDocker下安装ELKDockerCompose部署ELK准备工作相关文件结构修改系统的vm.max_map_count安装和配置ELK服务获取sebp/elk的原始配置文件编......
  • 乘风破浪,遇见最美Windows 11之现代Windows开发运维 - Docker容器化镜像使用规范总结
    背景在通过Docker使用和打包容器化镜像的时候,很容易因为一些不规范的操作引发不必要的麻烦,下面总结一些规范项供参考。总结建议描述镜像构建除系统镜像外所......
  • Docker-基础
    1、Docker概述1.1Docker是什么Docker是一个开源的容器引擎,基于Go语言并遵从Apache2.0协议开源。开发这可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发......
  • 如何查看一个docker容器占用空间的大小?
    你如果想要知道,一个运行起来的容器,占用了多少磁盘空间该怎么做呢? 方法很简单。 使用下面的命令dockerps-s  得到下面的结果: 没错SIZE列,就是容器占用......
  • 什么是docker的存储驱动?有什么作用?
    如题目所示的问题,你知道吗? 读完下面的部分,你必然会豁然开朗······ 1、当你执行dockerpull命令拉取一个镜像的时候,镜像在docker主机上是怎么存储的?2、当你执......