微服务自动化管理【IDEA使用Docker插件进行一键部署】

news2024/11/14 20:29:01
  1. 本章目标
    IDEA使用Docker插件实现springboot项目的一键部署

    要开两个虚拟机
    server
    registry

server上进行操作

  1. Docker开启远程api端口(注意这种配置方式只适用于开发和学习,在公共网络中不要这样配置,容易引发安全问题)
    默认情况下dokcer是不支持远程访问的,需要修改配置,开启Docker的远程访问

    #1.修改Docker服务文件,需要先切换到root用户
    vim /lib/systemd/system/docker.service
    #2.注释掉"ExecStart"这一行,并添加下面这一行信息
    ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375
    #3.重新加载配置文件
    systemctl daemon-reload
    #4.重启服务
    systemctl restart docker.service
    #5.查看配置的端口号(2375)是否开启(非必要)
    netstat -nlpt
    #6.修改防火墙添加2375端口(必需)
    firewall-cmd --zone=public --add-port=2375/tcp --permanent &&
    firewall-cmd --reload &&
    firewall-cmd --list-ports

  2. IDEA连接docker
    详情见:images/IDEA安装与配置Docker插件.png(01~04)
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

注1:“Docker”插件仅仅是一个图形化管理工具,一键部署另有其人

  1. 镜像的拉取(略)
    idea可以通过可视化的方式拉取镜像,不用自己去敲命令
    注1:有时候会出现拉取的时间超时的情况,可以配置一下国内的镜像获取阿里云的加速器

  2. 容器的创建与运行(略)

server上进行操作

  1. 综合案例:手动部署springboot项目
    0.调试命令
    #停止并删除所有容器
    docker stop $(docker ps -aq) && docker rm $(docker ps -aq)

1.创建springboot项目test1启动并测试

2.将test1项目打成jar包
版本指定为1.x.0

3.上传test1jar到linux服务器
mkdir /usr/local/mytools && cd /usr/local/mytools
rz

4.创建并编辑dockerfile
cd /usr/local/mytools
vim Dockerfile

#1.指定基础镜像
FROM openjdk:8-jdk-alpine


#2.维护者信息
MAINTAINER xyz "xuyuan@qq.com"


#3.创建/tmp目录并持久化到Docker数据文件夹,因为Spring Boot使用的内嵌Tomcat容器默认使用/tmp作为工作目录
VOLUME /tmp


#4.复制test1.jar到容器里
#此处与之后的idea中使用docker插件一键发布是不一样的
ADD test1.jar /test1.jar


#5.设置时区
ENV TZ=PRC
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone


#6.声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务
EXPOSE 8080


#7.指定容器启动程序及参数(相当于在容器中用cmd命令执行jar包)
ENTRYPOINT ["java","-jar","/test1.jar"]


#下面的写法指定springboot项目启动时指定的额外参数
#ENTRYPOINT ["java","-jar","/test1.jar","--spring.config.location=/usr/local/project/docker/xxl-job/config/application.yml"]

5.执行dockerfile创建对应版本的镜像(x换成对应版本即可)
docker build -t test1:1.0.0 .

6.使用test1:l.x.0镜像启动容器(x换成对应版本即可)
docker run -d
-p 8080:8080
–name test1
–restart=always
test1:1.0.0

docker stop test1 && docker rm test1

 注1:如果8080端口无法访问,请修改防火墙添加8080端口(必需) 
          firewall-cmd --zone=public --add-port=8080/tcp --permanent && \
          firewall-cmd --reload && \
          firewall-cmd --list-ports   

7.打开postman进行测试

小结:传统的docker部署springboot项目,需要自己手动配置Dockerfile文件,还需要将生成的jar包跟Dockerfile文件一起上传到服务器,再创建镜像,然后启动容器,整个流程下来很麻烦,如果用idea的dockerfile-maven-plugin插件就可以实现一键部署springboot项目,简单方便

阿里云镜像仓库

  1. 私有镜像仓库
    1.关键概念
    仓库(Repository):就是存放镜像的地方。类似于 Node 的 npm; java 的 Maven。
    注册服务器(Registry):它的概念比较容易与仓库混淆。实际上注册服务器是用来管理仓库的服务器,一个服务器上可以存在多个仓库,而每个仓库下可以有多个镜像。例如对于仓库地址 hub.dockerpool.com/nginx 来说,hub.dockerpool.com 是注册服务器的地址,nginx 是仓库名。
    私有仓库:公司的项目一般不予许我们上传到 Docker Hub 这类的公共仓库中,所有学会创建一个私有仓库也是非常必要的

    2.私服搭建两种方案
    docker 官方提供的私有仓库 registry,用起来虽然简单 ,但在管理的功能上存在不足。
    Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,
    harbor使用的是官方的docker registry(v2命名是distribution)服务去完成。harbor在docker distribution的基础上增加了一些安全、访问控制、管理的功能以满足企业对于镜像仓库的需求
    注1:harbor翻译成中文就是码头的意思

    registry上进行操作

    3.docker官方提供的私有仓库registry的搭建与使用
    1).拉取Registry镜像(这里选择搭建2.7版本的registry)
    docker pull registry:2.7

    2).创建并运行Registry容器
    docker run -d
    –name myregistry
    -p 5000:5000
    -v /usr/local/docker/registry:/var/lib/registry
    –restart=always
    registry:2.7

    注1:使用-v /usr/local/docker/registry:/var/lib/registry将宿主机/usr/local/docker/registry挂载到容器/var/lib/registry,即将上传的镜像放到本地的/usr/local/docker/registry目录下
    3).验证是否搭建成功
    #访问私有镜像仓库地址,仓库目前为空
    curl http://127.0.0.1:5000/v2/_catalog
    curl http://192.168.183.165:5000/v2/_catalog

    server上进行操作

    4).让docker信任私有镜像仓库地址
    # 1.vi编辑器打开/etc/docker/daemon.json
    vi /etc/docker/daemon.json

    #2.在daemon.json中添加以下内容,其值为注册服务器(registry)的IP及端口(注:IP及端口改成自己机器上的相关IP及端口)
    “insecure-registries”:[“192.168.238.134:5000”]

    #3.daemon.json修改完成后结果如下,其中阿里云加速地址不要修改,IP要修改成docker registry的IP
    {
    “registry-mirrors”:[“加速地址”],
    “insecure-registries”:[“192.168.238.134:5000”]
    }
    #4.然后重启Docker服务
    systemctl restart docker && systemctl status docker

server 上操作

5).在私有仓库的使用
上传、下载镜像
创建好私有仓库之后,就可以使用 docker tag 来标记一个镜像,然后推送它到仓库。例如私有仓库地址为 127.0.0.1:5000
#1.先在本机查看已有的镜像,选择其中一个进行上传
docker images
#2.镜像标记(push前必须先标记镜像)
##镜像标记语法,自定义repository 不能有大写字母
docker tag IMAGE[:TAG] [REGISTRY_HOST[:REGISTRY_PORT]/]REPOSITORY[:TAG]
docker tag 自定义镜像名[:版本] 私服IP:端口/仓库名[:版本]
例如:
docker tag test1:1.0.0 192.168.238.134:5000/test1:1.0.0
#标记完后再执行查看所有镜像,会多出一个镜像
docker images
#3.镜像上传
docker push 192.168.238.134:5000/test1:1.0.0
#4.注册服务器查看命令
#用curl 查看注册服务器的所有镜像
curl 192.168.238.134:5000/v2/_catalog
#列出指定镜像有哪些tag
curl 192.168.238.134:5000/v2/test1/tags/list
#5.删除本地的镜像(server1)
#删除指定镜像
docker rmi 192.168.238.134:5000/test1:1.0.0
#删除所有镜像
docker rmi -f $(docker images -qa)
注1:通过docker images命令可以看到,本地已经没有了192.168.217.143:5000/test1:1.0.0
#6.再从registry下载镜像
docker pull 192.168.238.134:5000/test1:1.0.0

  1. idea中使用dockerfile-maven-plugin一键部署springboot项目
    1.插件使用注意事项
    1.该插件依赖一台装有Docker的Host完成镜像的构建(完成)
    2.由于该插件需要访问Docker Host,因此要求Docker Host打开TCP管理端口,并允许访问(完成)
    3.使用该插件的机器需要配置DOCKER_HOST选项,指向Docker Host对应端口(未完成)
    即在windows下配置相关环境变量
    DOCKER_HOST=tcp://x.x.x.x:2375
    注:修改了系统变量需要重启开发工具才能生效,一开始提示上传镜像失败,看了错误是上传的ip还是默认的127.0.0.1,重启IDEA就可以了
    4.该插件构建和发布镜像依赖于镜像仓库,需要用户提供镜像仓库的登录信息,支持POM设置和Settings设置
    镜像创建可以使用阿里云镜像,或者是私有镜像仓库
    5.需在maven/conf/下的setting.xml配置
    这个文件在maven目录下,可以 cd $M2_HOME/conf 进入。在pluginGroups中增加一个com.spotify
<pluginGroups>
             <pluginGroup>com.spotify</pluginGroup>
         </pluginGroups>

2.在与pom.xml同目录创建Dockerfile文件

#1.指定基础镜像
FROM openjdk:8-jdk-alpine


#2.维护者信息
MAINTAINER xyz "xuyuan@qq.com"


#3.创建/tmp目录并持久化到Docker数据文件夹,因为Spring Boot使用的内嵌Tomcat容器默认使用/tmp作为工作目录
VOLUME /tmp


#4.复制test1-latest.jar到容器里
ADD test1.jar /test1.jar


#5.设置时区
ENV TZ=PRC
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone


#6.声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务
EXPOSE 8080


#7.指定容器启动程序及参数(相当于在容器中用cmd命令执行jar包)
ENTRYPOINT ["java","-jar","/test1.jar"]


#下面的写法指定springboot项目启动时指定的额外参数
#ENTRYPOINT ["java","-jar","/job.jar","--spring.config.location=/usr/local/project/docker/xxl-job/config/application.yml"]

附录一:使用openjdk:8-jdk-alpine镜像启动容器,并解决时区问题

附录二:dockerfile-maven-plugin和docker-maven-plugin的区别(重点)
在dockerfile-maven-plugin插件出现之前,还有一个maven插件是docker-maven-plugin,是由同一个作者创造,作者明确表示推荐使用dockerfile-maven-plugin,并会持续升级;
而docker-maven-plugin不在添加任何新功能,只接受修复bug。
两个插件的设计思想是有差别的,前者需要独立编写Dockerfile文件,后者允许没有Dockerfile文件,所有的docker相关配置都写在pom文件的plugin中,这样使maven插件显得很笨重,
并且如果脱离了这个maven插件还得重写编写Dockerfile,不够灵活。
因此,推荐使用maven插件:dockerfile-maven-plugin。

附:

<plugin>
                <groupId>com.spotify</groupId>
                <artifactId>dockerfile-maven-plugin</artifactId>
                <version>1.4.13</version>
                <executions>
                    <execution>
                        <id>default</id>
                        <!-- 如果package时不想用docker打包,就注释掉这个goal-->
                        <goals>
                            <goal>build</goal>
                            <goal>push</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <!--<repository>注册服务器IP(push镜像的地址):5000/仓库名</repository>-->
                    <repository>192.168.238.133:5000/test1</repository>
                    <!-- 不指定tag默认为latest -->
                    <tag>${project.version}</tag>
                    <buildArgs>
                        <!-- 提供参数JAR_FILEDockerfile传递 -->
                        <JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
                    </buildArgs>
                </configuration>
            </plugin>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/176787.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux基本功系列之find命令实战

文章目录前言&#x1f680;&#x1f680;&#x1f680;一. find命令介绍二. find常用参数及语法格式三. 示范案例3.1 查找符合文件名规则的文件3.2 根据文件类型类查找文件3.3 按照更改时间或访问时间等查找文件3.4 查找并执行相应的命令3.5 按照文件大小来查找3.6 按照文件所有…

启动hive报错no hbase in

启动hive报错no hbase in 将hdfs和yarn都启动成功之后&#xff0c;启动hive&#xff0c;如下所示&#xff1a;[atguiguhadoop102 conf]$ cd /opt/module/hive/ [atguiguhadoop102 hive]$ bin/hive报错信息如下which: no hbase in (/usr/local/bin:/usr/bin:/usr/local/sbin:/us…

C++ · 类和对象 · 02 | 类的6个默认成员函数

啊我摔倒了..有没有人扶我起来学习.... &#x1f471;个人主页&#xff1a;《CGod的个人主页》\color{Darkorange}{《CGod的个人主页》}《CGod的个人主页》交个朋友叭~ &#x1f492;个人社区&#xff1a;《编程成神技术交流社区》\color{Darkorange}{《编程成神技术交流社区》…

【操作系统】—— 如何安装双系统与多系统(带你快速了解)

&#x1f4dc; “作者 久绊A” 专注记录自己所整理的Java、web、sql等&#xff0c;IT技术干货、学习经验、面试资料、刷题记录&#xff0c;以及遇到的问题和解决方案&#xff0c;记录自己成长的点滴。 &#x1f341; 操作系统【带你快速了解】对于电脑来说&#xff0c;如果说…

博客系统项目的自动化测试

作者&#xff1a;~小明学编程 文章专栏&#xff1a;测试开发 格言&#xff1a;热爱编程的&#xff0c;终将被编程所厚爱。 目录 博客界面 测试用例 界面测试 功能测试 性能测试 兼容性测试 易用性测试 安全性测试 ​编辑自动化测试 登录界面的测试 界面文字模块 测…

ubuntu使用教程与常用命令

ubuntu使用教程 一、 Ubuntu简介 Ubuntu&#xff08;乌班图&#xff09;是一个基于Debian的以桌面应用为主的Linux操作系统&#xff0c;据说其名称来自非洲南部祖鲁语或科萨语的“ubuntu”一词&#xff0c;意思是“人性”、“我的存在是因为大家的存在”&#xff0c;是非洲传…

Python爬虫之Scrapy框架系列(5)——项目实战【某瓣Top250电影所有信息的txt文本存储】

上篇文章已经成功解析提取到豆瓣Top250电影想要的所有数据。下一步就是将其交给管道进行存储。 目录&#xff1a;1. 编写items.py文件&#xff08;定义结构化数据字段&#xff09;2. 爬虫文件里将数据一一对应字段名&#xff1a;3. 将数据返回给管道&#xff1a;4. 编写pipelin…

MCAL系列介绍04-ICU

本文框架1. 前言2. 基本概念3. ICU采集过程3.1 获取周期占空比3.2 获取边沿数量3.3 获取时间戳4. Autosar系列文章快速链接1. 前言 ICU驱动器是使用Input Capture Uint模块&#xff08;ICU&#xff09;解调PWM信号、计数脉冲、测量频率和占空比、生成简单中断以及唤醒中断的模…

树莓派配置Python虚拟环境、安装PyQt5、安装PySide2

要从头设置好一台可用于开发的树莓派&#xff0c;可以参考树莓派 4B 无屏幕&#xff0c;连接WiFi、SSH、VNC&#xff0c;系统换源、pip换源&#xff0c;安装中文输入法 Python虚拟环境 树莓派&#xff08;或者说arm平台&#xff09;使用Python虚拟环境的正确方式是使用pipenv…

【手写 Vue2.x 源码】第三十九篇 - 组件部分 - 创建组件虚拟节点

一&#xff0c;前言 上篇&#xff0c;介绍了组件部分-组件的合并&#xff0c;主要涉及以下几个点&#xff1a; 组件初始化情况&#xff1b;组件合并的位置&#xff1b;组件合并的策略&#xff1b;组件合并后测试&#xff1b; 本篇&#xff0c;组件部分-组件的编译&#xff1…

【C语言】对<进阶版三子棋>的完善和改进

这篇文章主要是对前面三子棋游戏的完善和改进。 文章目录 目录 1.将棋子*和#&#xff0c;改为1和0&#xff1b; 2.电脑下棋显示坐标 3.可以选择电脑先手或玩家先手 4.在退出游戏时显示游戏信息 5.完善后的游戏效果 二、完整程序代码 1.game.h 2.test.c 3.game.c 总结 前言 h…

【教程】虚拟环境与Pytorch安装

【教程】虚拟环境与Pytorch安装NVIDIA驱动安装虚拟环境创建激活/删除相关库的安装Pytorch安装安装地址可能遇到的问题处理报错安装卡顿测试是否安装完成参考NVIDIA驱动安装 NVIDIA驱动可在官网进行安装&#xff1a;NVIDIA驱动官网 命令行输入nvidia-smi可查看cuda版本等信息&…

Linux常用命令——ss命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) ss 比 netstat 好用的socket统计信息&#xff0c;iproute2 包附带的另一个工具&#xff0c;允许你查询 socket 的有关统计信息。 补充说明 ss命令用来显示处于活动状态的套接字信息。ss命令可以用来获取socket…

XGBoost的原理、工程实现与优缺点

Xgboost简介 XGBoost是陈天奇等人开发的一个开源机器学习项目&#xff0c;高效地实现了GBDT算法并进行了算法和工程上的许多改进&#xff0c;被广泛应用在Kaggle竞赛及其他许多机器学习竞赛中并取得了不错的成绩。XGBoost本质上还是一个GBDT&#xff0c;但是力争把速度和效率发…

C++普通类,派生类,虚基类的成员构造顺序以及构造函数调用顺序详解

目录前言普通类构造析构顺序解析依赖关系产生的错误派生类构造析构顺序解析扩展菱形多继承场景含虚基类的派生类构造析构顺序解析扩展菱形多继承场景(引入虚继承)前言 C规定“对象的析构过程必须与其构造过程相反”这一语法规则。 因此我们研究透彻了构造过程&#xff0c;那么…

宕机了,Redis如何避免数据丢失?

今天是大年初一&#xff0c;祝大家新年快乐&#xff0c;新的一年技术增进&#xff0c;工资翻倍。 目前&#xff0c;Redis的持久化主要有两大机制&#xff0c;即AOF日志和RDB快照&#xff0c;在接下来的两节课里&#xff0c;我们就分别学习一下吧。 AOF日志是如何实现的&#…

结构型模式-装饰器模式

1.概述 快餐店有炒面、炒饭这些快餐&#xff0c;可以额外附加鸡蛋、火腿、培根这些配菜&#xff0c;当然加配菜需要额外加钱&#xff0c;每个配菜的价钱通常不太一样&#xff0c;那么计算总价就会显得比较麻烦。 使用继承的方式存在的问题&#xff1a; 扩展性不好 如果要再加…

Alibaba微服务组件Sentinel学习笔记

1 .Sentinel 是什么 随着微服务的流行&#xff0c;服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式服务架构的流量控制组件&#xff0c;主要以 流量为切入点&#xff0c;从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的…

一篇读懂图神经网络

来源&#xff1a;投稿 作者&#xff1a;张宇 编辑&#xff1a;学姐 近年来&#xff0c;作为一项新兴的图数据学习技术&#xff0c;图神经网络&#xff08;GNN&#xff09;受到了非常广泛的关注&#xff0c;在各大顶级学术会议上&#xff0c;图神经网络相关的论文也占了相当可观…

https://app.diagrams.net/在线画图的一些技巧

最近工作需要,实践了在线画图的case, 下面就把使用心得记录一下: 关于diagrams 的一些小技巧: 登入的网页是:Flowchart Maker & Online Diagram Software 1: 利用group 的选项,这个可以整体移动,不用担心会漏掉一个: 就是选中一个图标,然后,看右边arrange 下面…