java项目使用docker运行并集成arthas

19 篇文章 1 订阅
15 篇文章 0 订阅

maven 打包配置

本文是项目 spring-boot 项目. 使用 spring-start 生成的事例项目

修改 maven 中的 build 节点, 增加 antrun 插件, 如下:

<build>
     <finalName>${project.artifactId}</finalName>
     <plugins>
         <plugin>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-maven-plugin</artifactId>
         </plugin>
         <!-- 解压fat jar到target/${project-name}目录 -->
         <plugin>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-antrun-plugin</artifactId>
             <version>1.8</version>
             <executions>
                 <execution>
                     <phase>package</phase>
                     <goals>
                         <goal>run</goal>
                     </goals>
                     <configuration>
                         <tasks>
                             <unzip
                                     src="${project.build.directory}/${project.build.finalName}.${project.packaging}"
                                     dest="${project.build.directory}/${project.artifactId}"/>
                             <zip destfile="${project.build.directory}/${project.artifactId}.zip">
                                 <fileset dir="${project.build.directory}/${project.artifactId}"/>
                             </zip>
                             <tar compression="gzip" destfile="${project.build.directory}/${project.artifactId}.tgz">
                                 <fileset dir="${project.build.directory}/${project.artifactId}"/>
                             </tar>
                         </tasks>
                     </configuration>
                 </execution>
             </executions>
         </plugin>
     </plugins>
 </build>

  • 注:
  1. unzip 主要是把打包的 fat jar 解压到 target/${project.build.finalName} 目录下
  2. zip 将第一步解压出来的再重新打包成 zip 压缩文件
  3. tar将第一步解压出来的重新打包成 tgz 压缩文件

如果Dockerfile 文件使用的 COPY 文件把文件加入到 Docker中, 所以用不到2,3步骤.仅需要第1步.

编写 Dockerfile 文件内容

FROM openjdk:8-jdk-alpine

ARG MIRROR=true
ARG APP=项目名称
ARG APP_PATH=target/${APP}

ENV MAVEN_HOST=https://repo1.maven.org/maven2 \
    ALPINE_HOST=dl-cdn.alpinelinux.org \
    MIRROR_MAVEN_HOST=https://maven.aliyun.com/repository/public \
    MIRROR_ALPINE_HOST=mirrors.aliyun.com

# if use mirror change to aliyun mirror site
RUN if $MIRROR; then MAVEN_HOST=${MIRROR_MAVEN_HOST} ;ALPINE_HOST=${MIRROR_ALPINE_HOST} ; sed -i "s/dl-cdn.alpinelinux.org/${ALPINE_HOST}/g" /etc/apk/repositories ; fi && \
    # https://github.com/docker-library/openjdk/issues/76
    apk add --no-cache tini && \
    apk add --no-cache busybox-extras && \
    apk add --no-cache curl && \
    apk add --no-cache bash && \
    apk add --no-cache jq && \
    wget "https://arthas.aliyun.com/arthas-boot.jar" -qO /opt/arthas-boot.jar && \
    echo "java -jar /opt/arthas-boot.jar --repo-mirror aliyun" > /usr/local/bin/arthas && \
    chmod a+x /usr/local/bin/arthas

COPY ${APP_PATH} /app/${APP}

WORKDIR /app/${APP}

ENTRYPOINT ["/sbin/tini", "--", "java","org.springframework.boot.loader.JarLauncher"]
  • 说明:
  1. jq 是 json 格式化工具
  2. 下载 arthas-boot.jar 到指定目录中, 并生成 启动脚本到 bin目录下
  3. /sbin/tini -- 主要是不让 java 使用进程pid=1. 要不然就没办法使用了. 详见, 原理是一样的.

创建镜像

docker build -t aaa .

运行

交互方式运行

docker run -it --rm --name test aaa /bin/sh

后台方式运行

docker run -d --name test aaa /bin/sh

测试 arthas

在这里插入图片描述
运行成功, 可以愉快的玩arthas了.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用 Docker运行 Java 项目,下面是一个简单的步骤: 1. 首先,确保您已经安装了 Docker。您可以在 Docker 官方网站上找到适用于您操作系统的安装指南。 2. 在您的 Java 项目根目录中,创建一个 Dockerfile 文件。Dockerfile 是一个文本文件,用于定义 Docker 镜像的构建过程。 3. 在 Dockerfile 中,您可以指定一个基础镜像,例如 `openjdk:8-jdk-alpine`。它包含了 Java 运行时环境。 4. 将您的 Java 项目复制到容器中的适当位置。可以使用 `COPY` 指令将项目文件复制到容器中。 5. 使用 `WORKDIR` 指令设置容器的工作目录,然后使用 `RUN` 指令在容器中执行构建和依赖项安装命令。 6. 使用 `CMD` 或 `ENTRYPOINT` 指令来指定容器启动时要执行的命令。例如,如果您的项目是一个可执行的 JAR 文件,可以使用 `java -jar your-project.jar` 命令来运行它。 7. 保存并关闭 Dockerfile。 8. 打开终端,并进入包含 Dockerfile 的目录。 9. 使用以下命令构建 Docker 镜像: ``` docker build -t your-image-name . ``` 10. 等待镜像构建完成后,使用以下命令运行容器: ``` docker run -it --rm your-image-name ``` 其中,`your-image-name` 是您给镜像起的名字。 11. 您的 Java 项目应该在容器中成功运行了。 请注意,上述步骤只是一个基本的示例,实际情况可能会因项目结构和依赖项而有所不同。您可能需要根据您的项目需求进行适当的调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值