Docker 镜像仓库常见命令

发布于:2024-04-19 ⋅ 阅读:(33) ⋅ 点赞:(0)

Docker Registry (镜像仓库) 常用命令

docker login

  • 功能:登录到一个 Docker 镜像仓库,如果没有指定镜像仓库的地址,默认就是官方的 Docker Hub 仓库。

  • 语法:

    docker login [options] [server]
    
  • 选项:

    • -u:登录的用户名。
    • -p:登录用户的密码。
  • 演示:img

建议带选项的时候,不要带 -p 选项,会被别人偷偷看到哦!

可以看到,登录成功之后,就会在 /rooot/.docker/config.json 中保存你的登录信息:

img

这个 config.json 文件中的这个地址就是你登录的镜像仓库的地址,我们可以尝试使用这个地址来登录一下:

img

可以看到也是可以成功登录的哈!我们登录镜像仓库有啥用呢?在我们没有登录镜像仓库的时候是可以拉取公共的镜像的,但是不能拉取私有的镜像!只有登录了,才能拉取自己私有的镜像。

如下图是我在 Docker Hub 官网上的一个私有镜像仓库:

img

如下图:我使用 docker logout 命令退出登录之后,用 docker pull 命令拉取这个镜像是会报错的!

img

如下图:在我登录我的账号之后,才能成功拉取我的私有镜像仓库中的镜像:

img

docker logout

  • 功能:登出一个 Docker 镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub。

  • 语法:

    docker logout [SERVER]
    

这个功能,上面就已经演示过了,这里就不再演示啦!

docker pull

  • 功能:从镜像仓库中拉取或者更新指定镜像。

  • 语法:

    docker pull [options] NAME[:TAG | @DIGEST]
    
  • 别名:

    docker image pull # docker 对命令进行了分类,这个 pull 命令是属于镜像的命令,所以有个 image 省略也没有关系哈
    
  • 选项:

    • -a:拉取所有 tagged 镜像。
    • –disable-content-trust:忽略镜像的校验,默认开启。加上这个选项 Docker 会检查镜像的完整性以确保其没有被篡改或损坏。
  • 演示1:

    如下图:我的 my-busybox 这个镜像仓库里面有很多不同 Tag 的镜像,我可以使用 docker pull -a 全部将其拉取下来。

img

如下图:在没有拉取之前,我的本地只有 centos 这一个镜像,在拉取之后,一下子多了好多好多镜像:

img

  • 演示2:

我们拉取一个 nginx 的镜像,然后启动这个镜像,看到 nginx 的首页:

如下图:我们在 Docker Hub 的官网搜索 nginx 然后点击你想要下载的版本,当然你可以使用 NAME:Tag 的方式拉取,这一次我们使用 NAMRE@DIGEST 的方式拉取哈!不过平时用得最多的还是 NAME:Tag 的方式哈!这个 DIGEST 值在哪里呢,当你点进去一个具体的版本就可以看到啦:

img

现在我们使用 docker 命令来拉取:

docker pull nginx@sha256:b72dad1d013c5e4c4fb817f884aa163287bf147482562f12c56368ca1c2a3705

img

下面我们执行 docker 命令来运行我们拉取到的 nginx 镜像:

docker run -p 80:80 nginx:1.25.4 # 如果你拉取的 nginx 版本和我的不一样,你需要修改一下版本哦!

img

运行起来之后,我们就可以在浏览器访问啦!前提是你的 80 端口没有被云服务器本身(宿主机)占用,并且你的云服务器是放行了 80 端口的!

img

可以看到,我们就使用 docker 成功地搭建了一个 nginx 服务器啦!

docker push

  • 功能:将本地的镜像上传到镜像仓库,前提是要登录到镜像仓库哦!

  • 语法:

    docker push [OPTIONS] NAME[:TAG]
    
  • 参数:

    • -a:推送所有的 Tag 镜像。
    • –disable-content-trust:忽略镜像的校验,默认开启。
  • 演示:

    如下图:我的私有镜像仓库 my-busybox 里面是没有任何的镜像的。

    img

​ 如下图:我们在登录之后,直接 dpcker push -a 将所有的 my-busybox 镜像给推送到镜像仓库。 img

如下图:我们可以看到成功将所有的 my-busybox 镜像推送到了我的仓库,我们在推送的过程,发现有 Layer already exists 这样的提示,这是什么意思呢?其实啊,在 Docker Hub 的官网中,完全相同的镜像是共享的,也就是说完全相同的镜像在 Docker Hub 中只会保存一份!还记得我们在学习 HTTPS 协议中提到的网盘的极速上传的例子嘛,这里也有体现哦!!!!

img

docker research

  • 功能:从 Docker Hub 中查找镜像。

  • 语法:

    docker search [options] TERM
    
  • 参数:

    • –no-trunc :显示完整的镜像描述。
    • -f<过滤条件>:例如:-f stars=10 列出 stars 数不小于 10 的镜像。
  • 演示:

    如下图:我们在 DOcker Hub 上搜索 nginx 这个镜像,筛选条件是 stars >= 100,然后是截断描述信息的。因为不截断,看起来很不友好,这里就不展示啦!

    img

可以看到,我们通过 docker search 搜索到的镜像,是没有 Tags,没有 DIGEST 的,是没有办法直接拉取镜像到本地的!一般情况下,我们还是区官网查找镜像,而不是通过 docker search 来查找镜像。