使用Dockerfile制作微服务镜像

摘要:
将Maven打包插件添加到JAR打包微服务微服务POM文件中:true重新打包#终端进入微服务的根目录并执行打包命令:mvncleanpackageDmaven。test Skip=true#将微服务Jar包上载到Linux Dockerfile脚本文件以编写Dockerfile文件,并将其放置在与Jar包相同的目录中。FROMopenjdk:8-jdk-alpineARGJAR_FILECOPY${JAR_FILE}应用程序。jarEXPOSE7001ENTRYPOINT[“java”,“-jar”,“/app.jar”]将微服务映像构建到Dockerfile所在的目录,并执行以下命令:dockerbuild-Build argJAR_FILE=cloud-eureka-server-7001.jar-teureka7001:v2.--Build arg:用于为参数赋值;JAR_FILE:参数名称-t:图像名称;.:指示获取Dockerfile文件的位置。

JAR打包微服务

微服务POM文件添加Maven打包插件:

<!-- 微服务项目只需要在父POM添加以下插件即可,子工程均可使用。(添加完之后记得刷新) -->
<build>
    <finalName>${artifactId}</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <fork>true</fork><!-- 如果没有该配置, devtools不会生效 -->
                <addResources>true</addResources>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

# 终端进入微服务根目录,执行打包命令:
mvn clean package -D maven.test.skip=true

# 上传微服务Jar包到Linux

Dockerfile脚本文件

编写Dockerfile文件, 放在和Jar包同一级目录下。

FROM openjdk:8-jdk-alpine
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
EXPOSE 7001
ENTRYPOINT ["java","-jar","/app.jar"]

构建微服务镜像

来到Dockerfile所在目录,执行以下命令:

docker build --build-arg JAR_FILE=cloud-eureka-server-7001.jar -t eureka7001:v2 .
  • --build-arg:用于给参数赋值;
  • JAR_FILE:参数名;
  • -t:镜像名;
  • .:表示去哪里获取Dockerfile文件。

一切顺利的话将看到终端打印输出:

[root@dj-virtual-machine docker]# docker build --build-arg JAR_FILE=cloud-eureka-server-7001.jar -t eureka7001:v1 .
Sending build context to Docker daemon  51.12MB
Step 1/5 : FROM openjdk:8-jdk-alpine
 ---> a3562aa0b991
Step 2/5 : ARG JAR_FILE
 ---> Using cache
 ---> 813362ca3f44
Step 3/5 : COPY ${JAR_FILE} app.jar
 ---> cc56edd858ec
Step 4/5 : EXPOSE 7001
 ---> Running in d792548cebc7
Removing intermediate container d792548cebc7
 ---> 3cc3a443c23a
Step 5/5 : ENTRYPOINT ["java","-jar","app.jar"]
 ---> Running in cafd1279f3b7
Removing intermediate container cafd1279f3b7
 ---> 1ba74a977b41
Successfully built 1ba74a977b41
Successfully tagged eureka7001:v1
[root@dj-virtual-machine docker]#

检验镜像是否构建完成:

[root@dj-virtual-machine docker]# docker images
REPOSITORY                      TAG                             IMAGE ID       CREATED          SIZE
eureka7001                      v1                              1ba74a977b41   12 minutes ago   156MB

检验镜像的可用性:

[root@dj-virtual-machine docker]# docker run -dit --name eureka -p 7001:7001 eureka7001:v1
7818d6bc569c07a41c463da9c13d6b4b55da0083d67e5fbd16b06435183b6027
  • -d:后台运行容器,并返回容器ID;
  • -i:以交互模式运行容器,通常与 -t 同时使用;
  • -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;
  • --name:为容器指定一个名称;
  • -p:随机端口映射,容器内部端口 随机 映射到主机的端口。
[root@dj-virtual-machine docker]# docker ps
CONTAINER ID   IMAGE                                COMMAND                  CREATED              STATUS                             PORTS                                       NAMES
7818d6bc569c   eureka7001:v1                        "java -jar app.jar"      About a minute ago   Up About a minute                  0.0.0.0:7001->7001/tcp, :::7001->7001/tcp   eureka

# 查看容器日志
[root@dj-virtual-machine docker]# docker logs -f 7818d6bc569c

外部访问微服务

windows下浏览器访问:http://centos7:7001/ 或者 http://192.168.8.150:7001/

可看见微服务启动成功

image-20210616105731982

免责声明:文章转载自《使用Dockerfile制作微服务镜像》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇十天学会单片机Day1点亮数码管(数码管、外部中断、定时器中断)「golang」panic: commands out of sync. Did you run multiple statements at once下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

在docker中安装宝塔

docker安装宝塔 docker rm -f baota76 mkdir -p /home/baota76/bt.cn/backup mkdir -p /home/baota76/bt.cn/server/cron mkdir -p /home/baota76/bt.cn/server/data mkdir -p /home/baota76/bt.cn...

Kubernetes2-K8s的集群部署

一、简介   1、架构参考               Kubernetes1-K8s的简单介绍    2、实例架构     192.168.216.51 master  etcd     192.168.216.53 node1     192.168.216.54 node1   3、拓扑   4、软件版本 [root@master ~]# cat...

053、overlay是如何隔离的?(2019-03-20周三)

参考https://www.cnblogs.com/CloudMan6/p/7341487.html   不同的overlay网络是相互隔离的,我们创建第二个overlay网络 ov_net2 并运行容器bbox3.   root@host1:~# docker network create -d overlay ov_net1 25bfa583a0...

Docker 部署Confluence15.2

一、数据库准备 数据库版本:5.7 这里数据库并没有采用docker镜像方式,而是选择已有数据库。至于数据库安装这里不再说明。 注:我这里安装confluence时,需要在下面配置数据库信息时,在数据库地址链接后面加上?sessionVariables=tx_isolation='READ-COMMITTED',否则会报错 1) 创建数据库并授权 cre...

kubernetes集群部署

鉴于Docker如此火爆,Google推出kubernetes管理docker集群,不少人估计会进行尝试。kubernetes得到了很多大公司的支持,kubernetes集群部署工具也集成了gce,coreos,aws等iaas平台,部署起来也相当的方便。鉴于网上众多资料基于的是不少老版本,本篇文章针对最新的kubernetes及其依赖组件的部署简要阐述...

Docker容器和K8s添加Health Check

docker容器启动后,怎么确认容器运行正常,怎么确认可以对外提供服务了,这就需要health check功能了。 之前对health check的功能不在意,因为只要镜像跑起来了就是健康的,如果有问题就会运行失败。在连续两次收到两个启动失败的issue之后,我决定修正一下。 遇到的问题是,一个web服务依赖mongo容器启动,通过docker-compo...