群晖docker创建运行spring cloud微服务

群晖的设置

群晖NAS的地址是192.168.1.71,进入群晖套件中心安装docker。
搜索下载 hldtux/oracle-jdk-11 镜像,我们将在此基础镜像上添加spring cloud微服务jar,创建我们自己的镜像。
在这里插入图片描述
下载后可以看到镜像大小是400多MB,debian9基础镜像大约180MB,Oracle JDK11解压后大约290M,所以两者相加,总体这个体积上差不多。
在这里插入图片描述

在这里插入图片描述
敲入linux命令,可以查看这个镜像是作者hldtux以debian9创建,同时创建了java用户,启动容器后,默认是java用户,工作目录是java用户的主目录/home/java。

在这里插入图片描述

进入控制面板—终端机和snmp,启用ssh功能。
在这里插入图片描述

win10下ssh登录群晖

在win10中添加ssh客户端。
在这里插入图片描述
在这里插入图片描述
打开cmd,ssh登录群晖

<span class="token function">ssh</span> 群晖用户名@192.168.1.71 <span class="token operator">></span>输入密码 <span class="token variable">$sudo</span> -i //获得root权限 <span class="token variable">$cd</span> /volume1/docker //进入群晖docker工作目录,准备创建和运行镜像
<span class="token function">ssh</span> 群晖用户名@192.168.1.71 <span class="token operator">></span>输入密码 <span class="token variable">$sudo</span> -i //获得root权限 <span class="token variable">$cd</span> /volume1/docker //进入群晖docker工作目录,准备创建和运行镜像 
ssh 群晖用户名@192.168.1.71 >输入密码 $sudo -i //获得root权限 $cd /volume1/docker //进入群晖docker工作目录,准备创建和运行镜像

创建和运行spring cloud 微服务镜像

参考我上一篇文章【图例】gradle构建spring cloud 多模块,注意把application配置文件中的注册服务地址都改成eureka,原来是localhost,但是我们目标是每个微服务运行在一个docker容器上,相当于每台服务器运行一个微服务,事先约定:运行注册服务容器名是eureka,运行订单服务容器名是order
在这里插入图片描述
在这里插入图片描述
在win10中打开\\192.168.1.71\docker共享文件夹,此文件夹即是群晖NAS的/volume1/docker。
把eureka注册服务、order订单服务、common公共服务这三个子模块的build/libs目录下jar拷贝进去,
在这里插入图片描述
编辑Dockerfile

FROM hldtux/oracle-jdk-11:latest MAINTAINER xxx <span class="token operator"><</span>xxx@xxx.com<span class="token operator">></span> COPY eureka-1.0-SNAPSHOT.jar eureka.jar EXPOSE 1111 CMD java -jar eureka.jar
 FROM hldtux/oracle-jdk-11:latest  MAINTAINER xxx <span class="token operator"><</span>xxx@xxx.com<span class="token operator">></span>  COPY eureka-1.0-SNAPSHOT.jar eureka.jar  EXPOSE 1111  CMD java -jar eureka.jar 
FROM hldtux/oracle-jdk-11:latest MAINTAINER xxx <xxx@xxx.com> COPY eureka-1.0-SNAPSHOT.jar eureka.jar EXPOSE 1111 CMD java -jar eureka.jar

在刚才的ssh登录cmd中,输入创建eureka镜像的命令,注意命令后有个点。
. :表示Dockerfile 文件在当前目录,可以指定Dockerfile 的绝对路径

docker build -t eureka:1 <span class="token keyword">.</span>
docker build -t eureka:1 <span class="token keyword">.</span> 
docker build -t eureka:1 .

再次编辑Dockerfile

FROM hldtux/oracle-jdk-11:latest MAINTAINER xxx <span class="token operator"><</span>xxx@xxx.com<span class="token operator">></span> COPY common-1.0-SNAPSHOT.jar common.jar COPY order-1.0-SNAPSHOT.jar order.jar EXPOSE 2223 CMD java -jar order.jar
 FROM hldtux/oracle-jdk-11:latest  MAINTAINER xxx <span class="token operator"><</span>xxx@xxx.com<span class="token operator">></span>  COPY common-1.0-SNAPSHOT.jar common.jar COPY order-1.0-SNAPSHOT.jar order.jar  EXPOSE 2223  CMD java -jar order.jar 
FROM hldtux/oracle-jdk-11:latest MAINTAINER xxx <xxx@xxx.com> COPY common-1.0-SNAPSHOT.jar common.jar COPY order-1.0-SNAPSHOT.jar order.jar EXPOSE 2223 CMD java -jar order.jar

在ssh登录cmd中,输入创建order镜像的命令,注意命令后有个点

docker build -t order:1 <span class="token keyword">.</span>
docker build -t order:1 <span class="token keyword">.</span> 
docker build -t order:1 .

在这里插入图片描述
创建docker网络mynet
-d:参数指定 Docker 网络类型,有 bridge、overlay。

docker network create -d bridge mynet
docker network create -d bridge mynet 
docker network create -d bridge mynet

在这里插入图片描述

依次启动两个镜像,启动后的容器名为eureka、order,保持之前的容器(或服务器)名称eureka、order的约定。
-d,表示后台运行容器,并返回容器ID;
-u root, 表示以root用户登录,
–network mynet,表示新建的容器加入到mynet网络
-p 1111:1111 ,表示端口映射,前一个是群晖NAS端口,后一个是容器端口
–name eureka,表示容器名称是eureka,保持事先约定。

docker run -d -u root --network mynet -p 1111:1111 --name eureka eureka:1
docker run -d -u root --network mynet -p 1111:1111 --name eureka eureka:1 
docker run -d -u root --network mynet -p 1111:1111 --name eureka eureka:1
docker run -d --network mynet -u root -p 2223:2223 --name order order:1
docker run -d --network mynet -u root -p 2223:2223 --name order order:1 
docker run -d --network mynet -u root -p 2223:2223 --name order order:1

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
两个微服务启动正常,eureka注册服务页面能看到订单order微服务已经注册。
分别进入容器eureka详情、容器order详情,打开终端:

在这里插入图片描述

在这里插入图片描述
回顾Dockerfile,三个jar文件分别copy到容器/home/java目录,权限归root所有,所以以root用户启动容器。如果去掉-u root,则启动容器后,默认用户是java,Dockerfile中的CMD命令就无法实现,容器将启动失败,查看容器日志,会有unable to access jarfile xxxx.jar。
因为我们使用的hldtux/oracle-jdk-11镜像,它的作者hldtux在制作镜像时的用户等配置。

原文链接:https://blog.csdn.net/hexiekuaile/article/details/114008128

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享