Docker 镜像的基本使用

本文详细介绍了Docker镜像的基本使用,包括docker login、docker pull和docker push三个核心命令。在登录Registry后,可以拉取或推送镜像。遇到登录、拉取或推送失败的问题,提供了相应的排查方法。建议在拉取官方镜像时使用加速器,确保顺利下载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Docker 镜像的基本使用

前言

Docker的使用条件和基础不再复述
Docker安装和Docker镜像下载的加速器文档在下方的”相关链接”中已经给出,磨刀不误砍柴工。

基本概念

Docker的镜像存储中心通常被称为Registry
当您需要获取Docker镜像的时候,首先需要登录Registry,然后拉取镜像。
在您修改重新打包好镜像之后,您又可以再次将镜像推送到Registry中去。

Docker的镜像地址是什么?我们来看一个完整的例子。(以容器服务的公共镜像为例)
registry.cn-hangzhou.aliyuncs.com/acs/agent:0.8

  • Registry域名registry.cn-hangzhou.aliyuncs.com
  • 命名空间acs
  • 仓库名称agent
  • Tag镜像标签0.8(非必须,默认latest)

将这个几个完全独立的概念组合一下,还有几个术语。

  • 仓库坐标registry.cn-hangzhou.aliyuncs.com/acs/agent
  • 仓库全名acs/agent

基本使用

本文的重点是介绍Docker最常用的三个命令:login、pull、push。

docker login

登陆时必须指明登陆的Registry域名
以阿里云杭州公网Registry为例:(必要时需要使用sudo)

docker@default-online:~$ docker login registry.cn-hangzhou.aliyuncs.com
Username: sample@alibaba-inc.com
Password:
Login Succeeded

登陆成功之后会显示 Login Succeeded。
另外你还可以通过查看这个文件,确认您的登陆信息。

docker@default-online:~$ cat ~/.docker/config.json
{
    "auths": {
        "registry.cn-hangzhou.aliyuncs.com": {
            "auth": "XXXXXXXXXXXXXXXXXXXXXX"
        }
    }
}

docker pull

拉取镜像首先需要提示您的是:

  1. 如果你要拉取Docker官方的镜像的话,参考一下下方相关链接中的加速器文章。
  2. 如果你要拉取公共仓库下的镜像的话,不登陆Registry也是可以拉去的。

还是以容器服务的公共镜像 registry.cn-hangzhou.aliyuncs.com/acs/agent:0.8 为例

docker@default-online:~$ docker pull registry.cn-hangzhou.aliyuncs.com/acs/agent:0.8
0.8: Pulling from acs/agent
5a026b6c4964: Already exists
e4b621e8d9cb: Already exists
8bc2fd04bdd4: Pull complete
a977b0087b3e: Pull complete
8f6e00ea13c6: Pull complete
875dd8c9666f: Pull complete
9c07bcabc35d: Pull complete
Digest: sha256:cac848bd31bccf2a041bda7b57e3051341093abde6859df9ee9d332dfec6ddd9
Status: Downloaded newer image for registry.cn-hangzhou.aliyuncs.com/acs/agent:0.8

查看一下下载下来的镜像(注意仓库坐标Tag这两个概念)

docker@default-online:~$ docker images
REPOSITORY                                    TAG                 IMAGE ID            CREATED             SIZE
registry.cn-hangzhou.aliyuncs.com/acs/agent   0.8                 b9ba5841bdb0        24 hours ago        42.18 MB

docker push

镜像在本地环境构建或是打包好之后,就可以推到Registry啦。
当然前提条件是,你有对这个仓库的读写权限或是读写授权。否则你会看到下面这样的错误。

docker@default-online:~$ docker push registry.cn-hangzhou.aliyuncs.com/acs/agent:0.8
The push refers to a repository [registry.cn-hangzhou.aliyuncs.com/acs/agent]
359f80267111: Layer already exists
7e5fa28d90b8: Layer already exists
b20d7f600f63: Layer already exists
4a159b4f8370: Layer already exists
7c3712ebe877: Layer already exists
d91d130a53aa: Layer already exists
fcad8ad5a40f: Layer already exists
unauthorized: authentication required

FAQ

docker login 失败

主要需要排查有两种可能
1. 用户使用了阿里云账户的登陆密码,而没有使用Registry的独立登陆密码。Registry的登陆密码是在容器镜像服务的控制台上设置与修改的。
2. 用户使用了sudo进行登陆,这个时候系统第一个要求输入的密码是Linux的用户密码。很多用户在这里输入了Registry的登陆密码,导致登陆操作失败。区分这个错误的方式很简单,Linux的用户密码大多允许尝试三次,错误时会提示Sorry, try again.。而Registry的登陆密码错误一次之后就会退出,并返回以下错误。

Error response from daemon: Get https://registry.cn-hangzhou.aliyuncs.com/v2/: unauthorized: authentication required

docker pull 失败,提示Error: image xxx not found

主要的排查步骤
1. 自己下载的是公共仓库,那么问题应该在镜像地址不正确。请在控制台搜索一下这个公共仓库,检查一下想要下载的这个镜像版本是不是真实存在。
2. 自己想要下载的是一个私有仓库中的镜像,这时首先确认一下Registry登陆状态。cat ~/.docker/config.json可以看到所有登陆的Registry域名。里面是不是包括你想要下载镜像的Registry域名。如果没有的话,您需要参考上面的文档,先进行登陆操作。如果这里已经登陆了的话,那么您需要确认的就是您登陆的这个账户是否有权限下载这个镜像。子账户默认是没有任何权限的,参考下方相关链接中主子账户授权的文章。

docker pull 失败,提示Error: filesystem layer verification failed for digest

极少数情况下偶现,下载的块文件检验失败。一般重试可以解决。

docker push 失败

主要的排查步骤和docker pull基本一致,仅仅是授权要求的级别较pull更高一些。

相关链接

### 创建和运行Docker镜像的教程 #### 安装Docker 为了能够创建和运行Docker镜像,首先需要确保已经在本地环境中安装了Docker。可以通过访问Docker官网获取适用于不同操作系统的安装包并完成安装过程[^4]。 #### 编写Dockerfile 要创建一个自定义的Docker镜像,通常需要编写一个名为`Dockerfile`的文件。该文件包含了用于构建镜像的所有指令以及环境配置细节。例如: ```dockerfile # 基础镜像 FROM ubuntu:latest # 设置工作目录 WORKDIR /app # 复制当前目录下的所有文件到容器中的/app路径下 COPY . . # 安装依赖项 RUN apt-get update && apt-get install -y python3-pip # 暴露端口 EXPOSE 8080 # 启动命令 CMD ["python3", "app.py"] ``` 上述示例展示了如何基于最新的Ubuntu基础镜像来设置开发环境,并指定启动应用所需的命令[^2]。 #### 构建Docker镜像 当准备好`Dockerfile`之后,就可以利用`docker build`命令来生成实际的镜像。假设此脚本位于项目根目录,则可执行如下命令: ```bash docker build -t my-app:v1 . ``` 这里`my-app:v1`表示新创建的镜像标签名及其版本号;`.`代表上下文路径即当前所在位置。 #### 查看已有的Docker镜像详情 如果想进一步了解某个特定镜像的信息,比如其内部结构或者配置参数等,可以借助于`docker inspect`工具。它将以JSON格式返回目标对象的相关属性列表。例如查询刚才制作好的镜像可用下面语句实现: ```bash docker inspect my-app:v1 ``` 这一步骤有助于验证最终产物是否满足预期需求[^3]。 #### 运行Docker容器实例 最后,在拥有有效镜像的前提下,可通过调用`docker run`方法将其转化为正在运作的服务实体。基本语法形式如下所示: ```bash docker run --name some-container-name -d -p hostPort:containerPort imageName[:tag] ``` 其中选项解释分别为: - `--name`: 自定义容器名字; - `-d`: 表明以后台模式启动进程; - `-p`: 映射主机与容器之间的网络端口号关系; - `imageName[:tag]`: 调度使用的具体镜像资源标识符。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值