docker login 配置同一个镜像仓库登录多个账号 自动切换对应配置

docker login 配置同一个镜像仓库登录多个账号 自动切换对应配置

脚本适用范围:

  • 同一个镜像仓库配置多个账号登录
  • 多个账号在 pullpush 时镜像 URL 包含配置名 (有统一规则)
  • 不符合第二条的可根据实际情况修改脚本

前提:已知 image_url格式为 url/PROJECT_NAME/image_name:tag

1、使用 --config 选项 先登录多个账号

# 登录第一个账号
docker --config ~/.docker/PROJECT_NAME1 login registry.example.com

# 登录第二个账号
docker --config ~/.docker/PROJECT_NAME1 login registry.example.com

2、当你不想后面继续时 这里就可以使用了,使用命令格式为

# 需要对哪个账户的镜像做操作就指定哪个配置
docker --config ~/.docker/PROJECT_NAME1 pull registry.example.com/my-image
docker --config ~/.docker/PROJECT_NAME1 push registry.example.com/my-image

3、当你觉得这个命令记不住,可继续下面的操作 将 这个命令做个脚本

注:这里只针对 pull 需要的话自己改一下 需要更完善的 继续往下看
3.1 将脚本保存为 docker_pull.sh
#!/bin/bash

# 检查是否提供了镜像URL
if [ "$#" -ne 1 ]; then
    echo "Usage: $0 <image_url>"
    exit 1
fi

IMAGE_URL=$1

# 从镜像URL中提取项目名
PROJECT_NAME=$(echo "$IMAGE_URL" | awk -F '/' '{print $2}')

# 构造配置路径
CONFIG_PATH="$HOME/.docker/$PROJECT_NAME"

# 执行 docker pull 命令,根据配置路径是否存在来决定是否使用 --config 参数
if [ -d "$CONFIG_PATH" ]; then
    echo "Using config at $CONFIG_PATH"
    docker --config "$CONFIG_PATH" pull "$IMAGE_URL"
else
    echo "Config path '$CONFIG_PATH' not found. Using default Docker config."
    docker pull "$IMAGE_URL"
fi

# 检查 docker pull 命令是否成功
if [ $? -eq 0 ]; then
    echo "Successfully pulled $IMAGE_URL"
else
    echo "Failed to pull $IMAGE_URL"
    exit 1
fi

3.2 给脚本赋予执行权限:
chmod +x docker_pull.sh

3.3 像使用 docker pull image_url 一样执行该脚本:
./docker_pull.sh url/项目名/image_name:tag

4、执行时不用脚本执行 还用 docker pulldocker push

4.1 创建一个名为 docker_pull_push.sh 的脚本,负责处理 docker pulldocker push 命令的逻辑
#!/bin/bash

COMMAND=$1
IMAGE_URL=$2

# 从镜像URL中提取项目名
PROJECT_NAME=$(echo "$IMAGE_URL" | awk -F '/' '{print $2}')

# 构造配置路径
CONFIG_PATH="$HOME/.docker/$PROJECT_NAME"

# 执行 docker pull 或 docker push 命令,根据配置路径是否存在来决定是否使用 --config 参数
if [ -d "$CONFIG_PATH" ]; then
    echo "Using config at $CONFIG_PATH"
    docker --config "$CONFIG_PATH" "$COMMAND" "$IMAGE_URL"
else
    echo "Config path '$CONFIG_PATH' not found. Using default Docker config."
    docker "$COMMAND" "$IMAGE_URL"
fi

# 检查命令是否成功
if [ $? -eq 0 ]; then
    echo "Successfully executed $COMMAND $IMAGE_URL"
else
    echo "Failed to execute $COMMAND $IMAGE_URL"
    exit 1
fi

4.2 重新定义 docker函数,执行 docker pull 和 docker push 且 只有一个 image_url 参数的命令时调用脚本, 其它命令不影响
4.2.1 定义函数
  • 打开 ~/.bashrc~/.zshrc 文件:

    nano ~/.bashrc   # 如果你使用 Bash
    # 或
    nano ~/.zshrc    # 如果你使用 Zsh
    
  • 添加函数

    docker() {
        if [[ "$1" = "pull" || "$1" = "push" ]] && [ "$#" -eq 2 ]; then
            # 这里 用你的 脚本路径替换掉
            /path/to/docker_pull_push.sh "$1" "$2"
        else
            command docker "$@"
        fi
    }
    
    

4.3 使用步骤

  • 将上面的 Bash 函数添加到 ~/.bashrc~/.zshrc

  • 创建 docker_pull_push.sh 脚本,并将其放在你指定的路径(确保路径与上面的函数中一致)

  • 给脚本赋予执行权限

    chmod +x /path/to/docker_pull_push.sh
    
  • 重新加载 ~/.bashrc~/.zshrc 文件:

    source ~/.bashrc   # 或 ~/.zshrc
    
  • 命令使用不受影响 如:

    # 拉取镜像
    docker pull url/PROJECTNAME/image_name:tag
    # 推送镜像
    docker push url/PROJECTNAME/image_name:tag
    
    

5、脚本工作原理

  • 当你输入 docker pull image_urldocker push image_url 时,函数会调用你的 docker_pull_push.sh 脚本。
  • 脚本会检查项目名对应的配置路径是否存在,并根据是否存在来决定是否使用 --config 参数。
  • 对于其他 docker 命令(如 docker rundocker build),或多于一个参数的 pullpush 命令,原始的 docker 命令将被直接执行,不会受到影响。
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要部署一个在线的 Docker 镜像仓库,可以使用 Docker 官方提供的开源工具 Docker Registry。下面是具体步骤: 1. 安装 Docker Registry 可以使用以下命令安装 Docker Registry: ``` docker run -d --name registry -p 5000:5000 registry:2 ``` 其中,`--name` 参数指定容器名称,`-p` 参数指定将容器的 5000 端口映射到主机的 5000 端口。 2. 配置镜像上传权限 默认情况下,Docker Registry 是公开的,任何人都可以上传镜像。如果需要配置访问帐号和密码,可以使用以下命令: ``` docker run --entrypoint htpasswd registry:2 -Bbn <username> <password> > auth/htpasswd ``` 其中,`<username>` 和 `<password>` 分别指定登录用户名和密码。这个命令会将用户名和密码保存到 `auth/htpasswd` 文件中。 3. 启动 Docker Registry 并配置访问帐号和密码 启动 Docker Registry 时,需要指定访问授权信息。可以使用以下命令启动 Docker Registry: ``` docker run -d --name registry -p 5000:5000 \ -v /path/to/auth:/auth \ -e "REGISTRY_AUTH=htpasswd" \ -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \ -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \ registry:2 ``` 其中,`-v` 参数指定将 `auth` 目录挂载到容器中的 `/auth` 目录,`-e` 参数指定授权信息。这个命令会将 Docker Registry 启动在后台运行。 4. 测试镜像上传和下载 现在,可以使用 `docker push` 命令上传镜像Docker Registry: ``` docker build -t my-image . docker tag my-image localhost:5000/my-image docker push localhost:5000/my-image ``` 然后,可以使用 `docker pull` 命令从 Docker Registry 下载镜像: ``` docker pull localhost:5000/my-image ``` 这样就完成了 Docker 镜像仓库的部署和配置访问帐号和密码的过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值