赞
踩
学习如何本地制作镜像推送到远程仓库管理,希望可以帮到有需要的人
准备工作:
1.注册docker hub账号,下载Docker Desktop Windows版本
2.注册阿里云账号,开通容器镜像服务个人版
Docker Desktop的安装教程网上有很多,这里不做教程,这里提醒一点避免安装的时候遇到坑,Docker Desktop安装时会默认勾选使用wsl2,如果你是win11安装可以勾选上,win11对这个的支持很友好,只需要一行代码就可以完成安装,但是如果你是win10,建议把这个取消掉,因为我笔记本是win11勾上后安装后能正常使用,但是我家里的台式就不行,自己安装上的wsl始终和Docker Desktop有冲突,本身我也只是用来管理镜像,用不上wsl,所以win10我就把这个安装项取消掉了。
这里可以去做一些配置,可以做一些加速,我没有配置,可以正常上传,有需要的另行查看文章

我用的23最新版idea是自带docker插件的,老版本的可能需要自己去插件市场装docker插件
docker desktop正常开启的话,在idea配置的docker里可以直接连接上,看到最下方success就是可以了

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


打包后在target下看到jar包,顺便检查下有没有排除配置文件,这里可以看到只有一个主配置在,具体的环境配置信息application-admin-prod.yml是排除了的
在项目根目录编写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可以看自己的镜像

没有仓库的先创建一个库,个人版只有一个私人库,所以还是用公共库吧,所以制作的镜像一定要排除敏感信息。
在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了,所以就在本地完成镜像制作和推送。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。