MySQL Operator for Kubernetes 手册  /  私有仓库  /  使用 Docker 将镜像复制到私有仓库

6.3 使用 Docker 将镜像复制到私有仓库

使用隔离的或经授权的镜像以避免从互联网上拉取镜像是另一个用例,在此处描述。

注意

MySQL Operator for Kubernetes 需要以下三个容器镜像才能正常运行:MySQL Operator for Kubernetes、MySQL Router 和 MySQL 服务器。

  1. 选择所需的 MySQL Operator for Kubernetes 版本。例如,最新版本在 helm/mysql-operator/Chart.yaml 中定义。例如,9.0.0-2.2.0

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

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

  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 以重新标记镜像,作为将其推送到私有仓库的准备工作;相应地调整 VERSION。

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

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

或者,您可以使用以下命令在一个命令中拉取和推送。在具有 Oracle Container Registry (OCR) 访问权限的主机上执行此命令。如果适用,此主机还需要访问可以访问私有仓库的安全(堡垒)主机。修改变量值以适合您的需求。该命令不会占用本地空间来保存 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 container-registry.oracle.com/mysql/community-operator:$OPERATOR_VERSION
docker save container-registry.oracle.com/mysql/community-operator:$OPERATOR_VERSION | \
    ssh $BASTION_USER@$BASTION_HOST \
         "docker load && \
          docker tag container-registry.oracle.com/mysql/community-operator:$OPERATOR_VERSION $REGISTRY/$REPOSITORY/mysql-operator:$OPERATOR_VERSION && \
          docker push $REGISTRY/$REPOSITORY/mysql-operator:$OPERATOR_VERSION && \
          docker rmi container-registry.oracle.com/mysql/community-operator:$OPERATOR_VERSION $REGISTRY/$REPOSITORY/mysql-operator:$OPERATOR_VERSION"
docker rmi container-registry.oracle.com/mysql/community-operator:$OPERATOR_VERSION