容器镜像服务 Docker镜像的基本使用

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 容器镜像服务 Docker镜像的基本使用

容器镜像服务 Docker镜像的基本使用

快速开始!前往:容器镜像服务控制台

前言

Docker的使用条件和基础不再复述
Docker安装和Docker镜像下载的加速器文档在下方的"相关链接"中已经给出

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

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

  • registry.cn-hangzhou.aliyuncs.com 叫做 "Registry域名"。
  • acs 叫做 "命名空间"。
  • agent 叫做 "仓库名称"。
  • 0.8 叫做 "Tag"、"镜像标签"(非必须,默认latest)。
    将这个几个完全独立的概念组合一下,还有几个术语。
  • registry.cn-hangzhou.aliyuncs.com/acs/agent 称为 "仓库坐标"。
  • acs/agent 称为 "仓库全名"(通常在API中使用)。

基本使用

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

docker login

以阿里云杭州公网Registry为例:登陆时必须指明登陆的 "Registry域名"

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"
        }
    }
}

子账户如何登陆

首先子账户需要登录控制台,设置一下自己的Registry登陆密码。
然后使用[子账户名]@[企业别名]作为用户名进行登陆。RAM控制台可以设置与查看主账户的企业别名。如果没有企业别名,企业别名默认为主账户的UID。

举例:子账户名为subaccount,企业别名为misaka-network

docker@default-online:~$ docker login registry.cn-hangzhou.aliyuncs.com
Username: subaccount@misaka-network
Password:
Login Succeeded

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的用户密码大多允许尝试三次,错误时会提示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域名。如果没有的话,您需要参考上面的文档,先进行登陆操作。如果这里已经登陆了的话,那么您需要确认的就是您登陆的这个账户是否有权限下载这个镜像。子账户默认是没有任何权限的,参考下方相关链接中主子账户授权的文章。

提示Error: filesystem layer verification failed for digest

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

docker push 失败

提示denied: requested access to the resource is denied

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

相关链接

容器镜像服务 控制台
容器镜像服务 主子账户授权
容器镜像服务 镜像安全扫描
Docker Engine 镜像源站
Docker Toolbox 镜像源站
Docker 镜像加速器

相关实践学习
通过workbench远程登录ECS,快速搭建Docker环境
本教程指导用户体验通过workbench远程登录ECS,完成搭建Docker环境的快速搭建,并使用Docker部署一个Nginx服务。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
7天前
|
Shell Linux Docker
docker常用命令大全(基础、镜像、容器、数据卷)
这些命令仅仅是 Docker 命令行工具的冰山一角,但对于日常操作来说已经非常全面。通过熟练地使用这些基础命令,用户可以有效地管理 Docker 的镜像、容器、数据卷和网络。随着用户对 Docker 的深入使用,更高级的命令和选项将会变得必需,但上面列出的命令已经为用户提供了一个坚实的起点。对于初学者来说,理解和掌握这些常用命令是深入学习 Docker 的基础。
82 5
docker常用命令大全(基础、镜像、容器、数据卷)
|
22小时前
|
存储 安全 Docker
|
4天前
|
Ubuntu Devops 云计算
ubuntu docker-compose编排容器并且设置自启动
使用Docker Compose编排容器并设置为Ubuntu系统的自启动服务,不仅优化了应用的部署流程,也提升了运行时的可管理性和可靠性。通过上述步骤,您可以轻松实现这一目标。维护此类服务时,记得定期检查和更新您的 `docker-compose.yml`文件,确保所有的服务都符合当前的业务需求和技术标准。在云计算和微服务架构不断演进的今天,掌握Docker Compose等工具对于DevOps和软件工程师来说,变得尤为重要。
21 3
|
7天前
|
弹性计算 运维 应用服务中间件
容器的优势,在Docker中运行Tomcat
摘要:了解Docker与虚拟机的区别:虚拟机使用Hypervisor创建完整操作系统,而容器通过namespace和cgroup实现轻量级隔离,共享主机内核。Docker启动快、资源利用率高,适合快速部署和跨平台移植。但安全性相对较低。示例介绍了如何通过Docker搜索、拉取官方Tomcat镜像并运行容器,最后验证Tomcat服务的正常运行。
|
2天前
|
Ubuntu Java Linux
如何基于Alpine Linux创建更小的Docker镜像
如何基于Alpine Linux创建更小的Docker镜像?
|
3天前
|
运维 Kubernetes Docker
|
5天前
|
Kubernetes 调度 Docker
|
6天前
|
运维 Ubuntu Shell
阿里云云效操作报错合集之流水线构建Docker镜像时,遇到报错:“error: failed to solve: rpc error: code”,该怎么办
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
6天前
|
API 开发工具 数据安全/隐私保护
阿里云云效操作报错合集之流水线镜像已经生成,但容器没有出现,是什么导致的
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
6天前
|
敏捷开发 Kubernetes 测试技术
阿里云云效产品使用合集之如何通过内网推送镜像到镜像仓库
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。

相关产品

  • 容器镜像服务