网络地址转换-端口转发

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

【谷粒商城】(一)docker搭建以及项目的创建的更多相关文章

  1. 基于docker搭建laravel项目

    基于docker搭建laravel项目 公司PHP项目是Laravel框架写的,目前环境需要通过docker来部署一下.网上学习了一下相关知识.整理后做一个笔记.用到定时任务crontab与进程管理s ...

  2. 利用Docker搭建java项目开发环境

    一.需求 一台 Ubuntu 16.0.4 LTS ,安装了Docker服务,Rancher服务,也制作了Tomcat相关的image,接下来我们就来说一下如何快速的构建一个开发环境和测试环境 二.步 ...

  3. 用docker搭建python项目运行环境

    Docker Hub镜像加速器 安装docker: curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-eng ...

  4. Django框架的使用教程--环境的搭建和项目的创建[一]

    Django环境的搭建 Django 常用的命令 # 创建一个名为Django_test子应用 python manage.py startapp Django_test # 生成迁移文件 pytho ...

  5. Django之Django简介,开发环境搭建,项目应用创建

    软件及Django框架简介 软件框架 一个软件框架是由其中各个软件模块组成的: 每一个模块都有特定的功能: 模块与模块之间通过相互配合来完成软件的开发. 软件框架是针对某一类软件设计问题而产生的. M ...

  6. django基础篇01-环境的搭建和项目的创建

    本文参考自银角大王的博客 基本配置 常用命令: django-admin startproject xxx(项目名) python3 manage.py startapp xxx(app名) pyth ...

  7. 2. 搭建DRF项目

    企业项目开发流程 一.需求分析 1.企业的web项目类型: 商城 门户网站[企业站和门户站] 社交网络 资讯论坛 内部系统 个人博客 内容收费站 前端的静态页面制作,外界开发的时候,是照着psd/pn ...

  8. Spring MVC 项目搭建 -1- 创建项目

    Spring MVC 项目搭建 -1- 创建项目 1.创建 Dynamic Web project (SpringDemo),添加相关jar包 2.创建一个简单的controller类 package ...

  9. Docker 搭建 Keycloak

    Docker 搭建 Keycloak 命令 需要创建好数据库,启动容器指定数据库信息 # KEYCLOAK_USER 用户名 # KEYCLOAK_PASSWORD 密码 # DB_ADDR 数据库地 ...

  10. Docker 搭建 ELK 读取微服务项目的日志文件

    思路: 在docker搭建elasticsearch与kibana来展示日志,在微服务部署的机子上部署logstash来收集日志传到elasticsearch中,通过kibana来展示,logstas ...

随机推荐

  1. Informatica常用组件整理

    1. 表达式转换组件 (expression) expression 属于被动组件类型(passive),是一种行级表达式,不改变数据行数,功能强大,操作简单. 主要在以下情况下应用: 对流入数据的类 ...

  2. K8S的kubectl命令详解

    一.kubectl 基本命令 1.陈述式资源管理方法: 1.kubernetes集群管理集群资源的唯一入口是通过相应的方法调用apiserver的接口 2.kubectl 是官方的CLI命令行工具,用 ...

  3. 【原创】GmSSL Linux编译, 环境搭建

    编译环境: wsl ubuntu 20.04 GmSSL Project 算法相关原理文档 由于GmSSL继承自openssl, 为了防止和openssl冲突,最好将GmsSL 编译为静态库 在Lin ...

  4. python高阶编程(一)

    1.生成器 通过列表⽣成式,我们可以直接创建⼀个列表.但是,受到内存限制,列表容量肯定是有限的.⽽且,创建⼀个包 含100万个元素的列表,不仅占⽤很⼤的存储空间,如果我们仅仅需要访问前⾯⼏个元素,那后 ...

  5. LoadRunner性能测试-app压力测试

    步骤分为三步: 一,录制脚本 录制脚本原理:启动LR代理服务器监听设置好的端口号是否有请求发送给服务器,有请求时,代理服务器接收请求,并转发给对应的系统服务器,LR从而获取到请求的信息与数据,生成脚本 ...

  6. nRF52832出现“APP_UART_COMMUNICATION_ERROR”的错误的问题

    在调试nRF52832的uart的过程中,发现调试信息会时不时打印"APP_UART_COMMUNICATION_ERROR"这个错误,看上去似乎毫无规律.查看SDK的相关说明,可 ...

  7. c语言数据结构 树的基本操作

    树的基本操作有创建,插入,删除,以及各种遍历的应用,如:利用后序遍历求高度,利用前序遍历求层数的结点 基本算法思路:创建二叉树函数参数必须接受二级指针!如果使用同级指针,无法返回创建后的结果,利用递归 ...

  8. git push 报错error: remote unpack failed: error Short read of block

    1.解决办法:找管理代码的人给你开权限. 2如果你的push的命令写错的话,也是会出现远端拒绝的提示,所以记得检查自己的push 命令是否正确 另一种明显的权限拒绝的例子: 英语学习:to push ...

  9. wmware桥接模式

    配置思路(桥接模式) 准备一个与PC机同网段且未被占用的IP地址 将虚拟机的网络模式修改为桥接模式(默认为NAT模式) 修改网卡配置文件,配置为准备好的IP地址,并重启网络服务. 配置DNS解析服务器 ...

  10. margin:auto实现盒子水平垂直居中

    margin:auto为什么不垂直居中 margin:auto是具有强烈计算意味的关键字,用来计算元素对应方向上应该获得的剩余空间大小. 行内元素margin:auto; 不能水平居中在一行的中央位置 ...