自制Java镜像发布到dockerhub公网使用

文章讲述了作者在使用SpringBoot和Jib插件打包的Docker镜像中遇到的ping命令缺失问题,通过`dockerrun-it`交互模式安装了命令,并详细介绍了如何制作镜像、安装软件以及将镜像发布到Dockerhub的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题现象

Starting jre-focal ... done
Attaching to jre-focal
jre-focal exited with code 0
  • docker-compose配置为:
  jre-focal:
    image: eclipse-temurin-cy:11-jre-focal
    container_name: jre-focal
  • docekr ps -a看到服务状态STATUSExited (0)。因为只是创建了容器,不在运行状态

解决

制作Java镜像

  • 没法使用docker-compose启动,可以使用原始docker命令docker run以交互方式启动镜像
  • 命令为:docker run -it eclipse-temurin:11-jre-focal /bin/bash,启动成功,可以在容器中安装软件了。-it表示交互方式,/bin/bash为指定启动的终端
  • 此时可以更新并安装命令 apt-get update -y && apt-get -y install iputils-ping

在这里插入图片描述

  • 安装命令之后,就可以使用ping命令了

发布使用

  • 容器修改完成后,就可以使用docker commit导出为镜像了
  • 我们可以发布到本地docker里面,也可以发布到公网
  • 考虑到我们是使用Jib插件打包的,于是推送到docker hub
  • 首先需要在里面注册一个账号,然后新建一个repository
    在这里插入图片描述
  • 然后使用 docker login -u 用户名,输入密码,登录
    在这里插入图片描述
  • 最后使用docker commit ID名 用户名/仓库名推送到docker hub
    在这里插入图片描述
  • 这个时候就可以在docker hub官网看到,也可以直接使用了
    在这里插入图片描述
  • 在代码里直接引用名称即可,节选的jib打包配置如下:
				<jib-maven-plugin.image>1363241277/jre11:11-jre-focal</jib-maven-plugin.image>

				<plugin>
                    <groupId>com.google.cloud.tools</groupId>
                    <artifactId>jib-maven-plugin</artifactId>
                    <version>${jib-maven-plugin.version}</version>
                    <configuration>
                        <from>
                            <image>${jib-maven-plugin.image}</image>
                            <platforms>
                                <platform>
                                    <architecture>${jib-maven-plugin.architecture}</architecture>
                                    <os>linux</os>
                                </platform>
                            </platforms>
                        </from>
                        <to>
                            <image>unit:latest</image>
                        </to>
                        <container>
                            <entrypoint>
                                <shell>bash</shell>
                                <option>-c</option>
                                <arg>/entrypoint.sh</arg>
                            </entrypoint>
                            <ports>
                                <port>8181</port>
                                <port>5701/udp</port>
                            </ports>
                            <environment>
                                <SPRING_OUTPUT_ANSI_ENABLED>ALWAYS</SPRING_OUTPUT_ANSI_ENABLED>
                                <JHIPSTER_SLEEP>0</JHIPSTER_SLEEP>
                            </environment>
                            <creationTime>USE_CURRENT_TIMESTAMP</creationTime>
                            <user>1000</user>
                        </container>
                        <extraDirectories>
                            <paths>src/main/docker/jib</paths>
                            <permissions>
                                <permission>
                                    <file>/entrypoint.sh</file>
                                    <mode>755</mode>
                                </permission>
                            </permissions>
                        </extraDirectories>
                    </configuration>
                </plugin>
<think>我们被要求解释`FROMeclipse-temurin:17-jdk-alpine`的含义,并按照指定的格式回答。首先,我们需要详细解释这个Docker指令的每个部分,然后给出相关的Dockerfile编写建议或注意事项。最后,按照格式提出相关问题。</think>### `FROM eclipse-temurin:17-jdk-alpine` 详解 这是Dockerfile中用于指定基础镜像的指令,其含义如下: #### 1. 组成部分解析 | 部分 | 含义 | 说明 | |------|------|------| | `FROM` | 基础镜像指令 | 所有Dockerfile必须以此开头 | | `eclipse-temurin` | 镜像名称 | Eclipse Adoptium项目的官方OpenJDK发行版 | | `17` | Java版本 | Java 17 LTS(长期支持版本) | | `jdk` | 包类型 | 包含完整的JDK(开发工具包) | | `alpine` | 操作系统 | 基于Alpine Linux的轻量级发行版 | #### 2. 关键特性 ```mermaid graph LR A[基础镜像] --> B[超小体积] A --> C[完整JDK] A --> D[Java 17] B --> E[约150MB] C --> F[包含编译器调试器] D --> G[LTS支持到2029] ``` #### 3. 替代方案对比 ```bash # 体积对比(Java 17环境) docker images --format "{{.Repository}}:{{.Tag}}\t{{.Size}}" # 结果示例: eclipse-temurin:17-jdk-alpine 150MB eclipse-temurin:17-jdk 450MB openjdk:17 490MB amazoncorretto:17 390MB ``` #### 4. 何时使用其他变体 ```dockerfile # 开发/构建环境(需要编译器) FROM eclipse-temurin:17-jdk-alpine # ✅ 推荐 # 生产环境(只需运行JAR) FROM eclipse-temurin:17-jre-alpine # 体积更小(约100MB) # 需要额外工具(如bash) FROM eclipse-temurin:17-jdk # 基于Ubuntu(包含完整OS工具) # AWS环境 FROM amazoncorretto:17-alpine # Amazon官方镜像 ``` #### 5. 使用示例 ```dockerfile # 使用Alpine镜像构建Spring Boot应用 FROM eclipse-temurin:17-jdk-alpine AS builder WORKDIR /workspace COPY . . RUN ./gradlew bootJar # 最终运行镜像使用更小的JRE版本) FROM eclipse-temurin:17-jre-alpine COPY --from=builder /workspace/build/libs/*.jar app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "app.jar"] ``` #### 6. Alpine Linux注意事项 ```bash # Alpine使用musl libc而非glibc,可能导致某些库不兼容 # 解决方法:安装兼容包 RUN apk add --no-cache libstdc++ # 标准C++库 RUN apk add --no-cache gcompat # glibc兼容层 # 时区设置 RUN apk add --no-cache tzdata ENV TZ=Asia/Shanghai ``` #### 7. 镜像安全建议 ```dockerfile # 以非root用户运行(安全最佳实践) RUN addgroup -S appgroup && adduser -S appuser -G appgroup USER appuser # 定期更新基础镜像 # 使用docker scan扫描漏洞 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坚持是一种态度

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值