• 【云原生生态圈】:服务快速上云--Docker部署SpringBoot案例详解


    本专栏将从基础开始,循序渐进,由浅入深讲解云原生相关知识,希望大家都能够从中有所收获,也请大家多多支持。
    专栏地址:云原生专栏
    本文涉及的代码都已放在gitee上:gitee地址
    如果文章知识点有错误的地方,请指正!大家一起学习,一起进步。

    本文将分别讲解如何用Docker部署MySQL、tomcat、Nginx、Redis,最后用Docker部署SpringBootWeb应用为案例,调用前面的镜像。本文所涉及的代码已经编译打包到我的云服务器中http://47.106.176.37:8080/hello,功能比较简单,每访问一次获取redis中记录的值,然后加1,返回给客户端。以实战为线索,逐步深入Docker相关知识,打造完整的Docker学习体系,可查阅,可复习,建议收藏。

    文章目录

    1 Docker部署MySQL

    1.1 拉取MySQL镜像

    docker pull mysql
    
    • 1

    查看镜像:

    1539957969383

    1.2 创建MySQL容器

    docker run -di --name=pinyougou_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7
    
    • 1

    -p 代表端口映射,格式为 宿主机映射端口:容器运行端口
    -e 代表添加环境变量 MYSQL_ROOT_PASSWORD是root用户的登陆密码

    1.3 进入MySQL容器

    • 进入容器中

      docker exec -it pinyougou_mysql /bin/bash

    • 登录mysql

      mysql -u root -p

    • 授权允许远程登录

      GRANT ALL PRIVILEGES ON . TO ‘root’@‘%’ IDENTIFIED BY ‘123456’ WITH GRANT OPTION;

    1.4 远程登陆MySQL

    • 我们在我们本机的电脑上去连接虚拟机Centos中的Docker容器,这里192.168.25.132是虚拟机操作系统的IP.

    1539958525538

    2 Docker部署tomcat

    2.1 拉取tomcat镜像

    docker pull tomcat:7-jre8
    
    • 1

    2.2 创建tomcat容器

    docker run -di --name=pinyougou_tomcat -p 9100:8080 tomcat:7-jre8
    
    • 1

    3 Docker部署Nginx

    3.1 拉取Nginx镜像

    docker pull nginx
    
    • 1

    3.2 创建Nginx容器

    docker run -di --name=pinyougou_nginx -p 80:80  nginx 
    
    • 1

    3.3 测试Nginx

    浏览器地址栏输入:http://192.168.25.132

    4 Docker部署Redis

    dockerhub中搜索redis镜像,如下图所示:

    image-20220606101619080

    选择相应的版本进行下载,这里使用的是最新版,复制下图所示的指令进行镜像的安装:

    image-20220606101940765

    安装完成的结果如下:

    image-20220606102106611

    为了方便以后的修改,这里在启动前将本地主机的redis.conf挂载到redis镜像的redis.conf,本地的/data/redis/data目录挂载到redis镜像的/data目录,如下图所示:

    image-20220606102346746

    关于镜像的描述可以在Description标签下查看:

    image-20220606102708668

    关于启动挂载目录的配置在如下位置:

    image-20220606103414915

    需要注意,上图中红框部分中redis.conf不在/usr/local/etc/redis目录中,从下图可以看到,redis.conf在目录/etc/redis目录下:

    image-20220606104650506

    所以对该命令做如下修改:

    docker run -v /data/redis/redis.conf:/etc/redis/redis.conf -v /data/redis/data:/data -d --name myredis -p 6379:6379 redis:latest redis-server /etc/redis/redis.conf
    
    • 1

    运行结果如下:

    image-20220606105024630

    如果是在云服务器的docker中配置环境,需要对外开放6379端口,如下图所示:

    image-20220606105256371

    并在服务器防火墙中放行6379端口:

    image-20220606105333223

    在本地安装Redis Desktop Manager并进行连接测试,Redis Desktop Manager的免费发行版可在如下位置下载:https://githubhttps://so.csdn.net/so/search?q=github&spm=1001.2101.3001.7020.com/uglide/RedisDesktopManager/releases/tag/0.9.3,连接测试如下:

    image-20220606101322568

    至此,在docker中配置redis完成。

    4.1 Redis配置账号密码

    redis官方文档:

    https://redis.io/docs/getting-started/installation/

    修改如下位置的redis.conf文件

    image-20220606204143478

    设置redis的密码:

    image-20220606203859866

    此时用Redis Desktop Manager不带密码连接失败:

    image-20220606204704374

    用密码连接:

    image-20220606204718857

    连接成功,结果如下:

    image-20220606205334643

    5 dockerfile介绍

    Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。它们简化了从头到尾的流程并极大的简化了部署工作。Dockerfile从FROM命令开始,紧接着跟随者各种方法,命令和参数。其产出为一个新的可以用于创建容器的镜像.

    更多语法参考:(官网手册的翻译)

    https://blog.csdn.net/guyue35/article/details/53891862

    5.1 dockerfile的demo

    • 在root下创建demo目录

      mkdir demo
      cd demo

    • 在demo 目录下创建 a文件

      vim a

    • 在某~/demo下创建Dockerfile文件

      vim Dockerfile

    内容为:

    # my dockerfile ljh
    FROM centos
    MAINTAINER ljh
    WORKDIR /root/workdir
    RUN touch te
    ADD a b
    ENV key1 "hello"
    
    
    语法解释:
    #  :代表注释
    FROM centos  : 代表依据基本的镜像来创建
    MAINTAINER ljh :代表就是作者是谁
    WORKDIR /root/workdir :代表就是创建容器时进入工作的目录是容器中的/root/workdir目录
    RUN touch te  :代表就是RUN 运行命令  运行一个创建空文件te
    
    COPY ["HI","."] :代表从宿主系统中复制HI 文件到容器系统中工作目录中的当前路径下
    ADD a b :代表从宿主机所在Dockerfile文件的目录下Copy 文件A 到容器中的b文件 b文件的目录为工作目录下。
    
    ENV key1 "hello" :定义linux中的环境变量。如下:  
    定义一个:key value 
    定义多个:key=value key2=value2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 创建自定义镜像

      docker biuld -t mycentos .

    语法解释:

    docker build : 表示通过Dockerfile文件来创建镜像
    -t mycentos 表示 给与镜像的名称和版本  为:mycentos:lasted (lasted可以不写)
    . 表示从当前目录下进行加载Dockerfile文件
    
    • 1
    • 2
    • 3

    1539962155189

    • 查看是否打包镜像成功

    1539962195129

    • 测试创建容器:

      docker run -di --name=mycentosheh mycustomcentos

    • 连接容器

      [root@localhost demo]# docker exec -it mycentosheh /bin/bash

    注意: 进入目录即为:/root/workdir

    1539962373599

    在目录下有 b文件和 te文件

    1539962405637

    输入:echo $key1 查看环境变量的值结果

    1539962444519

    6 Docker部署SpringBoot并访问之前的Redis

    新建SpringBoot项目:

    image-20220606222841062

    image-20220606222948099

    在SpringBoot中添加redis的依赖:

    
    
        org.springframework.boot
        spring-boot-starter-data-redis
        2.7.0
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    编写controller代码:

    • src/main/java/com/hashnode/_901dockerspringboottest/controller/CounterController.java

      package com.hashnode._901dockerspringboottest.controller;

      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.data.redis.core.StringRedisTemplate;
      import org.springframework.web.bind.annotation.GetMapping;
      import org.springframework.web.bind.annotation.RestController;

      @RestController
      public class CounterController {

      private int i = 0;
      
      @Autowired
      StringRedisTemplate redisTemplate;
      
      
      @GetMapping("/hello")
      public String count(){
          Long increment = redisTemplate.opsForValue().increment("count-people");
          return "有"+ increment + "人访问了这个页面";
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11

      }

    运行项目,访问localhost:8080/hello,结果如下:

    image-20220606210755591

    在maven中打包:

    image-20220606221044486

    接下来需要在项目目录新建Dockerfile,并配置Dockerfile的内容

    image-20220606221142709

    具体内容如下:

    # 导入jdk8镜像
    FROM openjdk:8-jdk-slim
    
    #设置作者
    LABEL maintainer=hashnode
    
    #将target目录中的*.jar 放在更目录下,新的jar包为app.jar,由于只有一个jar,所以这样这样操作
    COPY target/*.jar /app.jar
    
    #docker启动时的命令,相当于 java -jar /app.jar,注意:这里为app.jar,因为在上一步制作镜像的时候已经把jar更名为app.jar
    ENTRYPOINT ["java","-jar","/app.jar"]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    jdk镜像可以在如下地址进行寻找:

    image-20220606222405356

    由于windows本地没有docker环境,不能制作docker镜像,所以我们复制target目录和Dockerfile到服务器中,为了和配置文件一致,这里新建一个upload文件夹,并把jar包需要放在target目录下,如下图所示

    image-20220606221623336

    image-20220606221635313

    然后使用electerm将该目录上传到服务器:

    image-20220606221749499

    然后进入/root/upload目录制作镜像:

    image-20220606222049304

    接下来运行镜像即可:

    image-20220606222113043

    访问http://47.106.176.37:8080/hello,结果如下:

    image-20220606220659864

    先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

  • 相关阅读:
    数据结构插入排序
    【车载开发系列】UDS诊断---诊断故障清除($0x14)
    Talend 用Jave 处理数据转换
    【Java面试】Zookeeper如何实现Leader选举
    k8s-部署
    微信小程序接口请求/form-data/单文件、多文件上传
    点餐系统-----数据库设计
    SpringBoot 学习(九)Redis
    SQL查询优化---如何查询截取分析
    机器学习基础-数据分析:房价预测
  • 原文地址:https://blog.csdn.net/m0_67392931/article/details/126080748