镜像的整个生命周期
入门指引
容器镜像服务是一种支持容器镜像全生命周期管理的服务,提供简单易用、安全可靠的镜像管理功能,帮助用户快速部署容器化服务。本文档以一个nginx镜像为例,帮助您学习如何安装容器引擎并构建镜像,以及如何使用容器引擎客户端推送镜像到容器镜像仓库。
您将按以下流程学习如何使用容器镜像服务。
本文以一个nginx镜像为例,讲述根据该应用编写Dockerfile文件构建镜像并推送至容器镜像服务的操作。您可以编写一个Dockerfile文件,以nginx为基础镜像,来构建一个新nginx容器镜像。
一、安装容器引擎
首先,您需要准备一台虚拟机并安装docker容器引擎,请确保容器引擎为18.06及以上版本。
在安装容器引擎前,请了解容器引擎的基础知识,具体请参见Docker Documentation。
购买并登录弹性云服务器
参考购买并登录Linux弹性云服务器创建一台带有弹性公网IP的Linux弹性云服务器。
作为演示,弹性云服务器和公网IP的规格不需要太高,例如弹性云服务器的规格为“1vCPUs | 2GiB”、公网IP带宽为“1 Mbit/s”即可,操作系统以选择“CentOS 7.5”为例。
- 您也可以使用其他机器安装容器引擎,不创建弹性云服务器。
- 如果您使用的操作系统为EulerOS,请参考EulerOS操作系统下安装。
- 如果您使用的是Centos操作系统,建议选择CentOS7、CentOS7.2、CentOS7.3、CentOS7.4、CentOS7.5、CentOS7.6操作系统版本,否则可能导致安装异常。
创建完成后返回弹性云服务器列表,单击操作列的“远程登录”,以root用户登录弹性云服务器。
安装Docker容器引擎
使用如下命令快速安装容器引擎,具体请参见Docker 安装指南。
curl -fsSL get.docker.com -o get-docker.sh sh get-docker.sh sudo systemctl daemon-reload sudo systemctl restart docker
二、构建镜像
构建镜像的内容可以是源代码,也可以是已打包成压缩包的镜像。
- 创建一个名为Dockerfile的文件。
mkdir mynginx cd mynginx touch Dockerfile
- 编辑Dockerfile。
vim Dockerfile
增加文件内容如下:
FROM nginx RUN echo '<h1>Hello, SWR!</h1>' > /usr/share/nginx/html/index.html
Dockerfile指令介绍如下。
- FROM语句:表示使用nginx镜像作为基础镜像,一个Dockerfile中FROM是必备的指令,并且必须是第一条指令。
- RUN语句:格式为RUN <命令>,表示执行echo命令,在显示器中显示一段“Hello, SWR!”的文字。
按“Esc”,输入:wq,保存并退出。
- 使用docker build [选项] <上下文路径> 构建镜像。
docker build -t nginx:v1 .
- -t:指定镜像的名称和版本。
- .:指定Dockerfile所在目录,镜像构建命令将该路径下所有的内容打包给容器引擎帮助构建镜像。
有关 Dockerfile 的更多信息,请参考 Dockerfile 参考。
- 执行以下命令,可查看到已成功部署的nginx镜像,版本为v1。
docker images
下面指导您通过docker load命令和ctr images import命令将镜像压缩包导入为一个镜像。
制作镜像压缩包
本节指导您将容器镜像制作成tar或tar.gz文件压缩包。
- 以root用户登录容器引擎所在机器。
- 执行如下命令查看镜像。
docker images
查看需要导出的镜像及tag。
- 执行如下命令制作镜像压缩包。
docker save [OPTIONS] IMAGE [IMAGE...]
- OPTIONS:--output或-o,表示导出到文件。
- 压缩包格式为:.tar或.tar.gz。
使用docker save制作镜像压缩包时,请用{image}:{tag}(请替换为实际镜像名和版本号),不要用image id(镜像id),否则无法在SWR页面上传。
示例:
docker save nginx:latest > nginx.tar ls -sh nginx.tar 108M nginx.tar docker save php:5-apache > php.tar.gz ls -sh php.tar.gz 372M php.tar.gz docker save --output nginx.tar nginx ls -sh nginx.tar 108M nginx.tar docker save -o nginx-all.tar nginx # 将nginx所有版本打包 docker save -o nginx-latest.tar nginx:latest
导入镜像文件
docker load < 路径/文件名.tar docker load --input或者-i 路径/文件名.tar
docker load --input fedora.tar
三、创建组织
组织用于隔离镜像,并为账号下的IAM用户指定不同的权限(读取、编辑、管理)。
- 登录SWR控制台。
- 单击控制台左上角的
,选择区域和项目。 - 在左侧导航栏单击“组织管理”,进入组织管理页面。
- 单击页面右上角的“创建组织”按钮,在弹框中填写“组织名称”,然后单击“确定”。

表1 创建组织参数说明 参数
示例
参数说明
组织名称
cloud-develop
组织用于隔离镜像仓库,每个组织可对应一个公司或部门,将其拥有的镜像集中在该组织下。
小写字母开头,后面跟小写字母、数字、点、下划线或中划线(其中下划线最多允许连续两个,中划线允许连续多个,点、下划线、中划线不能直接相连),小写字母或数字结尾,1-64个字符。
- 组织名称全局唯一,即当前区域下,组织名称唯一。创建组织时如果提示组织已存在,可能该组织名称已被其他用户使用,请重新设置一个组织名称。
- 用户在IAM中被授予SWR Admin或Tenant Administrator策略才有创建组织的权限。
- 不允许创建名称为library的组织,该组织为系统预留,请更换一个其他的名称。
四、连接容器镜像服务
- 登录SWR控制台。
- 选择左侧导航栏的“总览”,单击页面右上角的“登录指令”,在弹出的页面中单击
复制登录指令。 图2 登录指令
临时登录指令支持用户自定义临时登录有效时间,支持设置有效期是15分钟-24小时,过期会失效,若需要长期有效的登录指令,请参考获取长期有效登录指令。
Docker客户端需要获取登录指令,Containerd客户端无需获取登录指令。
- 在安装容器引擎的虚拟机中执行上一步复制的登录指令。
登录成功会显示“Login Succeeded”。
五、推送镜像
本节介绍使用Docker客户端推送镜像的方法。
- 在安装容器引擎的虚拟机上执行以下命令,为nginx镜像打标签。
docker tag [镜像名称1:版本名称1] [镜像仓库地址]/[组织名称]/[镜像名称2:版本名称2]
其中,
- [镜像名称1:版本名称1]:请替换为您所要推送的实际镜像的名称和版本名称。
- [镜像仓库地址]:可在SWR控制台上查询,四、连接容器镜像服务中登录指令末尾的域名即为镜像仓库地址。
- [组织名称]:请替换为三、创建组织中创建的组织。
- [镜像名称2:版本名称2]:请替换为您期待的镜像名称和镜像版本。
示例:
docker tag nginx:v1 swr.cn-north-4.myhuaweicloud.com/cloud-develop/nginx:v1
- 推送镜像至镜像仓库。
docker push [镜像仓库地址]/[组织名称]/[镜像名称2:版本名称2]
示例:
docker push swr.cn-east-3.myhuaweicloud.com/cloud-develop/nginx:v1
终端显示如下信息,表明推送镜像成功。
The push refers to repository [swr.cn-east-3.myhuaweicloud.com/cloud-develop/nginx:v1] fbce26647e70: Pushed fb04ab8effa8: Pushed 8f736d52032f: Pushed 009f1d338b57: Pushed 678bbd796838: Pushed d1279c519351: Pushed f68ef921efae: Pushed v1: digest: sha256:0cdfc7910db531bfa7726de4c19ec556bc9190aad9bd3de93787e8bce3385f8d size: 1780
- 返回容器镜像服务控制台,在“我的镜像”页面,执行刷新操作后可查看到对应的镜像信息。
六、拉取镜像
拉取镜像(也叫下载镜像),当您需要使用镜像仓库中的镜像时,您需要从镜像仓库拉取镜像。常搭配华为云产品云容器引擎CCE部署工作负载或者云容器实例CCI部署实例使用。
- 登录SWR控制台。
- 单击左侧导航栏的“我的镜像”进入镜像列表页面。
- 单击镜像名称进入镜像详情页面。
- 单击Pull/Push指南页签,选择docker容器引擎,复制页面生成的docker pull指令,在终端执行该指令 。 示例:
docker pull swr.cn-east-3.myhuaweicloud.com/group/nginx:v2.0.0
- 执行docker images查看已拉取的镜像。
docker images
七、删除镜像
容器镜像服务支持镜像的全生命周期管理,包括镜像的推送、拉取、删除等。
- 登录SWR控制台。
- 在左侧导航栏选择“我的镜像”。
- 找到需要删除的镜像,单击右侧操作列的更多,下拉菜单单击"删除"。
- 在弹出的确认框中输入“DELETE”,单击"确定",完成删除。
# 查看本地镜像 docker images # 删除本地镜像 docker rmi [镜像名称:版本名称]
docker rmi swr.cn-north-4.myhuaweicloud.com/cloud-develop/nginx:v1
docker rmi nginx:v1
删除镜像前,请确保没有容器正在使用该镜像。您可以先执行docker ps -a查看所有容器,并停止或删除使用该镜像的容器。
Docker容器引擎客户端只删除本机器的镜像,不会删除SWR仓库里的镜像,SWR仓库的镜像要通过控制台删除方式。
八、删除组织
- 登录SWR控制台。
- 单击控制台左上角的
,选择区域和项目。 - 在左侧导航栏选择“组织管理”。
- 单击待删除组织右上角“删除”按钮,单击“确定”。 图3 删除组织
