基于docker容器化部署微服务

前言

在笔者系列文章中微服务配置隔离已经完成服务之间的配置隔离,服务整体来说是已经通了。
为了方便后续测试已经环境统一,笔者本章节会对服务进行容器化部署。由于服务器性能问题,本次部署采用maven完成镜像构建,结合docker-compose完成容器的创建。

容器化创建步骤

服务器放开2376 端口

我们后续的镜像创建需要基于2376端口,所以我们需要执行下面这段命令,对docker.service进行编辑

vim /lib/systemd/system/docker.service


可以看到笔者在截图位置处增加了一行-H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock

在这里插入图片描述

完成后重启docker服务并开放2376端口(因为笔者服务器是阿里云服务器所以这一步相对方便一些,就不多做介绍了)

systemctl daemon-reload
systemctl restart docker.service

为了测试连通性,我们在本地键入

 curl http://ip:2376/info

若输出下面这样一段文字,则说明当前设置生效了


{"ID":"IIPN:J265:YCRR:EQVR:FTPY:GBUK:VWES:MWJU:6TBH:NSFP:L7BU:K3RJ","Containers":6,"ContainersRunning":6,"ContainersPaused":0,"ContainersStopped":0,"Images":56,"Driver":"overlay2","DriverStatus":[["Backing Filesystem","extfs"],["Supports d_
type","true"],["Native Overlay Diff","false"],["userxattr","false"]],"Plugins":{"Volume":["local"],"Network":["bridge","host","ipvlan","macvlan","null","overlay"],"Authorization":null,"Log":["awslogs","fluentd","gcplogs","gelf","journald","
json-file","local","logentries","splunk","syslog"]},"MemoryLimit":true,"SwapLimit":true,"KernelMemory":true,"KernelMemoryTCP":true,"CpuCfsPeriod":true,"CpuCfsQuota":true,"CPUShares":true,"CPUSet":true,"PidsLimit":true,"IPv4Forwarding":true,
"BridgeNfIptables":true,"BridgeNfIp6tables":true,"Debug":false,"NFd":74,"OomKillDisable":true,"NGoroutines":72,"SystemTime":"2023-02-05T17:56:16.36473356+08:00","LoggingDriver":"json-file","CgroupDriver":"cgroupfs","CgroupVersion":"1","NEve
ntsListener":0,"KernelVersion":"4.19.91-24.1.al7.x86_64","OperatingSystem":"Alibaba Cloud Linux (Aliyun Linux) 2.1903 LTS (Hunting Beagle)","OSVersion":"2.1903","OSType":"linux","Architecture":"x86_64","IndexServerAddress":"https://index.do
cker.io/v1/","RegistryConfig":{"AllowNondistributableArtifactsCIDRs":[],"AllowNondistributableArtifactsHostnames":[],"InsecureRegistryCIDRs":["127.0.0.0/8"],"IndexConfigs":{"docker.io":{"Name":"docker.io","Mirrors":["https://fy707np5.mirror
.aliyuncs.com/"],"Secure":true,"Official":true}},"Mirrors":["https://fy707np5.mirror.aliyuncs.com/"]},"NCPU":1,"MemTotal":2043502592,"GenericResources":null,"DockerRootDir":"/var/lib/docker","HttpProxy":"","HttpsProxy":"","NoProxy":"","Name
":"iZ8vb7bhe4b8nhhhpavhwpZ","Labels":[],"ExperimentalBuild":false,"ServerVersion":"20.10.23","Runtimes":{"io.containerd.runc.v2":{"path":"runc"},"io.containerd.runtime.v1.linux":{"path":"runc"},"runc":{"path":"runc"}},"DefaultRuntime":"runc
","Swarm":{"NodeID":"","NodeAddr":"","LocalNodeState":"inactive","ControlAvailable":false,"Error":"","RemoteManagers":null},"LiveRestoreEnabled":false,"Isolation":"","InitBinary":"docker-init","ContainerdCommit":{"ID":"5b842e528e99d4d4c1686
467debf2bd4b88ecd86","Expected":"5b842e528e99d4d4c1686467debf2bd4b88ecd86"},"RuncCommit":{"ID":"v1.1.4-0-g5fd4c4d","Expected":"v1.1.4-0-g5fd4c4d"},"InitCommit":{"ID":"de40ad0","Expected":"de40ad0"},"SecurityOptions":["name=seccomp,profile=d
efault"],"Warnings":["WARNING: API is accessible on http://0.0.0.0:2376 without encryption.\n         Access to the remote API is equivalent to root access on the host. Refer\n         to the 'Docker daemon attack surface' section in the do
cumentation for\n         more information: https://docs.docker.com/go/attack-surface/"]}

引入插件

接下来我们就可以对自己的服务进行配置,就以笔者的cloud-gateway为例,模块截图如下所示:

在这里插入图片描述

从而完成基于maven打包生成镜像并上传到服务器了,首先在maven插件中引入下面这段依赖,读者只需按需修改下面的dockerHost即可,别的配置若无非必须则可以不动。

<plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.2.2</version>
                <configuration>
                    <imageName>${project.artifactId}</imageName>
                    <imageTags>
                        <imageTag>latest</imageTag>
                    </imageTags>
                    <!--指定Dockerfile路径-->
                    <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
                    <dockerHost>http://ip:2376</dockerHost>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <!--${project.basedir}/target-->
                            <directory>${project.build.directory}</directory>
                            <!--${project.artifactId}-${project.version}-->
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>

编写Dockerfile

我们上面的配置指明Dockerfile的路径为${project.basedir}/src/main/docker,所以我们要在main目录下创建一个docker文件夹。
在该文件夹下创建Dockerfile文件,以笔者为例笔者的cloud-gateway打包命令,就如下图所示(注意ENTRYPOINT 指定jvm参数笔者采用exec格式的,原本采用数组格式的会报错,笔者也没有去纠结原因)

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD cloud-gateway-0.0.1-SNAPSHOT.jar app.jar
RUN sh -c 'touch /app.jar'
# 调整JVM参数堆区空间大小,节省服务内存空间。
ENTRYPOINT exec java -Xmx32m -Xms32m  -Djava.security.egd=file:/dev/./urandom  -jar /app.jar

基于maven远程完成maven镜像的构建

完成后我们就可以到当前模块的pom文件的目录使用cmd键入下面这条命令,完成镜像构建

mvn clean package docker:build -DskipTests

如下图所示,一旦出现BUILD SUCCESS就说明镜像构建成功了

在这里插入图片描述

注意笔者在打包过程中遇到了一个报错:Execution repackage of goal org.springframework.boot:spring-boot-maven-plugin。查阅网上资料得知,不是spring boot引用不可添加下面这个插件,去掉后即可解决。


            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>

查看镜像是否成功到达服务器

我们到服务器键入

docker images

可以看到若出现我们打包的镜像名称说明打包成功了。同理我们完成其他服务器的插件引入和dockerfile编写。

启动测试

笔者为了启动方便这里也编写了一个docker-compose文件,文件名为cloud-service.yml内容如下:

version: "3"
services:
  cloud-gateway:
    container_name: cloud-gateway
    image: cloud-gateway:latest
    ports:
    - "8090:8090"
    restart: always

  account-service:
    container_name: account-service
    image: account-service:latest
    ports:
    - "9000:9000"
    restart: always

到文件cloud-service.yml下键入命令

docker-compose -f cloud-service.yml up -d

本地键入curl 命令,可以看到请求成功,说明本次服务器部署成功了。

curl ip:8090/account/getByCode/zsy
{"status":100,"message":"操作成功","data":{"id":1,"accountCode":"zsy","accountName":"zsy","amount":10000.00},"success":true,"timestamp":1675592778302}

参考文献

SpringCloud Alibaba微服务实战十五 - SpringCloud 容器化部署

Dockerfile中ENTRYPOINT指定JVM启动堆内存参数后部署容器启动报错?

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C#实现支付宝转账功能

环境 .net 6 AlipaySDKNet.OpenAPI 2.4.0 申请证书 登录支付宝开放平台https://open.alipay.com/ 进入控制台 授权回调地址也设置一下&#xff0c;加密方式AES 新建.net 6空白的web项目 证书除了java都需要自己生成一下pkcs1的密钥 privatekey.txt就是根据应用私钥生成…

星辰天合获评年度数智转型“优秀服务商”

近日&#xff0c;由中国智能制造百人会、中国智能制造产业网主办的“专精特新 单冠领航”-2023 制造业高质量发展大会暨数字化标准化创新高峰论坛在南京顺利举办&#xff0c;大会颁发了 2022-2023 年度数智转型“优秀服务商”奖项&#xff0c;星辰天合凭借在先进制造领域的优秀…

【论文阅读】MAKE-A-VIDEO: TEXT-TO-VIDEO GENERATION WITHOUT TEXT-VIDEO DATA

Make-a-video:没有文本-视频数据的文本-视频生成。 paper&#xff1a; code&#xff1a; ABSTRACT 优点: (1)加速了T2V模型的训练(不需要从头开始学习视觉和多模态表示)&#xff0c; (2)不需要配对的文本-视频数据&#xff0c; (3)生成的视频继承了当今图像生成模型的庞大…

SQL、Jdbc、JdbcTemplate、Mybatics

数据库&#xff1a;查询&#xff08;show、select&#xff09;、创建&#xff08;create)、使用(use)、删除(drop)数据库 表&#xff1a;创建&#xff08;【字段】约束、数据类型&#xff09;、查询、修改&#xff08;alter *add&#xff09;、删除 DML&#xff1a;增加(inse…

关于职场伪勤奋

前段时间看了一些关于勤奋学习、职场成长类的书籍&#xff0c;就在思考勤奋学习和职场的关系时&#xff0c;结合个人的理解&#xff0c;我定义了一种勤奋叫职场“伪勤奋”。那关于职场“伪勤奋”的定义和理解&#xff0c;与大家分享&#xff1a; 1、选择性任务完成 伪勤奋特征…

西电计科微机原理实验二(详细注释版)

西电计科微机原理实验二(详细注释版) 环境:VSCodeMASM/TASM插件(建议使用相同环境,学校机房环境有点老,可能会出一些奇怪的问题) 实验室:EⅡ-522 实验要求 输入一个不超过5位的十进制数,回车结束输入,并将其转换为二进制数,输出到屏幕上输入非数字字符,报错,重新输入输入q或…

git客户端安装问题

问题回顾&#xff1a; 做git客户端版本升级&#xff0c;安装好之后提示git&#xff1a;‘remote-https‘ 不是一个 git 命令。参见 git --help。 问题处理&#xff1a; 缺少第二步依赖下载 安装步骤&#xff1a; 1、删除安装git yum remove git 2、安装依赖 yum install lib…

Java常用注解

文章目录 第一章、Java注解与元数据1.1&#xff09;元数据与注解概念介绍1.2&#xff09;Java注解的作用和使用1.3&#xff09;注解的分类 第二章、Mybatis框架常用注解2.1&#xff09;Mybatis注解概览2.2&#xff09;常用注解MapperScanMapperSelectInsertUpdateDeleteParam结…

tcp的聊天室

注意&#xff1a;要加库文件&#xff0c;服务端客户端都要加 network 客户端的头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpSocket>//客户端类 #include <QMessageBox>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } Q…

Ubuntu 设置共享文件夹

一、在Windows中建立一个英文的文件夹 注意&#xff1a;新建文件夹的名称一定要是英文的&#xff0c;不能出现中文的路径&#xff08;可能出现问题&#xff09; 二、在VMware中添加共享文件 3: VMware安装VMware Tools 一般安装成功桌面上会显示这个安装包&#xff0c;&…

RV32/64 特权架构

machine mode: 运行最可信的代码;supervisor mode:为 Linux&#xff0c;FreeBSD 和 Windows 等操作系统提供支持;user mode:权限最低&#xff0c;应用程序的代码在此模式下运行&#xff1b; 这两种新模式都比user mode有着更高的权限&#xff0c;有更多权限的模式通常可以使用…

深度学习中的13种概率分布

1 概率分布概述 共轭意味着它有共轭分布的关系。 在贝叶斯概率论中&#xff0c;如果后验分布 p&#xff08;θx&#xff09;与先验概率分布 p&#xff08;θ&#xff09;在同一概率分布族中&#xff0c;则先验和后验称为共轭分布&#xff0c;先验称为似然函数的共轭先验。 多…

Python实现多种图像锐化方法:拉普拉斯算子和Sobel算子

Python实现多种图像锐化方法&#xff1a;拉普拉斯算子和Sobel算子 图像和视频逐渐成为人们生活中信息获取的重要来源&#xff0c;而图像和视频在传输过程中有很多因素可能造成图像模糊&#xff0c;比如不正确的聚焦会产生离焦模糊&#xff0c;景物和照相机的相对运动会造成运动…

C# 编写Windows服务程序

1.什么是windows服务&#xff1f; Microsoft Windows 服务&#xff08;即&#xff0c;以前的 NT 服务&#xff09;使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序。这些服务可以在计算机启动时自动启动&#xff0c;可以暂停和重新启动而且不显示任何用…

基于自动化脚本批量上传依赖到nexus内网私服

前言 因为某些原因某些企业希望私服是不能连接外网的&#xff0c;所以需要某些开源依赖需要我们手动导入到nexus中&#xff0c;尽管nexus为我们提供了web页面。但是一个个手动导入显然是一个庞大的工程。 对此我们就不妨基于脚本的方式实现这一过程。 预期效果 笔者本地仓库…

IDEA之设置主题风格为eclipse风格

设置IDEA的主题风格为eclipse风格&#xff0c;步骤如下: 1.选择File->Settings 2.选择 Plugins 3.搜索 eclipse theme&#xff0c;注意是红框里的&#xff0c;点击 install 下载后就会自动设置这个主题 4.你也可以去修改主题&#xff0c;选择 Appearance&#xff0c;设置th…

deepstream-python安装

​ 安装deepstream-docker 在这边文章中deepstream-docker详细介绍了如何在Ubuntu下安装deepstream-docker&#xff0c;安装完成之后&#xff0c;为了快速入门deepstream&#xff0c;我们可以安装deepstream-python库&#xff0c;通过阅读相应的例子来快速搭建一个应用。 安…

认识loader和plugin

在 webpack 中&#xff0c;专注于处理 webpack 在编译过程中的某个特定的任务的功能模块&#xff0c;可以称为插件。它和 loader 有以下区别&#xff1a; 1loader 是一个转换器&#xff0c;将 A 文件进行编译成 B 文件&#xff0c;比如&#xff1a;将 A.less 转换为 A.css&…

IDEA之设置项目包的结构层级为eclipse默认样式

idea默认项目包的结构层级如下: 想修改成eclipse默认的那种样式&#xff0c;设置步骤如下: 1.点击下图中红框图标进行设置 2.选择 Tree Appearance&#xff0c;取消勾选 Compact Middle Packages 3.勾选红框里的两个选项&#xff0c;Flatten Packages 和 Hide Empty Middle Pa…

HTML插入视频和音频(详解)

&#x1f4cd;文章目录&#x1f4cd; &#x1f9c0;一&#xff0c;简介&#x1f9c0;二&#xff0c;视频(video)&#x1f367;1&#xff0c;普通的视频插入&#x1f367;2&#xff0c;在html5中嵌入视频网站视频 &#x1f9c0;三&#xff0c;音频(audio) &#x1f9c0;一&#…