栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java应用打包成Docker镜像

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java应用打包成Docker镜像

使用docker load

将可运行的jar与dockerfile放在同一个目录,例如:

dockerfile内容如下:

## 使用最精简的jdk版本
FROM java:8-alpine

## 设置时区
RUN apk add -U tzdata
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

## 设置输出格式
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8

## 设置作者
##指定镜像作者信息,即镜像的Author属性
MAINTAINER saleson

## 添加jar 第一个参数是源jar, 第二个参数输出jar
## ADD的用法是:ADD 宿主机文件的全路径 docker容器下的文件夹路径
ADD istio-springboot-demo-a-1.0-SNAPSHOT.jar demo-a-app.jar

## 通知 Docker 容器在运行时监听指定的网络端口.EXPOSE  
##暴露的端口更像是指明了该容器提供的服务需要用到的端口.
##EXPOSE 并不会直接将端口自动和宿主机某个端口建立映射关系
## 如果 docker run,指定了自动映射 -P,那么会将所有暴露的端口随机映射到宿主机的高阶端口
EXPOSE 8080

## 指定镜像的默认入口命令,该入口命令会在启动容器时作为根命令执行
ENTRYPOINT exec java -Xmx32m -Xms32m -Xmn32m -Xss256k -jar demo-a-app.jar 

执行docker build命令打包镜像

% docker build -f dockerfile -t istio-springboot-demo-a:latest .
[+] Building 2.6s (9/9) FINISHED
 => [internal] load build definition from dockerfile                                                                                                                            0.0s
 => => transferring dockerfile: 1.22kB                                                                                                                                          0.0s
 => [internal] load .dockerignore                                                                                                                                               0.0s
 => => transferring context: 2B                                                                                                                                                 0.0s
 => [internal] load metadata for docker.io/library/java:8-alpine                                                                                                                2.4s
 => [1/4] FROM docker.io/library/java:8-alpine@sha256:d49bf8c44670834d3dade17f8b84d709e7db47f1887f671a0e098bafa9bae49f                                                          0.0s
 => [internal] load build context                                                                                                                                               0.0s
 => => transferring context: 64B                                                                                                                                                0.0s
 => CACHED [2/4] RUN apk add -U tzdata                                                                                                                                          0.0s
 => CACHED [3/4] RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime                                                                                                        0.0s
 => CACHED [4/4] ADD istio-springboot-demo-a-1.0-SNAPSHOT.jar demo-a-app.jar                                                                                                    0.0s
 => exporting to image                                                                                                                                                          0.0s
 => => exporting layers                                                                                                                                                         0.0s
 => => writing image sha256:5c794ac6ebad9b3b5e581ca642589ad3aa9ff96bf3e53883e31168e39ff52bd0                                                                                    0.0s
 => => naming to docker.io/library/istio-sb-demo-a                                                                                                                              0.0s

Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them

% docker images
REPOSITORY                                                TAG                                                                          IMAGE ID       CREATED          SIZE
istio-sb-demo-a                                           latest                                                                       5c794ac6ebad   2 minutes ago   166MB
maven 打包docker镜像

如果有parent, 且要打包的是sub module,需要先在parent的pom.xml添加plugin:


    
        
            
                com.spotify
                docker-maven-plugin
                1.2.2
            
        
    

不然会运行 mvn clean package docker:build 会maven 会提示 No plugin found for prefix ‘docker’ in the current project
如下:

[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.948 s
[INFO] Finished at: 2022-07-21T17:24:01+08:00
[INFO] Final Memory: 13M/54M
[INFO] ------------------------------------------------------------------------
[ERROR] No plugin found for prefix 'docker' in the current project and in the plugin groups [org.apache.maven.plugins, org.codehaus.mojo] available from the repositories [local (/Users/saleson/.m2/repository), nexus-aliyun (http://maven.aliyun.com/nexus/content/groups/public)] -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/NoPluginFoundForPrefixException

在sub module的pom.xml中添加docker-maven-plugin

    
    	
    		spring-boot:run
        	
        		// spring-boot-maven-plugin
        	
            
            
                com.spotify
                docker-maven-plugin
                
                    ${project.artifactId}:latest
                    
                    ${project.basedir}/docker
                    
                        
                            /
                            ${project.build.directory}
                            ${project.build.finalName}.jar
                        
                    
                
            
        
    

在sub module 下新增dockerfile, 路径: docker/Dockerfile

Dockerfile 内容如下:

FROM java:8-alpine
## 设置时区
RUN apk add -U tzdata
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
## 设置输出格式
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8

MAINTAINER saleson
ADD istio-springboot-demo-a-1.0-SNAPSHOT.jar demo-a-app.jar
EXPOSE 8080
ENTRYPOINT exec java -Xmx32m -Xms32m -Xmn32m -Xss256k -jar demo-a-app.jar --spring.profiles.active=dev

运行mvn 命令执行打包:

mvn clean package docker:build -DskipTests

查看打包后的镜像

% docker images
REPOSITORY                                                TAG                                                                          IMAGE ID       CREATED         SIZE
istio-springboot-demo-a                                   latest                                                                       22f5d43a2563   6 seconds ago   166MB
运行docker 镜像

使用docker run 命令运行镜像,如下:

% docker run -d -p 8080:8080 --name istio-springboot-demo-a istio-springboot-demo-a:latest
1855aa699105703ad83e2f7332a4c6fe2f1a0e1fd51ebe4017e7cc2058cf773e

查看pod运行情况:

% docker ps -a
CONTAINER ID   IMAGE                            COMMAND                  CREATED          STATUS          PORTS                    NAMES
8bec7d566384   istio-springboot-demo-a:latest   "/bin/sh -c 'exec ja…"   5 seconds ago    Up 3 seconds    0.0.0.0:8080->8080/tcp   istio-springboot-demo-a
参考

dockerfile ENTRYPOINT

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1024977.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号