IDEA制作docker镜像推送到docker hub和阿里云镜像仓库

学习如何本地制作镜像推送到远程仓库管理,希望可以帮到有需要的人


准备工作:

        1.注册docker hub账号,下载Docker Desktop Windows版本

        2.注册阿里云账号,开通容器镜像服务个人版

注意事项

Docker Desktop的安装教程网上有很多,这里不做教程,这里提醒一点避免安装的时候遇到坑,Docker Desktop安装时会默认勾选使用wsl2,如果你是win11安装可以勾选上,win11对这个的支持很友好,只需要一行代码就可以完成安装,但是如果你是win10,建议把这个取消掉,因为我笔记本是win11勾上后安装后能正常使用,但是我家里的台式就不行,自己安装上的wsl始终和Docker Desktop有冲突,本身我也只是用来管理镜像,用不上wsl,所以win10我就把这个安装项取消掉了。


登录Docker Desktop

这里可以去做一些配置,可以做一些加速,我没有配置,可以正常上传,有需要的另行查看文章

IDEA使用docker插件

我用的23最新版idea是自带docker插件的,老版本的可能需要自己去插件市场装docker插件

docker desktop正常开启的话,在idea配置的docker里可以直接连接上,看到最下方success就是可以了

IDEA使用Maven打包

我以spring boot项目演示,需要注意的是使用maven打包的时候注意排除掉配置文件,镜像内不要有敏感信息,配置都用外部挂载的方式

打包后在target下看到jar包,顺便检查下有没有排除配置文件,这里可以看到只有一个主配置在,具体的环境配置信息application-admin-prod.yml是排除了的

IDEA制作镜像

在项目根目录编写Dockerfile,不懂的可以简单学一下,知道基础的编写规则就可以

贴一份具体内容

# 使用官方的 OpenJDK 8 镜像作为基础镜像
FROM openjdk:8-jdk


ENV LANG=C.UTF-8
ENV LC_ALL=C.UTF-8

# 设置工作目录
WORKDIR /app


# 复制构建好的 JAR 文件到工作目录
COPY target/*.jar /app/app.jar

# 安装vim
RUN apt-get update && apt-get install -y vim

# 暴露应用程序的端口
EXPOSE 8080

# 添加作者信息
LABEL maintainer="docker"

# 定义启动命令
CMD ["java", "-jar", "app.jar"]

这里有个坑需要主要,如果打完镜像运行报错:java.io.IOException: Problem reading font data这个问题说明你程序里用到读取字体的功能,一般就是图形验证码功能,网上的Dockerfile一般是写的FROM openjdk:8-jdk-alpine,这是比较轻量级的,直接使用openjdk:8-jdk可解决问题。

接着把Dockerfile和docker关联上,选择Edit Config....

镜像名和容器名看着填写,选择apply,然后在这里点Run也可以,在外面点运行也可以

运行后在Services能够看到控制台信息

镜像制作完成后会直接在容器里运行,可以顺便看看有没有问题,因为没有配置文件所以报错redis连接不上,镜像没有问题

接着打开Docker Desktop可以看自己的镜像

上传镜像到Docker hub

没有仓库的先创建一个库,个人版只有一个私人库,所以还是用公共库吧,所以制作的镜像一定要排除敏感信息。

在idea修改镜像名字,格式是你的docker hub账号+仓库名

复制上面马赛克的一段在idea里填写到第三步,最后的latest版本号看个人改不改

这里可以配置推送镜像的地址,但是我没配置连接所以就没有从这里推送,应该说配置了但是连不上,就到Docker Desktop去推送了,会看到一个新的名字的镜像,点击推送

然后就可以,去你远程仓库看看,这一步就完成了。

上传镜像到阿里云镜像仓库

前面创建好阿里云账号并且开通容器服务个人版(免费),创建好自己的仓库名字

点进去后下面是有操作指南的,都是命令也很简单,这里提供一个bat脚本,直接执行就可以

@echo off
setlocal enabledelayedexpansion

REM 查看镜像ID
docker images

set ALIYUN_USERNAME=你的阿里云账号
set ALIYUN_REGISTRY=registry.cn-hangzhou.aliyuncs.com(这里改成自己的仓库地域)
set NAMESPACE=你的命名空间

REM 预定义的镜像仓库名称列表
set IMAGE_NAMES=kingenjoy_admin-web kingenjoy_admin-api kingenjoy_front-api

REM 提示用户选择一个镜像名称
echo "请选择一个镜像名称:"
set INDEX=1
for %%i in (%IMAGE_NAMES%) do (
    echo !INDEX!. %%i
    set /a INDEX+=1
)

REM 提示用户输入选择的数字
set /p INDEX="选择: "

REM 根据用户选择获取相应的镜像名称
set IMAGE_NAME=
set INDEX_COUNTER=1
for %%i in (%IMAGE_NAMES%) do (
    if !INDEX_COUNTER! equ %INDEX% set IMAGE_NAME=%%i
    set /a INDEX_COUNTER+=1
)

REM 提示用户输入镜像ID
set /p IMAGE_ID="请输入镜像ID: "


REM 生成基于时间戳的镜像版本
for /f "delims=" %%a in ('wmic os get localdatetime ^| find "."') do set datetime=%%a
set IMAGE_VERSION=%datetime:~0,4%%datetime:~4,2%%datetime:~6,2%%datetime:~8,2%%datetime:~10,2%%datetime:~12,2%%datetime:~15,3%

REM 登录阿里云容器镜像服务
docker login --username=%ALIYUN_USERNAME% %ALIYUN_REGISTRY%

REM 打标签
docker tag %IMAGE_ID% %ALIYUN_REGISTRY%/%NAMESPACE%/%IMAGE_NAME%:%IMAGE_VERSION%

REM 推送镜像到阿里云容器镜像服务
docker push %ALIYUN_REGISTRY%/%NAMESPACE%/%IMAGE_NAME%:%IMAGE_VERSION%

echo "镜像上传完成。"
echo "IMAGE_VERSION: %IMAGE_VERSION%"

把前面几行换成自己的就可以,然后用终端打开运行脚本根据提示选择上传的仓库和输入镜像ID,最后输入上传密码就可以了

完成。

有条件的可以把这一套配置到Jenkins实现的自动化,我是个人使用,服务器的配置也不够再搭建一个Jenkins了,所以就在本地完成镜像制作和推送。

  • 23
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值