# 镜像管理

<!-- TOC -->

- [镜像管理](#镜像管理)
    - [docker镜像管理](#docker镜像管理)
        - [登录到镜像仓库](#登录到镜像仓库)
        - [从镜像仓库退出登录](#从镜像仓库退出登录)
        - [从镜像仓库拉取镜像](#从镜像仓库拉取镜像)
        - [删除镜像](#删除镜像)
        - [加载镜像](#加载镜像)
        - [列出镜像](#列出镜像)
        - [检视镜像](#检视镜像)
        - [双向认证](#双向认证)
    - [embedded镜像管理](#embedded镜像管理)
        - [加载镜像](#加载镜像-1)
        - [列出镜像](#列出镜像-1)
        - [检视镜像](#检视镜像-1)
        - [删除镜像](#删除镜像-1)

<!-- /TOC -->


## docker镜像管理

### 登录到镜像仓库

#### 描述

isula login命令用于登录到镜像仓库。登录成功后可以使用isula pull命令从该镜像仓库拉取镜像。如果镜像仓库不需要密码，则拉取镜像前不需要执行该命令。

#### 用法

```
isula login [OPTIONS] SERVER
```

#### 参数

login命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表1 表1-20 login命令参数列表" 。

#### 示例

```
$ isula login -u abc my.csp-edge.com:5000

Login Succeeded
```

### 从镜像仓库退出登录

#### 描述

isula logout命令用于从镜像仓库退出登录。退出登录成功后再执行isula pull命令从该镜像仓库拉取镜像会因为未认证而拉取失败。

#### 用法

```
isula logout SERVER
```

#### 参数

logout命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表2 logout命令参数列表"。

#### 示例

```
$ isula logout my.csp-edge.com:5000
Logout Succeeded
```

### 从镜像仓库拉取镜像

#### 描述

从镜像仓库拉取镜像到本地。

#### 用法

```
isula pull [OPTIONS] NAME[:TAG|@DIGEST]
```

#### 参数

login命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表3 pull命令参数列表"。

#### 示例

```
$ isula pull localhost:5000/official/busybox
Image "localhost:5000/official/busybox" pulling
Image "localhost:5000/official/busybox@sha256:bf510723d2cd2d4e3f5ce7e93bf1e52c8fd76831995ac3bd3f90ecc866643aff" pulled
```

### 删除镜像

#### 描述

删除一个或多个镜像。

#### 用法

```
isula rmi [OPTIONS] IMAGE [IMAGE...]
```

#### 参数

rmi命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表4 rmi命令参数列表"。

#### 示例

```
$ isula rmi rnd-dockerhub.huawei.com/official/busybox
Image "rnd-dockerhub.huawei.com/official/busybox" removed
```

### 加载镜像

#### 描述

从一个tar包加载镜像。该tar包必须是使用docker save命令导出的tar包或格式一致的tar包。

#### 用法

```
isula load [OPTIONS]
```

#### 参数

load命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表5 load命令参数列表"。

#### 示例

```
$ isula load -i busybox.tar
Load image from "/root/busybox.tar" success
```

### 列出镜像

#### 描述

列出当前环境中所有镜像。

#### 用法

```
isula images
```

#### 参数

images命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表6 images命令参数列表"。

#### 示例

```
$ isula images
REF                                              IMAGE ID             CREATED              SIZE
rnd-dockerhub.huawei.com/official/busybox:latest e4db68de4ff2         2019-06-15 08:19:54  1.376 MB
```

### 检视镜像

#### 描述

返回该镜像的配置信息。可以使用-f参数过滤出需要的信息。

#### 用法

```
isula inspect [options] CONTAINER|IMAGE [CONTAINER|IMAGE...]
```

#### 参数

inspect命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表7 inspect命令参数列表"。

#### 示例

```
$ isula inspect -f "{{json .image.id}}" rnd-dockerhub.huawei.com/official/busybox
"e4db68de4ff27c2adfea0c54bbb73a61a42f5b667c326de4d7d5b19ab71c6a3b"
```

### 双向认证

#### 描述

开启该功能后isulad和镜像仓库之间的通信采用https通信，isulad和镜像仓库都会验证对方的合法性。

#### 用法

要支持该功能，需要镜像仓库支持该功能，同时isulad也需要做相应的配置：

1.  修改isulad的配置\(默认路径/etc/isulad/daemon.json\)，将配置里的use-decrypted-key项配置为false。
2.  需要将相关的证书放置到/etc/isulad/certs.d目录下对应的镜像仓库命名的文件夹下，证书具体的生成方法见docker的官方链接：
    -   [https://docs.docker.com/engine/security/certificates/](https://docs.docker.com/engine/security/certificates/)
    -   [https://docs.docker.com/engine/security/https/](https://docs.docker.com/engine/security/https/)


1.  执行systemctl restart isulad重启isulad。

#### 参数

可以在/etc/isulad/daemon.json中配置参数，也可以在启动isulad时携带参数：

```
isulad --use-decrypted-key=false
```

#### 示例

配置use-decrypted-key参数为false

```
$ cat /etc/isulad/daemon.json
{
    "group": "isulad",
    "graph": "/var/lib/isulad",
    "state": "/var/run/isulad",
    "engine": "lcr",
    "log-level": "ERROR",
    "pidfile": "/var/run/isulad.pid",
    "log-opts": {
        "log-file-mode": "0600",
        "log-path": "/var/lib/isulad",
        "max-file": "1",
        "max-size": "30KB"
    },
    "log-driver": "stdout",
    "hook-spec": "/etc/default/isulad/hooks/default.json",
    "start-timeout": "2m",
    "storage-driver": "overlay2",
    "storage-opts": [
        "overlay2.override_kernel_check=true"
    ],
    "registry-mirrors": [
        "docker.io"
    ],
    "insecure-registries": [
        "rnd-dockerhub.huawei.com"
    ],
    "pod-sandbox-image": "",
    "image-opt-timeout": "5m",
    "native.umask": "secure",
    "network-plugin": "",
    "cni-bin-dir": "",
    "cni-conf-dir": "",
    "image-layer-check": false,
    "use-decrypted-key": false,
    "insecure-skip-verify-enforce": false
}
```

将证书放到对应的目录下

```
$ pwd
/etc/isulad/certs.d/my.csp-edge.com:5000
$ ls
ca.crt  tls.cert  tls.key
```

重启isulad

```
$ systemctl restart isulad
```

执行pull命令从仓库下载镜像

```
$ isula pull my.csp-edge.com:5000/busybox
Image "my.csp-edge.com:5000/busybox" pulling
Image "my.csp-edge.com:5000/busybox@sha256:f1bdc62115dbfe8f54e52e19795ee34b4473babdeb9bc4f83045d85c7b2ad5c0" pulled
```

## embedded镜像管理

### 加载镜像

#### 描述

根据embedded镜像的manifest加载镜像。注意--type的值必须填写embedded。

#### 用法

```
isula load [OPTIONS] --input=FILE --type=TYPE
```

#### 参数

load命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表5 load命令参数列表"。

#### 示例

```
$ isula load -i test.manifest --type embedded
Load image from "/root/work/bugfix/tmp/ci_testcase_data/embedded/img/test.manifest" success
```

### 列出镜像

#### 描述

列出当前环境中所有镜像。

#### 用法

```
isula images [OPTIONS]
```

#### 参数

images命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表6 images命令参数列表"。

#### 示例

```
$ isula images
REF                            IMAGE ID             CREATED              SIZE
test:v1                        9319da1f5233         2018-03-01 10:55:44  1.273 MB
```

### 检视镜像

#### 描述

返回该镜像的配置信息。可以使用-f参数过滤出需要的信息。

#### 用法

```
isula inspect [options] CONTAINER|IMAGE [CONTAINER|IMAGE...]
```

#### 参数

inspect命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表7 inspect命令参数列表"。

#### 示例

```
$ isula inspect -f "{{json .created}}" test:v1
"2018-03-01T15:55:44.322987811Z"
```

### 删除镜像

#### 描述

删除一个或多个镜像。

#### 用法

```
isula rmi [OPTIONS] IMAGE [IMAGE...]
```

#### 参数

rmi命令支持参数请参见"附录 > 命令行参数说明" 章节的 "表4 rmi命令参数列表"。

#### 示例

```
$ isula rmi test:v1
Image "test:v1" removed
```

