# get-base-image **Repository Path**: brianchou/get-base-image ## Basic Information - **Project Name**: get-base-image - **Description**: 在做实施项目时,快速导入基础镜像 - **Primary Language**: Shell - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-05-07 - **Last Updated**: 2025-05-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: shell, base-image ## README # 获取基础镜像 [toc] ## 说明 这些镜像除`nginx`外,其它都是构建docker镜像时`Dockerfile`里的基础镜像,通常在做项目实施时,需要导入相关镜像到对应的`Jenkins`服务器。一般只需要以下几种镜像,见脚本`base_image_list`。 ```shell nginx_1.28.0 nginx_stable-alpine node_14-alpine eclipse-temurin_21-jre-alpine dragonwell_21.0.5.0.5-bookworm python_3.11-slim-bullseye-nltk buildkit_buildx-stable-1 libreoffice-tesseract-ocr5-bookworm_temurin21-jre qdrant_v1.11.0 ``` 如果还需要其它基础镜像,则根据实际情况选择需要的镜像,将其维护到`get_base_images.sh`脚本中的`base_image_list`中。 ```shell nginx_1.26.3 node_18-alpine node_20-alpine eclipse-temurin_8u432-b06-jre eclipse-temurin_8u442-b06-jdk eclipse-temurin_21-jdk-alpine dragonwell_8.24.23-standard-ga-ubuntu libreoffice-tesseract-ocr5-bookworm_dragonwell11-slim ``` ## 获取镜像 > 脚本`get_base_images.sh`中`private_registry`字段对应的值是私有镜像仓库,根据实际情况修改,在实施项目中,一般为搭建的`Harbor`私库地址。格式为`DOCKER_REGISTRY/NAMESPACE`,如:`ccr.ccs.tencentyun.com/brian` 在`/root`目录下新建目录`get-image`,并上传脚本到此目录。 ```shell mkdir -p /root/get-image ``` 登录私有镜像仓库,将`mypasswd`, `myname`, `docker_registry` 改成实际的镜像仓库密码,账号,地址。 ```shell echo 'mypasswd'|docker login -u myname --password-stdin docker_registry ``` ### 服务器可访问外网 如果服务器可以访问外网,则执行以下命令获取镜像。 ```shell cd /root/get-image bash get_base_images.sh ``` 获取镜像又分为两种场景。 - 场景一:获取单一CPU架构的镜像,此场景获取的镜像取决于`Jenkins`服务器的CPU架构。根据提示输入`Y`或`y`即可。 - 场景二:获取`x86_64`和`aarch64`两种CPU架构的镜像,一般用于`x86_64`和`aarch64`两种架构的服务器都在使用的场景。只需要一台`Jenkins`服务器就可满足构建两种CPU架构的需求。根据提示输入`N`或`n` 即可。 ### 服务器不可访问外网 #### 场景一 获取单一CPU架构的镜像,从实际需求出发,在浏览器上访问`image_list.txt`中的相关地址来获取镜像,并上传到`/root/get-image` ,如下图所示。 ![CleanShot 2025-05-07 at 13.09.54](README.assets/CleanShot2025-05-07-130954-6599692.png) 执行以下命令导入镜像。 ```shell cd /root/get-image bash get_base_images.sh ``` 此时只能输入`Y`或`y`。 #### 场景二 获取`x86_64`和`aarch64`两种CPU架构的镜像,一般用于`x86_64`和`aarch64`两种架构的服务器都在使用的场景。只需要一台`Jenkins`服务器就可满足构建两种CPU架构的需求。 执行以下命令创建两个目录,其中`amd64`表示`x86_64`,`arm64`表示`aarch64`。 ```shell mkdir -p /root/get-image/{amd64,arm64} ``` 如下图所示。 ![CleanShot 2025-05-07 at 13.10.45](README.assets/CleanShot2025-05-07-131045.png) 从实际需求出发,在浏览器上访问`image_list.txt`中的相关地址来获取镜像,并分别上传到服务器的`amd64`和`arm64`中去。**需要注意的是两个目录里的离线镜像包数量和名称都要一致** `aarch64`架构的镜像放在`arm64`目录,如图。 ![CleanShot 2025-05-07 at 13.11.27](README.assets/CleanShot2025-05-07-131127-6600527.png) `x86_64`架构的镜像放到`amd64`目录,如图。 ![CleanShot 2025-05-07 at 13.11.06](README.assets/CleanShot2025-05-07-131106-6600453.png) 执行以下命令导入镜像,根据提示输入`N`或`n` 。 ```shell cd /root/get-image bash get_base_images.sh ``` ### 查看私有镜像仓库 在私有镜像仓库中查看镜像是否正常。 ![CleanShot 2025-05-07 at 13.17.07](README.assets/CleanShot2025-05-07-131707-6601155.png) 以`qdrant`为例,可以看到以下场景,在实际使用过程中,服务器上用`docker_registry/namespace/qdrant:v1.11.0` 即可获取到对应架构的镜像。 ![CleanShot 2025-05-07 at 13.22.53](README.assets/CleanShot2025-05-07-132253.png) ## 使用 如果是场景二,那么需要修改`Dockerfile`。 - 若是二开项目,则将`Dockerfile`中`FROM`字段后的镜像修改为私有镜像。 - 若是产品项目,则在`Jenkinsfile`里构建镜像前增加一句, `private_registy`修改为实际私有镜像。 ```groovy sh "sed -i 's;FROM.*;FROM private_registy;g' Dockerfile" ```