文章目录
问题现象
- 书接上回,上周处理了一个docker问题,写了篇博客:自定义docker镜像,ubuntu安装命令并导出
- 我们使用谷歌的
jib
插件打包,详情可以参考这篇文章:Spring Boot:使用maven的jib插件打docker使用所需的镜像包 - 我们打包导出的
docker
镜像,无法使用ping
命令,报错,找不到这个命令bash: ping:command not found
- 我们使用的是极简镜像
eclipse-temurin:11-jre-focal
,这个版本里的ubuntu
没有安装不需要的命令 - 当时使用的
eclipse-temurin:11-jre-focal
镜像,使用docker-compose.yml
创建容器启动失败
Starting jre-focal ... doneAttaching to jre-focaljre-focal exited with code 0
jre-focal:image: eclipse-temurin-cy:11-jre-focalcontainer_name: jre-focal
docekr ps -a
看到服务状态STATUS
为Exited (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
发布使用
- 容器修改完成后,就可以使用
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>