Amazon ECR 支持哪些版本的 Docker Image Manifest 规范?

博客介绍了Docker Image Manifest规范是Docker镜像基础元数据文件,运行时需按版本解析信息。指出若用Amazon ECR存储管理Docker镜像,需了解其支持的规范版本,目前支持V2和V1,V2又分两子版本,可通过API操作管理,上传时选合适标签即可。

  Amazon ECR 支持哪些版本的 Docker Image Manifest 规范?
  Docker Image Manifest 规范是 Docker 镜像中的基础元数据文件,它定义了镜像中各个层的信息和镜像的配置。有多个版本的 Docker Image Manifest 规范,每个版本都对应不同的 Docker 引擎版本。因此,Docker镜像运行时需要根据版本来解析镜像的配置和层信息。

 
  如果您正在考虑使用 Amazon Elastic Container Registry(Amazon ECR)来存储和管理您的 Docker 镜像,则需要了解 Amazon ECR 支持哪些版本的 Docker Image Manifest 规范。
  目前,Amazon ECR 支持 Docker 引擎的两个主要版本:Docker Image Manifest V2(schemaVersion 2)和 Docker Image Manifest V1(schemaVersion 1)。同时,Docker Image Manifest V2 又分为两个子版本,分别是manifest list和image manifest。这些都可以通过 Amazon ECR API 进行操作和管理。
  在 Amazon ECR 中,您可以上传任何符合这些 Docker Image Manifest 规范的镜像,并且可以对这些镜像进行存储、搜索、共享和安全管理,非常方便。
  总之,在使用 Amazon ECR 时,您无需过多关注 Docker Image Manifest 规范版本的问题,只需要在上传镜像时,注意选择合适的标签即可。

#!/usr/bin/env bash # # Copyright (c) 2023, TP-Link Corporation Limited. All rights reserved. # set -o errexit -o nounset -o pipefail DIR="$(cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd)" HAWKFIRE_CONFIG="${DIR}/.hawkfire.yaml" PROJECT_NAME=$(yq r "${HAWKFIRE_CONFIG}" metadata.name) MAVEN_PROJECT_VERSION="" MICROSERVICE_K8S_VALUES="" PROG="server.sh" USAGE=" Usage: ${PROG} <command> [action] ${PROG} build # build server ${PROG} docker # actions for docker ${PROG} helm-chart # actions for helm-chart ${PROG} deploy [environment] [region] [version_override] # deploy a microservice ${PROG} --help " DOCKER_USAGE=" Usage: ${PROG} docker make # initialize distribution and artifacts directory ${PROG} docker build [version_override] # build docker container ${PROG} docker release [version_override] # release the docker container to AWS ECR ${PROG} docker --help " HELM_CHART_USAGE=" Usage: ${PROG} helm-chart build [environment] [region] [version_override] # build and package helm chart with default values from specified environment and region ${PROG} helm-chart publish [version_override] # publish the current chart to prd-tplink-nbu chart repository ${PROG} helm-chart delete [version] # deletes the version of the chart from the repository ${PROG} helm-chart --help " function error { echo -e "$1" >&2 exit 1 } function usage-help { case $# in 0) error "${USAGE}";; 1) case $1 in docker) error "${DOCKER_USAGE}";; helm-chart) error "${HELM_CHART_USAGE}";; *) usage-help;; esac ;; esac } function get-three-digit-version-number { OLD_VERSION=$1 IFS_OLD=${IFS} IFS="." VERSION_ARR=(${OLD_VERSION}) IFS=${IFS_OLD} if [[ ${#VERSION_ARR[@]} -eq 3 ]]; then echo ${OLD_VERSION} return fi if [[ ${#VERSION_ARR[@]} -gt 4 ]]; then echo ${OLD_VERSION} return fi VERSION_FIRST=${VERSION_ARR[0]} VERSION_SECOND=${VERSION_ARR[1]} VERSION_THIRD=${VERSION_ARR[2]} VERSION_FOURTH_STR=${VERSION_ARR[3]} VERSION_FORTH_NUMBER_LENGTH=${#VERSION_FOURTH_STR} VERSION_FORTH_WORD="" if [ "$VERSION_FORTH_NUMBER_LENGTH" -gt 3 ];then VERSION_FOURTH="${VERSION_FOURTH_STR%-*}" VERSION_FORTH_WORD="-""${VERSION_FOURTH_STR#*-}" else VERSION_FOURTH=${VERSION_FOURTH_STR} fi VERSION_FORTH_NUMBER_LENGTH=${#VERSION_FOURTH} if [ "$VERSION_FORTH_NUMBER_LENGTH" -eq 1 ];then VERSION_FORTH_NUMBER_NEW="00""${VERSION_FOURTH%-*}" elif [ "$VERSION_FORTH_NUMBER_LENGTH" -eq 2 ];then VERSION_FORTH_NUMBER_NEW="0""${VERSION_FOURTH%-*}" else VERSION_FORTH_NUMBER_NEW="${VERSION_FOURTH%-*}" fi local NEW_VERSION="${VERSION_FIRST}"".""${VERSION_SECOND}"".""${VERSION_THIRD}""${VERSION_FORTH_NUMBER_NEW}""${VERSION_FORTH_WORD}" echo ${NEW_VERSION} } function get-maven-project-version { if [[ -z "${MAVEN_PROJECT_VERSION}" ]]; then MAVEN_PROJECT_VERSION=$(mvn -Psmb-nexus -Pcloud-based-build -q -Dexec.executable="echo" -Dexec.args='${project.version}' --non-recursive exec:exec) MAVEN_PROJECT_VERSION_NEW=$(get-three-digit-version-number ${MAVEN_PROJECT_VERSION}) echo "# Maven Project Version NEW: ${MAVEN_PROJECT_VERSION_NEW}" fi } function get-microservice-k8s-values { local K8S_VALUES_REPO=$(printenv SMB_K8S_VALUES_REPO) if [[ -z "${K8S_VALUES_REPO}" ]]; then error "Please configure the environment variable <SMB_K8S_VALUES_REPO>" fi MICROSERVICE_K8S_VALUES="${K8S_VALUES_REPO}/${PROJECT_NAME}" if [[ ! -d "${MICROSERVICE_K8S_VALUES}" ]]; then error "The K8S-Values of Microservice does not exist! <${MICROSERVICE_K8S_VALUES}>" fi } function server-build { echo "# Server Build" mvn -T 64 clean install -Pcloud-based-build -DskipTests=true -e get-maven-project-version docker-make } function docker { local module="docker" local IMAGE_NAME="smb/${PROJECT_NAME}" local DOCKER_REPO="746166756265.dkr.ecr.ap-southeast-1.amazonaws.com/${IMAGE_NAME}" local DOCKER_LOGIN=$(aws ecr get-login --no-include-email --region ap-southeast-1 --profile prd) case $# in 0) usage-help "${module}";; *) get-maven-project-version; case $1 in make) docker-make;; build) shift; docker-build "$@";; release) shift; docker-release "$@";; *) echo "Unknown arguments: $*"; usage-help "${module}";; esac ;; esac } function docker-dev-test { local module="docker" local IMAGE_NAME="smb/${PROJECT_NAME}" local DOCKER_REPO="242777933053.dkr.ecr.ap-southeast-1.amazonaws.com/${IMAGE_NAME}" local DOCKER_LOGIN=$(aws ecr get-login --no-include-email --region ap-southeast-1 --profile dev) local DOCKER_PRD_LOGIN=$(aws ecr get-login --no-include-email --registry-ids 746166756265 --region ap-southeast-1 --profile dev) eval "command ${DOCKER_PRD_LOGIN}" case $# in 0) usage-help "${module}";; *) get-maven-project-version; case $1 in make) docker-make;; build) shift; docker-build "$@";; release) shift; docker-release "$@";; *) echo "Unknown arguments: $*"; usage-help "${module}";; esac ;; esac } function docker-make { local ARTIFACTS_DIR="artifacts" local BUILD_DIR="dist" local PROJECT_VERSION="${MAVEN_PROJECT_VERSION}" echo "# Maven Project Version: ${PROJECT_VERSION}" echo "# Initializing distribution and artifacts directory..." if [[ -d "./${BUILD_DIR}" ]]; then rm -rf "./${BUILD_DIR}" fi if [[ -d "./${ARTIFACTS_DIR}" ]]; then rm -rf "./${ARTIFACTS_DIR}" fi mkdir -p "./${BUILD_DIR}" mkdir -p "./${ARTIFACTS_DIR}" local TARGET_DIR="${BUILD_DIR}" local TARGET_LIB_DIR="${TARGET_DIR}/lib" local DISTRIBUTION_NAME="${PROJECT_NAME}.zip" echo "# Creating distribution ..." if [[ -d "${TARGET_DIR}" ]]; then rm -rf "./${TARGET_DIR}" fi echo "# Copying libraries ..." mkdir -p "${TARGET_LIB_DIR}" cp "./target/${PROJECT_NAME}-${MAVEN_PROJECT_VERSION}.jar" "${TARGET_LIB_DIR}/server.jar" local RUNTIME_SCRIPTS_DIR="./src/main/container/deploy/scripts" if [[ -d "${RUNTIME_SCRIPTS_DIR}" ]]; then echo "# Configuring runtime scripts ..." cp -a "${RUNTIME_SCRIPTS_DIR}" "${TARGET_DIR}" chmod -R +x "./${TARGET_DIR}/scripts" fi echo "# Creating distribution archive" cd "./${BUILD_DIR}" zip -dgqr -X "../${ARTIFACTS_DIR}/${DISTRIBUTION_NAME}" * cd "${DIR}" echo "# Distribution created successfully: ${DISTRIBUTION_NAME}" export DISTRIBUTION_NAME } function docker-build { docker-make local IMAGE_NAME=${IMAGE_NAME} local DOCKER_REPO=${DOCKER_REPO} local DOCKER_LOGIN=${DOCKER_LOGIN} local VERSION_OVERRIDE=false local PROJECT_VERSION=${MAVEN_PROJECT_VERSION_NEW} if [[ "$#" -gt 0 ]] && [[ -n "$1" ]]; then PROJECT_VERSION=$(get-three-digit-version-number $1) VERSION_OVERRIDE=true fi local MULTI_PLATFORM="SINGLE" if [[ "$#" -gt 1 ]] && [[ -n "$2" ]]; then MULTI_PLATFORM=$2 fi echo "# Docker login" eval "command ${DOCKER_LOGIN}" if [[ "${MULTI_PLATFORM}" = "MULTI" ]]; then echo "多平台镜像构建..." # 多平台构建镜像 echo "${IMAGE_NAME}:${PROJECT_VERSION}" command docker buildx build -t="${IMAGE_NAME}:${PROJECT_VERSION}-amd64" -f Dockerfile --platform=linux/amd64 -o type=docker . command docker buildx build -t="${IMAGE_NAME}:${PROJECT_VERSION}-arm64" -f Dockerfile --platform=linux/arm64 -o type=docker . # 给镜像打标签 command docker tag "${IMAGE_NAME}:${PROJECT_VERSION}-amd64" "${DOCKER_REPO}:${PROJECT_VERSION}-amd64" command docker tag "${IMAGE_NAME}:${PROJECT_VERSION}-arm64" "${DOCKER_REPO}:${PROJECT_VERSION}-arm64" else # 单平台构建镜像 echo "${IMAGE_NAME}:${PROJECT_VERSION}" command docker build -t="${IMAGE_NAME}:${PROJECT_VERSION}" . # 给镜像打标签 command docker tag "${IMAGE_NAME}:${PROJECT_VERSION}" "${DOCKER_REPO}:${PROJECT_VERSION}" if [[ "${VERSION_OVERRIDE}" = false ]]; then command docker tag "${IMAGE_NAME}:${PROJECT_VERSION}" "${DOCKER_REPO}:latest" fi fi echo "# Docker Built, Repo: ${DOCKER_REPO}, Version: ${PROJECT_VERSION}" } function docker-release { local DOCKER_REPO=${DOCKER_REPO} local VERSION_OVERRIDE=false local PROJECT_VERSION=${MAVEN_PROJECT_VERSION_NEW} if [[ "$#" -gt 0 ]] && [[ -n "$1" ]]; then PROJECT_VERSION=$(get-three-digit-version-number $1) VERSION_OVERRIDE=true fi local MULTI_PLATFORM="SINGLE" if [[ "$#" -gt 1 ]] && [[ -n "$2" ]]; then MULTI_PLATFORM=$2 fi local LOCAL_IMAGE_EXISTS=$(command docker images | grep "${DOCKER_REPO}.*${PROJECT_VERSION}") if [[ -z "${LOCAL_IMAGE_EXISTS}" ]]; then error "Docker image is not available locally. You may want to build it using > ${PROG} docker build [version_override]" fi if [[ "${MULTI_PLATFORM}" = "MULTI" ]]; then echo "多平台镜像推送..." command docker push "${DOCKER_REPO}:${PROJECT_VERSION}-amd64" command docker push "${DOCKER_REPO}:${PROJECT_VERSION}-arm64" command docker manifest create "${DOCKER_REPO}:${PROJECT_VERSION}" "${DOCKER_REPO}:${PROJECT_VERSION}-amd64" "${DOCKER_REPO}:${PROJECT_VERSION}-arm64" command docker manifest inspect "${DOCKER_REPO}:${PROJECT_VERSION}" command docker manifest push "${DOCKER_REPO}:${PROJECT_VERSION}" else command docker push "${DOCKER_REPO}:${PROJECT_VERSION}" if [[ "${VERSION_OVERRIDE}" = false ]]; then command docker push "${DOCKER_REPO}:latest" fi fi echo "# Docker Released, Repo: ${DOCKER_REPO}, Version: ${PROJECT_VERSION}" } function helm-chart { local module="helm-chart" local AWS_DEFAULT_REGION="ap-southeast-1" local AWS_PROFILE="prd" local CHART_ARCHIVE_DIR="${DIR}/artifacts/helm" local CHART_BUILD_DIR="${DIR}/dist/helm" local CHART_OUTPUT_DIR="${DIR}/dist/generate" case $# in 0) usage-help "${module}";; *) get-maven-project-version; case $1 in build) shift; helm-chart-build "$@";; publish) shift; helm-chart-publish "$@";; delete) shift; helm-chart-delete "$@";; *) echo "Unknown arguments: $*"; usage-help "${module}";; esac ;; esac } function helm-chart-build { local module="${module}" local ENVIRONMENT="local" local REGION="master" local PROJECT_VERSION="${MAVEN_PROJECT_VERSION_NEW}" case $# in 0) ;; 1) PROJECT_VERSION="$1";; 2) ENVIRONMENT="$1"; REGION="$2";; 3) ENVIRONMENT="$1"; REGION="$2"; PROJECT_VERSION="$3";; *) usage-help "${module}";; esac case ${ENVIRONMENT} in local|dev|dev2|pet|uat|uat2|staging|prd) ;; *) error "Unrecognized Environment: ${ENVIRONMENT}"; usage-help "${module}";; esac case ${REGION} in master|us-east-1|eu-west-1|ap-southeast-1) ;; *) error "Unrecognized Region: ${REGION}"; usage-help "${module}";; esac echo "# Environment: ${ENVIRONMENT}, Region: ${REGION}, Version: ${PROJECT_VERSION}" local CHART_ARCHIVE_DIR=${CHART_ARCHIVE_DIR} local CHART_BUILD_DIR=${CHART_BUILD_DIR} local CHART_OUTPUT_DIR=${CHART_OUTPUT_DIR} get-microservice-k8s-values local MICROSERVICE_K8S_VALUES=${MICROSERVICE_K8S_VALUES} echo "# Initializing Helm-Chart distribution and artifacts directory..." if [[ -d "${CHART_ARCHIVE_DIR}" ]]; then rm -rf "${CHART_ARCHIVE_DIR}" fi if [[ -d "${CHART_OUTPUT_DIR}" ]]; then rm -rf "${CHART_OUTPUT_DIR}" fi if [[ -d "${CHART_BUILD_DIR}" ]]; then rm -rf "${CHART_BUILD_DIR}" fi mkdir -p "${CHART_ARCHIVE_DIR}" mkdir -p "${CHART_BUILD_DIR}" mkdir -p "${CHART_OUTPUT_DIR}" echo "# Updating Helm-Chart Version to ${PROJECT_VERSION}" cp -a "${DIR}/helm/." "${CHART_BUILD_DIR}" sed -i "s/\${version}/${PROJECT_VERSION}/g" "${CHART_BUILD_DIR}/${PROJECT_NAME}/values.yaml" sed -i "s/\${version}/${PROJECT_VERSION}/g" "${CHART_BUILD_DIR}/${PROJECT_NAME}/Chart.yaml" if [[ -d "${MICROSERVICE_K8S_VALUES}" ]]; then echo "# Rendering ${ENVIRONMENT} configs to values.yaml..." RENDER_FILE_ARG="" if [[ -d "${MICROSERVICE_K8S_VALUES}/global" ]]; then RENDER_FILE_ARG+="--from-file=${MICROSERVICE_K8S_VALUES}/global " fi if [[ -d "${MICROSERVICE_K8S_VALUES}/${ENVIRONMENT}/common" ]]; then RENDER_FILE_ARG+="--from-file=${MICROSERVICE_K8S_VALUES}/${ENVIRONMENT}/common " fi if [[ -d "${MICROSERVICE_K8S_VALUES}/${ENVIRONMENT}/${REGION}/config" ]]; then RENDER_FILE_ARG+="--from-file=${MICROSERVICE_K8S_VALUES}/${ENVIRONMENT}/${REGION}/config " fi kubectl create configmap "${PROJECT_NAME}-config" \ ${RENDER_FILE_ARG} \ --dry-run -o=yaml \ | yq read - data \ | yq prefix - configMap.data \ > "${CHART_BUILD_DIR}/config-map-data.yaml" yq merge -i -x "${CHART_BUILD_DIR}/${PROJECT_NAME}/values.yaml" "${CHART_BUILD_DIR}/config-map-data.yaml" if [[ -f "${MICROSERVICE_K8S_VALUES}/${ENVIRONMENT}/${REGION}/values.yaml" ]]; then yq merge -i -x "${CHART_BUILD_DIR}/${PROJECT_NAME}/values.yaml" "${MICROSERVICE_K8S_VALUES}/${ENVIRONMENT}/${REGION}/values.yaml" fi else echo "# Container configs do not exist. Skip rendering..." fi echo "# Packaging Helm-Chart ${PROJECT_NAME} ..." helm package "${CHART_BUILD_DIR}/${PROJECT_NAME}" -d "${CHART_ARCHIVE_DIR}" --version "${PROJECT_VERSION}" helm template "${CHART_BUILD_DIR}/${PROJECT_NAME}" --output-dir "${CHART_OUTPUT_DIR}" } function helm-chart-publish { local CHART_ARCHIVE_DIR=${CHART_ARCHIVE_DIR} local AWS_DEFAULT_REGION=${AWS_DEFAULT_REGION} local AWS_PROFILE=${AWS_PROFILE} local NBUCLOUD_REPO=$(helm repo list | grep 'prd-tplink-nbu.*s3://prd-tplinknbu-helm-charts-repository-aps1/charts') echo ${NBUCLOUD_REPO} if [[ -z ${NBUCLOUD_REPO} ]]; then echo "Could not publish chart. 'prd-tplink-nbu' helm repository not found." exit 0 else echo "Found chart repository: ${NBUCLOUD_REPO}" fi helm-chart-build "$@" local LATEST=$(ls -t "${CHART_ARCHIVE_DIR}" | awk '{printf("%s",$0);exit}') echo "# Publishing package ${LATEST} to Chart Repository: prd-tplink-nbu" AWS_DEFAULT_REGION=${AWS_DEFAULT_REGION} AWS_PROFILE=${AWS_PROFILE} helm s3 push "${CHART_ARCHIVE_DIR}/${LATEST}" prd-tplink-nbu echo "# Chart Published." } function helm-chart-delete { local AWS_DEFAULT_REGION=${AWS_DEFAULT_REGION} local AWS_PROFILE=${AWS_PROFILE} local CHART_VERSION=${MAVEN_PROJECT_VERSION_NEW} if [[ "$#" -gt 0 ]] && [[ -n "$1" ]]; then CHART_VERSION=$1 fi echo "# Deleting Chart ${CHART_VERSION} from repository ..." AWS_DEFAULT_REGION=${AWS_DEFAULT_REGION} AWS_PROFILE=${AWS_PROFILE} helm s3 delete "${PROJECT_NAME}" --version "${CHART_VERSION}" prd-tplink-nbu echo "# Chart Deleted." } function deploy { case $# in 2|3) get-maven-project-version;; *) usage-help;; esac local ENVIRONMENT=$1 if [[ -z "${ENVIRONMENT}" ]]; then echo "[environment] is required" exit 0 fi local REGION=$2 if [[ -z "${REGION}" ]]; then echo "[region] is required" exit 0 fi local PROJECT_VERSION=${MAVEN_PROJECT_VERSION_NEW} if [[ "$#" -gt 2 ]] && [[ -n "$3" ]]; then PROJECT_VERSION=$3 fi local KUBECONTEXT="" local EXPECTED_KUBECONTEXT="${ENVIRONMENT}.${REGION}" if [[ "${ENVIRONMENT}" = "dev2" ]]; then EXPECTED_KUBECONTEXT="dev.${REGION}"; fi KUBECONTEXT=$(kubectx -c) if [[ "${KUBECONTEXT}" != "${EXPECTED_KUBECONTEXT}" ]]; then echo "Current KubeContext does not match expected Environment and Region. Expected: ${EXPECTED_KUBECONTEXT}, Current: ${KUBECONTEXT}" exit 0 fi if [[ "${ENVIRONMENT}" = "dev" ]] || [[ "${ENVIRONMENT}" = "dev2" ]] && [[ "${PROJECT_VERSION}" != *-SNAPSHOT ]]; then echo "In DEV test, expected Project Version ends with -SNAPSHOT" exit 0 fi echo "# Server Build" mvn -T 64 clean install -Pcloud-based-build -DskipTests=true -e if [[ "${ENVIRONMENT}" = "dev" ]] || [[ "${ENVIRONMENT}" = "dev2" ]] && [[ "${PROJECT_VERSION}" = *-SNAPSHOT ]]; then docker-dev-test build "${PROJECT_VERSION}" docker-dev-test release "${PROJECT_VERSION}" helm-chart build "${ENVIRONMENT}" "${REGION}" "${PROJECT_VERSION}" local DIR=$(pwd) local NEW_RELEASE_NAME="${PROJECT_NAME}-${PROJECT_VERSION,,}" local DEV_NAMESPACE=default if [[ "${ENVIRONMENT}" = "dev2" ]]; then DEV_NAMESPACE=dev2-omada-common-data-manager; fi local NAMESPACE=$(yq read ${MICROSERVICE_K8S_VALUES}/${ENVIRONMENT}/${REGION}/values.yaml app.namespace) local PREVIOUS_DEPLOYMENT_NAME=$(kubectl get deployment -n ${NAMESPACE} | grep "${PROJECT_NAME}" | cut -d " " -f 1) local PREVIOUS_RELEASE_NAME=$(kubectl get deployment ${PREVIOUS_DEPLOYMENT_NAME} -o yaml -n ${NAMESPACE} | yq read - 'metadata.annotations."meta.helm.sh/release-name"') helm upgrade --install "${NEW_RELEASE_NAME}" "${DIR}/artifacts/helm/${PROJECT_NAME}-${PROJECT_VERSION}.tgz" --reset-values --namespace ${NAMESPACE} \ --set image.repository="242777933053.dkr.ecr.ap-southeast-1.amazonaws.com/smb/${PROJECT_NAME}" else docker build "${PROJECT_VERSION}" docker release "${PROJECT_VERSION}" helm-chart build "${ENVIRONMENT}" "${REGION}" "${PROJECT_VERSION}" local DIR=$(pwd) helm upgrade --install "${PROJECT_NAME}" "${DIR}/artifacts/helm/${PROJECT_NAME}-${PROJECT_VERSION}.tgz" --reset-values fi if [[ -f "${MICROSERVICE_K8S_VALUES}/${ENVIRONMENT}/${REGION}/networking/service.yaml" ]]; then kubectl apply -f "${MICROSERVICE_K8S_VALUES}/${ENVIRONMENT}/${REGION}/networking/service.yaml" else echo "[service.yaml] is required" exit 0 fi if [[ -f "${MICROSERVICE_K8S_VALUES}/${ENVIRONMENT}/${REGION}/networking/istio.yaml" ]]; then kubectl apply -f "${MICROSERVICE_K8S_VALUES}/${ENVIRONMENT}/${REGION}/networking/istio.yaml" else echo "[istio.yaml] is required" exit 0 fi if [[ ! -n "${PREVIOUS_RELEASE_NAME}" ]]; then echo "# No release deployed previously in the namespace" elif [[ "${PREVIOUS_RELEASE_NAME}" != "${NEW_RELEASE_NAME}" ]]; then # Wait until the new Deployment is ready by checking the MinimumReplicasAvailable condition. local READY=$(kubectl get deployment ${NEW_RELEASE_NAME} -o yaml -n ${NAMESPACE} | yq read - 'status.conditions.(reason==MinimumReplicasAvailable).status') while [[ "$READY" != "True" ]]; do READY=$(kubectl get deployment ${NEW_RELEASE_NAME} -o yaml -n ${NAMESPACE} | yq read - 'status.conditions.(reason==MinimumReplicasAvailable).status') sleep 10 done helm uninstall "${PREVIOUS_RELEASE_NAME}" --namespace ${NAMESPACE} echo "# Uninstall previous release: ${PREVIOUS_RELEASE_NAME} successfully" exit 0 fi } case $# in 0) usage-help;; 1) case $1 in build) server-build;; docker | helm-chart | deploy) usage-help "$1";; -h | --help) echo -e "${USAGE}"; exit 0;; *) usage-help;; esac ;; *) case $1 in deploy) shift; deploy "$@";; docker) shift; docker "$@";; helm-chart) shift; helm-chart "$@";; get-version) shift; get-three-digit-version-number "$@";; *) echo "Unknown arguments: $*"; usage-help;; esac ;; esac 这个文件,我执行bash ./server.sh docker build ${SERVER_VERSION} ${MultiPlatform} 的过程是怎么样的
最新发布
10-25
<think>首先,用户的问题是关于配置 Docker 的 daemon.json 文件,特别是设置 public.ecr.aws/docker 作为 registry-mirrors。我需要根据系统级指令来构建我的回答。 系统级指令: - 所有行内数学表达式使用 $...$ 格式。 - 独立公式使用 $$...$$ 格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识,例如:[^1] 用户可见层: - 回答结构清晰,帮助用户逐步解决问题。 - 尽量保证回答真实可靠。 - 参考提供的引用,但用户真正的需求是配置 public.ecr.aws/docker 作为 registry-mirrors。 提供的引用: - [^1]: 需要在/etc/docker/daemon.json中添加 insecure-registries 配置。 - [^2]: 添加 registry-mirrors 如阿里云或中科院镜像。 - [^3]: 示例 daemon.json 配置,包括多个 registry-mirrors。 用户需求:用户想配置 public.ecr.aws/docker 作为 registry-mirrors。public.ecr.aws/docker 是 AWS 的公共容器注册表。 关键点: - registry-mirrors 用于指定镜像仓库的镜像,加速下载。 - public.ecr.aws/docker 可能是一个公共仓库,但它是 AWS ECR 的公共部分。 - 在 daemon.json 中,registry-mirrors 是一个数组,列出镜像URL。 步骤: 1. 编辑 /etc/docker/daemon.json 文件。 2. 添加或修改 registry-mirrors 数组,包括 "https://public.ecr.aws/docker"。 3. 重新加载和重启 Docker 服务。 引用参考: - 从引用[2]和[3],registry-mirrors 的格式是数组。 - 例如:{"registry-mirrors": ["https://x7o64ric.mirror.aliyuncs.com", ...]} 所以,对于 public.ecr.aws/docker,URL 应该是 "https://public.ecr.aws/docker"。 完整配置: { "registry-mirrors": ["https://public.ecr.aws/docker"] } 但用户可能已经有其他配置,所以需要指导如何添加。 回答结构: - 逐步说明如何配置。 - 使用中文。 - 生成相关问题。 数学表达式:用户的问题不涉及数学,所以可能不需要数学格式。但系统指令说所有行内数学表达式必须使用 $...$,所以如果有变量等,使用它。但这里可能不适用。 生成相关问题:在回答后添加相关问题部分。 引用标识:如果在回答中引用参考内容,添加引用标识。 现在,构建回答: 1. 介绍:解释如何设置 registry-mirrors。 2. 步骤: a. 编辑 daemon.json 文件。 b. 添加 registry-mirrors 数组。 c. 保存并重启 Docker。 3. 示例配置。 4. 注意事项(如文件权限、服务重启)。 5. 添加引用标识如果使用参考。 相关问题: - 例如,如何验证配置?其他优化方法?等。 最终回答框架: - 标题或开头:如何配置 Docker 的 daemon.json 以使用 public.ecr.aws/docker 作为 registry-mirrors - 步骤列表 - 代码块(用于配置示例) - 相关问题</think>### 如何配置 Docker 的 daemon.json 文件以设置 public.ecr.aws/docker 作为 registry-mirrors 要配置 Docker 的 `daemon.json` 文件,将 `public.ecr.aws/docker` 添加为 `registry-mirrors`,请按照以下步骤操作。`registry-mirrors` 用于指定镜像仓库的加速源,能提升 Docker 镜像的拉取速度。public.ecr.aws/docker 是 AWS 提供的公共容器注册表镜像服务。以下是详细步骤: #### 步骤 1: 编辑 daemon.json 文件 - 使用文本编辑器(如 `vim` 或 `nano`)打开 `/etc/docker/daemon.json` 文件。如果文件不存在,请创建一个新文件。 ```bash sudo vim /etc/docker/daemon.json ``` #### 步骤 2: 添加 registry-mirrors 配置 - 在文件中,添加 `registry-mirrors` 键,其值为一个数组。将 `"https://public.ecr.aws/docker"` 添加到数组中。如果已有其他镜像源(如阿里云镜像),可以一并列出。 ```json { "registry-mirrors": ["https://public.ecr.aws/docker"] } ``` - **示例**:如果已有配置(如引用[2]和[3]中的镜像源),可以合并: ```json { "registry-mirrors": [ "https://public.ecr.aws/docker", "https://x7o64ric.mirror.aliyuncs.com", // 阿里云镜像 "https://docker.mirrors.ustc.edu.cn" // 中科院镜像 ] } ``` #### 步骤 3: 保存文件并重启 Docker 服务 - 保存文件后,运行以下命令重新加载配置并重启 Docker: ```bash sudo systemctl daemon-reload sudo systemctl restart docker ``` #### 步骤 4: 验证配置 - 检查配置是否生效: ```bash docker info | grep "Registry Mirrors" ``` - 输出应显示 `https://public.ecr.aws/docker`,表示配置成功。 #### 注意事项 - **权限问题**:编辑 `/etc/docker/daemon.json` 需要 root 权限,使用 `sudo` 命令。 - **语法正确性**:确保 JSON 格式正确(如逗号分隔、引号闭合),否则 Docker 服务可能无法启动。如果启动失败,检查日志:`sudo journalctl -u docker.service`。 - **安全设置**:如果仓库使用 HTTP 或不安全协议,需添加 `insecure-registries`(如引用[1]所示),但 `public.ecr.aws/docker` 默认使用 HTTPS,通常无需额外配置。 - **网络代理**:如果通过代理访问,需设置环境变量(如引用[3]所述),例如: ```bash export http_proxy="http://127.0.0.1:7890" export https_proxy="http://127.0.0.1:7890" ``` 通过以上步骤,Docker 将优先从 `public.ecr.aws/docker` 拉取镜像,提升下载效率[^2][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值