# 镜像的整个生命周期
#### 入门指引
容器镜像服务是一种支持容器镜像全生命周期管理的服务，提供简单易用、安全可靠的镜像管理功能，帮助用户快速部署容器化服务。本文档以一个nginx镜像为例，帮助您学习如何安装容器引擎并构建镜像，以及如何使用容器引擎客户端推送镜像到容器镜像仓库。
![](https://support.huaweicloud.com/qs-swr/public_sys-resources/note_3.0-zh-cn.png)
- 推送镜像到容器镜像仓库支持两种方式：使用容器引擎客户端和console页面，console页面上传请参见[页面上传](https://support.huaweicloud.com/usermanual-swr/swr_01_0012.html)。
- 暂未开放镜像推送的API。
 
您将按以下流程学习如何使用容器镜像服务。
图1入门流程   
![](https://support.huaweicloud.com/qs-swr/zh-cn_image_0000002749239401.png)
#### 准备工作
在使用容器镜像服务企业版之前，请您先注册华为账号并完成实名认证，详情请参见[注册华为云账号](https://support.huaweicloud.com/usermanual-account/account_id_001.html)和[个人实名认证](https://support.huaweicloud.com/usermanual-account/zh-cn_topic_0077914254.html)。
本文以一个nginx镜像为例，讲述根据该应用编写Dockerfile文件构建镜像并推送至容器镜像服务的操作。您可以编写一个Dockerfile文件，以nginx为基础镜像，来构建一个新nginx容器镜像。
#### 一、安装容器引擎
首先，您需要准备一台虚拟机并安装docker容器引擎，请确保容器引擎为18.06及以上版本。
在安装容器引擎前，请了解容器引擎的基础知识，具体请参见[Docker Documentation](https://docs.docker.com)。
#### 购买并登录弹性云服务器
参考[购买并登录Linux弹性云服务器](https://support.huaweicloud.com/qs-ecs/ecs_01_0103.html)创建一台带有弹性公网IP的Linux弹性云服务器。
作为演示，弹性云服务器和公网IP的规格不需要太高，例如弹性云服务器的规格为"1vCPUs \| 2GiB"、公网IP带宽为"1 Mbit/s"即可，操作系统以选择"CentOS 7.5"为例。
![](https://support.huaweicloud.com/qs-swr/public_sys-resources/note_3.0-zh-cn.png)
- 您也可以使用其他机器安装容器引擎，不创建弹性云服务器。

- 如果您使用的操作系统为**EulerOS** ，请参考[EulerOS操作系统下安装](https://support.huaweicloud.com/usermanual-swr/swr_01_0006.html#swr_01_0006__li1756716406122)。
- 如果您使用的是Centos操作系统，建议选择CentOS7、CentOS7.2、CentOS7.3、CentOS7.4、CentOS7.5、CentOS7.6操作系统版本，否则可能导致安装异常。
 
创建完成后返回弹性云服务器列表，单击操作列的"远程登录"，以root用户登录弹性云服务器。
#### 安装Docker容器引擎
使用如下命令快速安装容器引擎，具体请参见[Docker 安装指南](https://docs.docker.com/engine/install/#installation)。
```
curl -fsSL get.docker.com -o get-docker.sh
sh get-docker.sh
sudo systemctl daemon-reload
sudo systemctl restart docker
```
#### 二、构建镜像
构建镜像的内容可以是源代码，也可以是已打包成压缩包的镜像。
- [构建源代码镜像]
  1. 创建一个名为Dockerfile的文件。 
     ```
     mkdir mynginx
     cd mynginx
     touch Dockerfile
     ```
     
     
  
  2. 编辑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**，保存并退出。
     
     
  
  3. 使用docker build \[*选项* \] \<*上下文路径* \> 构建镜像。
     
     ```
     docker build -t nginx:v1 .
     ```
     - -t：指定镜像的名称和版本。
     
     - **.** ：指定Dockerfile所在目录，镜像构建命令将该路径下所有的内容打包给容器引擎帮助构建镜像。
       有关 Dockerfile 的更多信息，请参考 [Dockerfile 参考](https://docs.docker.com/engine/reference/builder/)。
       
     
     
     
     
  
  4. 执行以下命令，可查看到已成功部署的nginx镜像，版本为v1。 
     ```
     docker images
     ```
     
     
   
- [构建压缩包镜像]
  下面指导您通过docker load命令和ctr images import命令将镜像压缩包导入为一个镜像。
  **制作镜像压缩包**
  本节指导您将容器镜像制作成tar或tar.gz文件压缩包。
  1. 以root用户登录容器引擎所在机器。
  
  2. 执行如下命令查看镜像。 
     ```
     docker images
     ```
     查看需要导出的镜像及tag。
     
     
  
  3. 执行如下命令制作镜像压缩包。 
     ```
     docker save [OPTIONS] IMAGE [IMAGE...]
     ```
     - OPTIONS：--output或-o，表示导出到文件。
     
     - 压缩包格式为：.tar或.tar.gz。
     
     
     ![](https://support.huaweicloud.com/qs-swr/public_sys-resources/caution_3.0-zh-cn.png)
     使用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客户端导入，执行以下命令：
  ```
  docker load < 路径/文件名.tar
  docker load --input或者-i 路径/文件名.tar
  ```
  示例：
  ```
  docker load --input fedora.tar
  ```
 #### 三、创建组织
组织用于隔离镜像，并为账号下的IAM用户指定不同的权限（读取、编辑、管理）。
1. 登录[SWR控制台](https://console.huaweicloud.com/swr/#/swr/dashboard)。
2. 单击控制台左上角的![](https://support.huaweicloud.com/qs-swr/zh-cn_image_0000002644947810.png)，选择区域和项目。
3. 在左侧导航栏单击"组织管理"，进入组织管理页面。
4. 单击页面右上角的"创建组织"按钮，在弹框中填写"组织名称"，然后单击"确定"。 
   ![](https://support.huaweicloud.com/qs-swr/zh-cn_image_0000002645107720.png)
   表1创建组织参数说明 
   | 参数   | 示例                      | 参数说明                                                                                                                                                                                  |
   |:---|:---|:---|
   | 组织名称 | **cloud-** **develop** | 组织用于隔离镜像仓库，每个组织可对应一个公司或部门，将其拥有的镜像集中在该组织下。 小写字母开头，后面跟小写字母、数字、点、下划线或中划线（其中下划线最多允许连续两个，中划线允许连续多个，点、下划线、中划线不能直接相连），小写字母或数字结尾，1-64个字符。 |
      
   ![](https://support.huaweicloud.com/qs-swr/public_sys-resources/note_3.0-zh-cn.png)
   - 组织名称全局唯一，即当前区域下，组织名称唯一。创建组织时如果提示组织已存在，可能该组织名称已被其他用户使用，请重新设置一个组织名称。
   
   
   
   - 用户在IAM中被授予SWR Admin或Tenant Administrator策略才有创建组织的权限。
   
   - 不允许创建名称为library的组织，该组织为系统预留，请更换一个其他的名称。
    
   
   
 
 #### 四、连接容器镜像服务
1. 登录[SWR控制台](https://console.huaweicloud.com/swr/#/swr/dashboard)。
2. 选择左侧导航栏的"总览"，单击页面右上角的"登录指令"，在弹出的页面中单击![](https://support.huaweicloud.com/qs-swr/zh-cn_image_0000002711882410.png)复制登录指令。
   
   图2登录指令   
   ![](https://support.huaweicloud.com/qs-swr/zh-cn_image_0000002741681359.png)
   ![](https://support.huaweicloud.com/qs-swr/public_sys-resources/note_3.0-zh-cn.png)
   临时登录指令支持用户自定义临时登录有效时间，支持设置有效期是15分钟-24小时，过期会失效，若需要长期有效的登录指令，请参考[获取长期有效登录指令](https://support.huaweicloud.com/usermanual-swr/swr_01_1000.html)。
   Docker客户端需要获取登录指令，Containerd客户端无需获取登录指令。
   
   
3. 在安装容器引擎的虚拟机中执行上一步复制的登录指令。 
   登录成功会显示"Login Succeeded"。
   
   
 
#### 五、推送镜像
本节介绍使用Docker客户端推送镜像的方法。
1. 在安装容器引擎的虚拟机上执行以下命令，为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
   ```
   
   
2. 推送镜像至镜像仓库。 
   ```
   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
   ```
   
   
3. 返回容器镜像服务控制台，在"我的镜像"页面，执行刷新操作后可查看到对应的镜像信息。
 
#### 六、拉取镜像
拉取镜像（也叫下载镜像），当您需要使用镜像仓库中的镜像时，您需要从镜像仓库拉取镜像。常搭配华为云产品云容器引擎CCE部署工作负载或者云容器实例CCI部署实例使用。
1. 登录[SWR控制台](https://console.huaweicloud.com/swr/#/swr/dashboard)。
2. 单击左侧导航栏的"我的镜像"进入镜像列表页面。
3. 单击镜像名称进入镜像详情页面。
4. 单击Pull/Push指南页签，选择docker容器引擎，复制页面生成的docker pull指令，在终端执行该指令 。 
   示例：
   ```
   docker pull swr.cn-east-3.myhuaweicloud.com/group/nginx:v2.0.0
   ```
   
   
5. 执行docker images查看已拉取的镜像。 
   ```
   docker images
   ```
   
   
 
#### 七、删除镜像
容器镜像服务支持镜像的全生命周期管理，包括镜像的推送、拉取、删除等。
- [通过控制台删除镜像]
  1. 登录[SWR控制台](https://console.huaweicloud.com/swr/#/swr/dashboard)。
  
  2. 在左侧导航栏选择"我的镜像"。
  
  3. 找到需要删除的镜像，单击右侧操作列的更多，下拉菜单单击"删除"。
  
  4. 在弹出的确认框中输入"DELETE"，单击"确定"，完成删除。
   
- [Docker客户端删除镜像]
  如果您需要删除本地机器上的镜像，可以使用以下命令：
  ```
  # 查看本地镜像
  docker images  
  # 删除本地镜像
  docker rmi [镜像名称:版本名称]
  ```
  **示例** ：
  ```
  docker rmi swr.cn-north-4.myhuaweicloud.com/cloud-develop/nginx:v1
  ```
  或删除本地构建的镜像：
  ```
  docker rmi nginx:v1
  ```
  ![](https://support.huaweicloud.com/qs-swr/public_sys-resources/caution_3.0-zh-cn.png)
  删除镜像前，请确保没有容器正在使用该镜像。您可以先执行docker ps -a查看所有容器，并停止或删除使用该镜像的容器。
  Docker容器引擎客户端只删除本机器的镜像，不会删除SWR仓库里的镜像，SWR仓库的镜像要通过控制台删除方式。
#### 八、删除组织
1. 登录[SWR控制台](https://console.huaweicloud.com/swr/#/swr/dashboard)。
2. 单击控制台左上角的![](https://support.huaweicloud.com/qs-swr/zh-cn_image_0000002712042340.png)，选择区域和项目。
3. 在左侧导航栏选择"组织管理"。
4. 单击待删除组织右上角"删除"按钮，单击"确定"。 
   图3删除组织
   ![](https://support.huaweicloud.com/qs-swr/zh-cn_image_0000002711882412.png)
   
   
 
