Kubernetes 的 MySQL 运算符  / 第 5 章私人登记处  /  5.3 使用 Docker 复制镜像到 Private Registry

5.3 使用 Docker 复制镜像到 Private Registry

使用 air-gapped 或 sanctioned 图像来避免从 Internet 中提取图像是另一个用例,并在此处进行了描述。

笔记

MySQL Operator for Kubernetes 需要这三个容器镜像才能运行:MySQL Operator for Kubernetes、MySQL Router 和 MySQL Server。

  1. 为 Kubernetes 版本选择所需的 MySQL Operator。例如,latest 定义在 helm/mysql-operator/Chart.yaml中。例如, 8.0.31-2.0.7

  2. 执行docker pull mysql/mysql-operator:VERSION,其中 VERSION 是 Kubernetes 版本所需的 MySQL Operator。

  3. 执行docker save mysql/mysql-operator:VERSION -o mysql-operator.tar以导出容器映像,其中 VERSION 是所需的 Kubernetes 版本的 MySQL Operator。

  4. 复制mysql-operator.tar到可以访问私有注册表的主机。

  5. 执行docker load -i mysql-operator.yaml以将图像加载到该主机上的本地 Docker 缓存中。

  6. 执行docker tag mysql/mysql-server:VERSION registry:port/repo/mysql-server:VERSION重新标记图像,为推送到私有注册表做准备;相应地调整版本。

  7. 执行docker push registry:port/repo/mysql-server:VERSION将新创建的标签推送到私有注册表;相应地调整版本。

  8. 如果您不需要导入主机缓存中的图像,则可以使用 删除它docker rmi mysql/mysql-operator:VERSION registry:port/repo/mysql-server:VERSION。这会将其从主机中删除,但注册表本身不会受到影响。相应地调整版本。

或者,您可以使用以下命令拉入和推送一个命令。在具有 DockerHub 访问权限的主机上执行它。如果适用,此主机还需要访问可以访问私有注册表的安全(堡垒)主机。修改变量值以满足您的需要。该命令不会为 tarball 占用本地空间,但会通过 SSH 流式传输容器映像。

export BASTION_USER='k8s'
export BASTION_HOST='k8'
export REGISTRY="..." # for example 192.168.20.199:5000
export REPOSITORY="..." # for example mysql
export OPERATOR_VERSION=$(grep appVersion helm/mysql-operator/Chart.yaml | cut -d '"' -f2)
docker pull mysql/mysql-operator:$OPERATOR_VERSION
docker save mysql/mysql-operator:$OPERATOR_VERSION | \
    ssh $BASTION_USER@$BASTION_HOST \
         "docker load && \
          docker tag mysql/mysql-operator:$OPERATOR_VERSION $REGISTRY/$REPOSITORY/mysql-operator:$OPERATOR_VERSION && \
          docker push $REGISTRY/$REPOSITORY/mysql-operator:$OPERATOR_VERSION && \
          docker rmi mysql/mysql-operator:$OPERATOR_VERSION $REGISTRY/$REPOSITORY/mysql-operator:$OPERATOR_VERSION"
docker rmi mysql/mysql-operator:$OPERATOR_VERSION