利用docker搭建、发布springboot项目(mac环境)

利用docker搭建、发布springboot项目(mac环境)

本文主要讲解如何建立一个springboot项目,并通过docker搭建并发布的完整流程。
特别说明:

  • 本文章不会讲解基础,为实战讲解,一些基础的东西就请各位自行学习了。
  • 后续所有贴出来的下载地址,都是官网地址,也可自行百度搜索,不在赘述。

一、 环境搭建

  • 准备工作,需要安装java、maven、idea、docker、mysql、redis

1.1 安装java

  • 官网下载地址:https://www.oracle.com/java/technologies/javase-jdk16-downloads.html
  • 下载两个版JDK
    • 一个是Mac版本的:jdk-16.0.1_osx-x64_bin.dmg 用于本机开发。
    • 一个是Linux版本的,用于后续docker及服务器上部署:jdk-16.0.1_linux-x64_bin.tar.gz
  • 安装JDK:双击dmg文件,一直下一步即可。
  • 安装好后,打开终端,输入java命令和javac命令,看下输出。使用 /usr/libexec/java_home -V 命令,查找所安装的java具体在哪。
    • image.png

1.2 安装maven

  • 官网下载地址:https://maven.apache.org/download.cgi
  • 下载 apache-maven-3.8.1-bin.tar.gz
  • 双击解压,然后移动到 /Library 下面。使用命令行 sudo mv apache-maven-3.8.1 /Library/
  • 配置maven,vi /Library/apache-maven-3.8.1/conf/settings.xml,主要修改两个配置:
    • 本地仓库地址:/Users/sullivan/repo (这里本地仓库地址,sullivan是我的电脑名,这里请替换Wie你自己的即可。)
    • 远端镜像仓库地址:这里我们使用的是阿里云的仓库地址。

/Users/sullivan/repo


  
    ali maven
    aliyun maven
    https://maven.aliyun.com/repository/public/
    central
  

1.3 安装idea

  • 官网下载地址:https://www.jetbrains.com/idea/download/#section=mac
  • 下载Ultimate版本,正常情况是可以试用30天的(请到某宝购买账号)
  • 直接双击安装,一直下一步即可
  • 配置idea:jdk和maven环境
    • jdk配置:File=>Project Structure=>Platform Settings=>SDKs,一般会直接出来,没有的话,使用命令行/usr/libexec/java_home -V获得的JDK地址
    • image.png
    • maven配置:IntelliJ IDEA=>Preferences=>Build,Execution,Deployment=>Build Tools=>Maven
      然后在Maven home path,选择我们下载的文件的地址,比如我的是:/Library/apache-maven-3.8.1
    • image.png

1.4 安装docker

  • 官方下载地址:https://www.docker.com/products/docker-desktop
  • 下载:Mac with intel chip。
  • 直接双击安装,一直下一步即可。安装后,在任务栏会出现一个小鲸鱼,就安装好了。

这里单独说下,如何切换docker的数据源,用原本docker的源,有可能下载很慢。我这里使用的是阿里云的源,登录阿里云后,可以在https://cr.console.aliyun.com/ap-southeast-1/instances/mirrors 找到阿里云的镜像加速器,每个账号都有一个自己的。然后在docker desktop的settings下的Docker Engine里面添加上源地址即可,然后保存重启docker即可。

  "registry-mirrors": [
    "https://mayswc8m.mirror.aliyuncs.com"
  ],

1.5 安装mysql,基于docker安装

  • 下载mysql的镜像,使用命令:docker pull mysql:5.7.31 ,等待下载
  • 查看库里面的镜像,使用命令: docker images
    • image.png
  • 启动容器,使用命令: docker run -d --name my1 -p 13306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.31
  • -d 是表明后台运行,否则退出终端后服务就停了
  • --name 设置docker容器的别名,后续启停、删除等都可以用别名代替,不用输入随机字符串ID。
  • -p 设置端口映射,比如 -p 13306:3306 将容器内的mysql端口3306与本机的13306端口绑定,就可以使用localhost的13306端口访问mysql了。
  • -e MYSQL_ROOT_PASSWORD=123456 设置mysql的访问密码,-e 是设置环境变量
  • 在最后面加上启动的镜像,一定要加上版本号哟,否则会去下载最新的版本,又要重新下载镜像了。
  • 安装后,我们进行测试,先通过命令行测试

    • docker ps -a 通过这个命令,查看是否启动成功,显示的my1的STATUS是 Up 多少时间,就应该启动成功了。
    • docker exec -it my1 bash 通过这个命令,我们进入到容器内部,里面其实就是一个简单的Linux系统
    • mysql -uroot -p123456 通过这个命令,我们就应该可以进入到mysql操作界面了。-u后面是数据库用户名,-p后面是该用户名的密码。你们按我上面说的命令启动,这个密码就应该可以进去。
  • 能够到这里,就说明mysql启动起来了,可以试试 show databases; 可以看看目前的数据库。

    • image.png
  • 我们可以下载mysql的桌面客户端,我用的是navicat for mysql,新建一个连接,然后连上去看看。

1.6 安装redis,基于docker安装

  • 下载redis的镜像,使用命令:docker pull redis

  • 查看库里面的镜像,使用命令: docker images

    • image.png
  • 启动容器,命令为: docker run -d --name rd1 -p 16379:6379 redis --requirepass 123456 ,参数说明,请看docker安装mysql里面的说明。再强调下,这里没有带版本号,就是用的最新版本。

  • 单独说明下,最后的参数 --requirepass 是设置Redis密码的
  • 进行测试,使用命令行进行验证
    • docker exec -it rd1 redis-cli 这里的rd1是我启动时设置的别名,然后就可以看到 127.0.0.1:6379> 就说明进去了,可以直接试一下: set a 123 以及 get a,如果打印出来值,则说明搞定。
    • 但是由于redis有密码,而我们没有用密码登录,需要会报错:(error) NOAUTH Authentication required.
    • 使用命令 auth 123456 即可,现在可以正常使用了。
    • image.png

二、编写测试demo

2.1 新建一个项目

  • 新建一个项目,选择Spring Initializr,根据下图填写内容
    • image.png
  • 选择项目需要引入的第三方插件,然后点击完成
    • image.png
  • 编译项目,Maven需要download很多包。耐心等待右下角的进度条完全走完
    • image.png
  • 点击package,会发现报错,因为缺少一个插件。
    • image.png
  • 这里需要引入一个插件,请打开pom.xml文件,在build下添加一个配置

    org.apache.maven.plugins
    maven-surefire-plugin
    2.22.2
    
        true
    

    • image.png
  • 重新 package 之后,出现 [INFO] BUILD SUCCESS 就证明没啥问题了。

    注意:这个过程maven会去下载很多第三方插件,用于支持springboot、mysql、redis等等,所以需要内心等等。

2.2 编写一个接口

  • 新建一个java类,命名TestController.java

    • image.png
    • image.png
  • 编写第一个接口

    • image.png
  • 添加配置文件,我们使用的是yml格式,所以重命名一下 application.propertiesapplication.yml

    • image.png
  • 添加以下配置:

server:
  port: 8888 # 服务端口

spring:
  datasource:
    name: test  # 数据库名
    url: jdbc:mysql://127.0.0.1:13306/test?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&failOverReadOnly=false&useSSL=false # url
    username: root  # 数据库用户名
    password: 123456  # 数据库密码
    driver-class-name: com.mysql.cj.jdbc.Driver  # 数据库链接驱动
  redis:
    host: 127.0.0.1 # redis端口
    port: 16379 # redis端口
    password: 123456 # redis密码
    database: 0
    • image.png
  • 启动springboot服务

    • image.png
  • 打开浏览器访问:http://127.0.0.1:8888/test/getString

    • image.png
  • 完成第一个接口的开发、启动、测试访问

2.3 编写数据库访问接口

  • 创建数据库,脚本如下:
CREATE DATABASE `test`;
USE `test`;

CREATE TABLE `user` (
  `id` int(32) NOT NULL AUTO_INCREMENT,
  `username` varchar(32) NOT NULL,
  `password` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

insert into user(id, username, password) values(0, '张三', '111111');
insert into user(id, username, password) values(0, '李四', '222222');
select * from user;
    • image.png
  • 修改pom.xml文件,修改mysql版本号、添加mybatis依赖

        
            mysql
            mysql-connector-java
            8.0.25
            runtime
        
        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
            2.2.0
        
  • 添加4个包,controller,service,mapper,entity

    • image.png
  • 添加实体对象,entity:User.java

    • image.png
  • 创建mapper接口,mapper:UserMapper.java

    • image.png
  • 创建service实现,service:UserService.java

    • image.png
  • 创建controller类, controller:UserController.java

    • image.png
  • 创建mybatis的sql映射文件,在resources下创建文件夹(Directory):mapping

    • image.png
  • 创建映射文件,mapping:UserMapping.xml

    • image.png
  • 修改主入口文件,TestDemoApplication.java

    • image.png
  • 在yml文件中添加mybatis配置

    • image.png
  • 启动服务,先clean,在run

    • image.png
  • 测试访问,http://127.0.0.1:8888/user/getUserById?id=1

    • image.png
  • 完成

三、发布应用

3.1 本机docker环境打包运行

  • 下载镜像:ubuntu:18.04 使用命令:docker pull ubuntu:18.04

    • image.png
  • 配置Dockerfile文件。创建文件夹:DockerImage,在里面创建文件:Dockerfile

FROM ubuntu:18.04

WORKDIR /root

ENV LANG=C.UTF-8
ENV JAVA_HOME=/java
ENV PATH=$PATH:$JAVA_HOME/bin

RUN apt update && apt install -y --no-install-recommends fontconfig curl telnet iputils-ping vim \
    && rm -rf /var/lib/apt/lists/* \
    && rm -rf /var/log/*

VOLUME /java
  • 打包我们自己的镜像,使用命令 docker build -t testdi .

    • image.png
  • 获取mysql和redis的docker容器的ip,使用命令:docker inspect my1 | grep IPAddressdocker inspect rd1 | grep IPAddress 查询到IP

    • image.png
  • 修改yml配置文件,修改mysql连接的ip和端口,redis连接的ip和端口

server:
  port: 8888 # 服务端口

spring:
  datasource:
    name: test  # 数据库名
    url: jdbc:mysql://172.17.0.2:3306/test?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&failOverReadOnly=false&useSSL=false # url
    username: root  # 数据库用户名
    password: 123456  # 数据库密码
    driver-class-name: com.mysql.cj.jdbc.Driver  # 数据库链接驱动
  redis:
    host: 172.17.0.3 # redis端口
    port: 6379 # redis端口
    password: 123456 # redis密码
    database: 0

mybatis:
  mapper-locations: classpath:mapping/*Mapping.xml  #mapping文件所在位置
  type-aliases-package: com/ske/test/testdemo
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl  #开启mybatis日志
  • 修改maven配置文件


    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.5.2
         
    
    com.ske.test
    testdemo
    0.0.1-SNAPSHOT
    testdemo
    Demo project for Spring Boot
    
        16

        
        false
        
        false
        
        false
        
        testdi
        
        
        
        
        ${project.artifactId}:latest

    
    
        
            org.springframework.boot
            spring-boot-starter-data-redis
        
        
            org.springframework.boot
            spring-boot-starter-jdbc
        
        
            org.springframework.boot
            spring-boot-starter-thymeleaf
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
            2.2.0
        

        
            mysql
            mysql-connector-java
            8.0.25
            runtime
        
        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
            2.2.0
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    


    
        
            
                org.apache.maven.plugins
                maven-surefire-plugin
                2.22.2
                
                    true
                
            
            
                org.springframework.boot
                spring-boot-maven-plugin
                
                    
                        
                            repackage
                        
                    
                
                
                    ${skip.boot}
                
            
            
                org.codehaus.mojo
                build-helper-maven-plugin
                1.8
                
                    
                        
                            timestamp-property
                        
                        
                            build.time
                            yyyyMMdd.HHmmss
                            GMT+8
                        
                    
                
            
            
                com.spotify
                docker-maven-plugin
                1.2.2
                
                    
                        package
                        
                            build
                        
                    
                
                
                    ${skip.docker}
                    ${image.name}
                    
                        latest
                        v${build.time}
                    
                    ${image.push}

                    ${image.base}
                    root
                    /export/servers
                    
                        mkdir -p /export/tmp
                    
                    ["sh", "-c", "java -server -Djava.io.tmpdir=/export/tmp $OPTIONS -Djava.security.egd=file:/dev/./urandom -jar ${project.build.finalName}.jar"]
                    ${docker.host}
                    ${docker.ca}
                    
                        
                            /export/servers
                            
                            ${project.build.directory}
                            
                            ${project.build.finalName}.jar
                        
                    
                
            
        
    


  • 主要修改点:

    • 修改了artifactId,必须改为全小写,否则打包会报错
    • 修改了properties,添加一些参数
    • 修改了build,修改了打包方式
  • 启动,使用命令:docker run -d -v /Users/sullivan/jdk-16.0.1:/java -p8888:8888 --name td --rm testdemo:latest

特别说明,这里需要使用Linux版本的JDK,之前下载的时候,已经提示过下载Linux版本的JDK了,解压后,在命令中使用这个版本的JDK路径

  • 可以通过浏览器访问了,输入地址:http://127.0.0.1:8888/user/getUserById?id=1
  • 查看日志,使用命令:docker logs -f td

你可能感兴趣的:(利用docker搭建、发布springboot项目(mac环境))