首页 > 编程学习 > 高级架构师_Docker_第2章_ Docker核心原理_ 第6节Docker部署微服项目

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

文章目录

  • 高级架构师_Docker_第2章_ Docker核心原理_ 第6节Docker部署微服项目
  • Docker部署微服项目
      • 数据库
          • 创建数据库
          • 创建用户表
          • 新增测试数据
      • springboot项目
          • 项目简介
          • pom.xml
          • application.yml
          • 测试数据库连接
      • mysql容器
          • 运行镜像
          • 导入数据库
          • 测试项目
          • 优化mysql镜像
      • 打包项目
          • 基础镜像
          • 安装docker插件
          • 制作镜像-dockerfile
          • 生成测试镜像
          • 测试、删除镜像

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
新增测试数据
INSERT INTO tbuser (username,PASSWORD,userroles,nickname) VALUES 
('admin','1234','04','管理员'),('lagou','1234','03','拉勾教育')

springboot项目

项目简介
  1. 使用springboot技术
  2. mysql数据库
  3. springboot项目docker容器化部署
  4. mysql数据库容器化部署
pom.xml
<?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> 
    
    <parent> 
        <groupId>org.springframework.boot</groupId> 
        <artifactId>spring-boot-starter-parent</artifactId> 
        <version>2.3.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent> 
    <groupId>com.lagou</groupId> 
    <artifactId>dockerdemo</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <name>dockerdemo</name> 
    <description>Demo project for Spring Boot</description> 
    
    <properties> 
        <java.version>1.8</java.version> 
        <mybatispluins.version>3.3.2</mybatispluins.version> 
        <mysql.version>5.1.47</mysql.version> 
    </properties> 
    
    <dependencies> 
        <dependency> 
            <groupId>org.springframework.boot</groupId> 
            <artifactId>spring-boot-starter-web</artifactId> 
        </dependency>
        <dependency> 
            <groupId>com.baomidou</groupId> 
            <artifactId>mybatis-plus-boot-starter</artifactId> 
            <version>${mybatispluins.version}</version> 
        </dependency> 
        <dependency> 
            <groupId>mysql</groupId> 
            <artifactId>mysql-connector-java</artifactId> 
            <scope>runtime</scope> 
        </dependency> 
        <dependency> 
            <groupId>org.springframework.boot</groupId> 
            <artifactId>spring-boot-starter-test</artifactId> 
            <scope>test</scope> 
            <exclusions> 
                <exclusion> 
                    <groupId>org.junit.vintage</groupId> 
                    <artifactId>junit-vintage-engine</artifactId> 
                </exclusion> 
            </exclusions> 
        </dependency> 
    </dependencies> 
    
    <build> 
        <finalName>${project.name}</finalName> 
        <plugins> 
            <plugin> 
                <groupId>org.springframework.boot</groupId> 
                <artifactId>spring-boot-maven-plugin</artifactId> 
            </plugin> 
            <!--跳过单元测试--> 
            <plugin> 
                <groupId>org.apache.maven.plugins</groupId> 
                <artifactId>maven-surefire-plugin</artifactId> 
                <configuration> 
                    <skip>true</skip> 
                </configuration> 
            </plugin>
        </plugins>
    </build>
    
</project>
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
测试数据库连接

父类

@SpringBootTest(classes = DockerdemoApplication.class) 
@ExtendWith(SpringExtension.class) 
public abstract class DockerdemoApplicationTests { 
}

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); 
    } 
}

实体类

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

UserMapper接口

package com.lagou.dockerdemo.mapper; 

import com.baomidou.mybatisplus.core.mapper.BaseMapper; 
import com.lagou.dockerdemo.entity.Tbuser; 

public interface UserMapper extends BaseMapper<Tbuser> { 
}

启动类

@SpringBootApplication 
@MapperScan(basePackages = "com.lagou.dockerdemo.mapper") 
public class DockerdemoApplication { 
    
    public static void main(String[] args) { 
        SpringApplication.run(DockerdemoApplication.class, args); 
    }
}

UserService接口

public interface UserService {
    List<Tbuser> queryUsers(); 
}

UserServiceImpl实现类

@Service 
public class UserServiceImpl implements UserService { 
    @Resource 
    private UserMapper userMapper; 
    
    @Override public List<Tbuser> queryUsers() { 
        return this.userMapper.selectList(null); 
    } 
}

TestUser测试类

public class TestUser extends DockerdemoApplicationTests { 
    @Resource 
    private UserService userService; 
    
    @Test 
    public void testQueryUsers() {
        List<Tbuser> tbusers = this.userService.queryUsers(); 
    } 
}

控制器

@RestController 
public class UserController { 
    @Resource 
    private UserService userService; 
    
    @GetMapping("/users") 
    public List<Tbuser> queryUsers() { 
        return this.userService.queryUsers(); 
    } 
}

本地测试项目

http://localhost:8082/users

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
导入数据库

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

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

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

mvn clean package 

使用dos命令启动项目 
java -jar dockerdemo.jar
优化mysql镜像

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

mkdir -p /data/initsql 
cd /data/initsql
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

打包项目

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

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

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

/data/dockerdemo/Dockerfile

mkdir -p /data/dockerdemo 
cd /data/dockerdemo
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"]
生成测试镜像
docker build --rm -t lagou/dockerdemo:v1 --build-arg JAR_FILE=dockerdemo.jar .
测试、删除镜像
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
Copyright © 2010-2022 dgrt.cn 版权所有 |关于我们| 联系方式