学习如何本地制作镜像推送到远程仓库管理,希望可以帮到有需要的人
准备工作:
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,最后输入上传密码就可以了
完成。文章来源:https://www.toymoban.com/news/detail-803350.html
有条件的可以把这一套配置到Jenkins实现的自动化,我是个人使用,服务器的配置也不够再搭建一个Jenkins了,所以就在本地完成镜像制作和推送。文章来源地址https://www.toymoban.com/news/detail-803350.html
到了这里,关于IDEA制作docker镜像推送到docker hub和阿里云镜像仓库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!