• 高级架构师_Docker_第2章_ Docker核心原理_ 第6节Docker部署微服项目


    高级架构师_Docker_第2章_ Docker核心原理_ 第6节Docker部署微服项目

    Docker部署微服项目

    数据库

    创建数据库

    create database david;
    use david;

    创建用户表
    创建tbuser表 
    CREATE TABLE `tbuser` ( 
    `userid` int(11) NOT NULL AUTO_INCREMENT, 
    `username` varchar(20) COLLATE utf8_bin DEFAULT NULL, 
    `password` varchar(20) COLLATE utf8_bin DEFAULT NULL, 
    `userroles` varchar(2) COLLATE utf8_bin DEFAULT NULL, 
    `nickname` varchar(50) COLLATE utf8_bin DEFAULT NULL, 
    
    PRIMARY KEY (`userid`) 
    ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_bin
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    新增测试数据
    INSERT INTO tbuser (username,PASSWORD,userroles,nickname) VALUES 
    ('admin','1234','04','管理员'),('lagou','1234','03','拉勾教育')
    
    • 1
    • 2

    springboot项目

    项目简介
    1. 使用springboot技术
    2. mysql数据库
    3. springboot项目docker容器化部署
    4. mysql数据库容器化部署
    pom.xml
     
    <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.0modelVersion> 
        
        <parent> 
            <groupId>org.springframework.bootgroupId> 
            <artifactId>spring-boot-starter-parentartifactId> 
            <version>2.3.4.RELEASEversion>
            <relativePath/> 
        parent> 
        <groupId>com.lagougroupId> 
        <artifactId>dockerdemoartifactId> 
        <version>0.0.1-SNAPSHOTversion> 
        <name>dockerdemoname> 
        <description>Demo project for Spring Bootdescription> 
        
        <properties> 
            <java.version>1.8java.version> 
            <mybatispluins.version>3.3.2mybatispluins.version> 
            <mysql.version>5.1.47mysql.version> 
        properties> 
        
        <dependencies> 
            <dependency> 
                <groupId>org.springframework.bootgroupId> 
                <artifactId>spring-boot-starter-webartifactId> 
            dependency>
            <dependency> 
                <groupId>com.baomidougroupId> 
                <artifactId>mybatis-plus-boot-starterartifactId> 
                <version>${mybatispluins.version}version> 
            dependency> 
            <dependency> 
                <groupId>mysqlgroupId> 
                <artifactId>mysql-connector-javaartifactId> 
                <scope>runtimescope> 
            dependency> 
            <dependency> 
                <groupId>org.springframework.bootgroupId> 
                <artifactId>spring-boot-starter-testartifactId> 
                <scope>testscope> 
                <exclusions> 
                    <exclusion> 
                        <groupId>org.junit.vintagegroupId> 
                        <artifactId>junit-vintage-engineartifactId> 
                    exclusion> 
                exclusions> 
            dependency> 
        dependencies> 
        
        <build> 
            <finalName>${project.name}finalName> 
            <plugins> 
                <plugin> 
                    <groupId>org.springframework.bootgroupId> 
                    <artifactId>spring-boot-maven-pluginartifactId> 
                plugin> 
                 
                <plugin> 
                    <groupId>org.apache.maven.pluginsgroupId> 
                    <artifactId>maven-surefire-pluginartifactId> 
                    <configuration> 
                        <skip>trueskip> 
                    configuration> 
                plugin>
            plugins>
        build>
        
    project>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    application.yml

    为防止与其他项目端口号冲突,将项目端口号更改为8082

    server: 
      port: 8082 
    spring: 
      datasource: 
        driver-class-name: com.mysql.jdbc.Driver
        username: root 
        password: david
        url: jdbc:mysql://192.168.198.110:3306/lagou?characterEncoding=utf- 8&useSSL=false&useTimezone=true&serverTimezone=GMT%2B8 
        
    mybatis-plus: 
      type-aliases-package: com.lagou.dockerdemo.entity 
      mapper-locations: mapper/*.xml
      #配置日志打印方式。不使用 mybatis的日志信息。使用mp的日志配置 
      configuration: 
        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    测试数据库连接

    父类

    @SpringBootTest(classes = DockerdemoApplication.class) 
    @ExtendWith(SpringExtension.class) 
    public abstract class DockerdemoApplicationTests { 
    }
    
    • 1
    • 2
    • 3
    • 4

    TestConn类

    public class TestConnection extends DockerdemoApplicationTests { 
        @Resource 
        private DataSource dataSource; 
        
        @Test 
        public void testConn() throws SQLException { 
            Connection connection = this.dataSource.getConnection(); 
            System.out.println("connection = " + connection); 
        } 
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    实体类

    @TableName(value = "tbuser") 
    public class Tbuser { 
        @TableId(type = IdType.AUTO) 
        private Integer userid; 
        private String username,password,userroles,nickname; 
        ......省略getter和setter、构造方法、toString等方法 
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    UserMapper接口

    package com.lagou.dockerdemo.mapper; 
    
    import com.baomidou.mybatisplus.core.mapper.BaseMapper; 
    import com.lagou.dockerdemo.entity.Tbuser; 
    
    public interface UserMapper extends BaseMapper { 
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    启动类

    @SpringBootApplication 
    @MapperScan(basePackages = "com.lagou.dockerdemo.mapper") 
    public class DockerdemoApplication { 
        
        public static void main(String[] args) { 
            SpringApplication.run(DockerdemoApplication.class, args); 
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    UserService接口

    public interface UserService {
        List<Tbuser> queryUsers(); 
    }
    
    • 1
    • 2
    • 3

    UserServiceImpl实现类

    @Service 
    public class UserServiceImpl implements UserService { 
        @Resource 
        private UserMapper userMapper; 
        
        @Override public List<Tbuser> queryUsers() { 
            return this.userMapper.selectList(null); 
        } 
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    TestUser测试类

    public class TestUser extends DockerdemoApplicationTests { 
        @Resource 
        private UserService userService; 
        
        @Test 
        public void testQueryUsers() {
            List<Tbuser> tbusers = this.userService.queryUsers(); 
        } 
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    控制器

    @RestController 
    public class UserController { 
        @Resource 
        private UserService userService; 
        
        @GetMapping("/users") 
        public List<Tbuser> queryUsers() { 
            return this.userService.queryUsers(); 
        } 
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    本地测试项目

    http://localhost:8082/users
    
    • 1

    mysql容器

    • 1)清理docker-100主机的容器
    • 2)安装docker-compose
    • 3)脱离开发环境部署、测试项目
    • 4)部署mysql容器
    • 5)制作mysql自定义镜像
    运行镜像
    docker run -itd --name mysql --restart always -p 3306:3306 -e
    MYSQL_ROOT_PASSWORD=admin mysql:5.7.31
    
    • 1
    • 2
    导入数据库

    使用客户端工具导入lagou.sql文件

    测试项目
    http://localhost:8082/users
    
    • 1

    脱离开发环境,打包测试项目。

    mvn clean package 
    
    使用dos命令启动项目 
    java -jar dockerdemo.jar
    
    • 1
    • 2
    • 3
    • 4
    优化mysql镜像

    制作mysql镜像,优化官网镜像
    1)优化镜像时区问题
    2)在容器启动时,直接导入lagou.sql数据库

    mkdir -p /data/initsql 
    cd /data/initsql
    
    • 1
    • 2
    FROM mysql:5.7.31 
    # 作者信息 MAINTAINER mysql from date UTC by Asia/Shanghai "laosiji@lagou.com" 
    ENV TZ Asia/Shanghai 
    
    COPY lagou.sql /docker-entrypoint-initdb.d
    
    docker build --rm -t 192.168.198.101:5000/lagouedu/mysql:5.7.1 . 
    docker images 
    
    docker run -itd --name mysql --restart always --privileged=true -p 3306:3306 -e 
    MYSQL_ROOT_PASSWORD=admin -v /data/mysql:/var/lib/mysql 
    192.168.198.101:5000/lagouedu/mysql:5.7.1 --character-set-server=utf8 -- collation-server=utf8_general_ci 
    
    docker push 192.168.198.101:5000/lagouedu/mysql:5.7.1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    打包项目

    基础镜像
    docker pull openjdk:8-alpine3.9
    docker save openjdk:8-alpine3.9 -o jdk8.tar 
    docker load -i jdk8.tar
    
    • 1
    • 2
    • 3
    安装docker插件

    idea安装docker插件。Dockerfile、docker-compose.yml文件大部分内容会有提示信息。方便开发人员编写配置文件。高版本的idea中已经集成docker插件(idea2019、idea2020)

    官网地址: https://plugins.jetbrains.com/plugin/7724-docker/versions
    
    • 1
    制作镜像-dockerfile

    /data/dockerdemo/Dockerfile

    mkdir -p /data/dockerdemo 
    cd /data/dockerdemo
    
    • 1
    • 2
    FROM openjdk:8-alpine3.9 
    # 作者信息 
    MAINTAINER laosiji Docker springboot "laosiji@lagou.com" 
    # 修改源
    RUN echo "http://mirrors.aliyun.com/alpine/latest-stable/main/" > /etc/apk/repositories && \ 
    echo "http://mirrors.aliyun.com/alpine/latest-stable/community/" >> /etc/apk/repositories 
    
    # 安装需要的软件,解决时区问题 
    RUN apk --update add curl bash tzdata && \ 
        rm -rf /var/cache/apk/* 
    
    # 修改镜像为东八区时间 
    ENV TZ Asia/Shanghai 
    ARG JAR_FILE 
    COPY ${JAR_FILE} app.jar 
    EXPOSE 8082 
    ENTRYPOINT ["java","-jar","/app.jar"]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    生成测试镜像
    docker build --rm -t lagou/dockerdemo:v1 --build-arg JAR_FILE=dockerdemo.jar .
    
    • 1
    测试、删除镜像
    docker run -itd --name dockerdemo -p 8080:8080 lagou/dockerdemo:v1 
    docker logs -f dockerdemo 
    http://192.168.198.100:8082 
    docker stop dockerdemo d
    ocker rm dockerdemo
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 相关阅读:
    Spark java.io.NotSerializableException
    19、一起来学习MySQL 索引
    Spine2D骨骼动画播放器 - 微信小程序版
    GIT技巧
    【SpringCloud】2-SpringCloud微服务架构实例-订单支付
    一例“msvc编译器O2优化导致的崩溃”的分析
    技术分享 | Appium环境安装与架构介绍
    汽车电子专业知识篇(六十四)-车载毫米波雷达基本概念
    我的世界优化模组推荐:1.19.2 Fabric优化模组
    gRPC-go 元数据
  • 原文地址:https://blog.csdn.net/guan1843036360/article/details/127714798