
# 通过Docker命令操作镜像
通过执行Docker命令操作镜像，比如登录、推送、下载等操作。
- [图形化构建]
  在[配置构建步骤](https://support.huaweicloud.com/usermanual-codeci/codeci_ug_0059.html)中，添加"执行Docker命令"构建步骤，参考[表1]配置参数。
   表1执行Docker命令参数说明 
  | **参数**    | **说明**                                                                                                                                                                                                                                                                                                                                                                     |
  |:---|:---|
  | 步骤显示名称    | 构建步骤的名称，可自定义修改。 - 支持中文、英文、数字、"-"、"_"、英文逗号、英文分号、英文冒号、"."、"/"、圆括号（中英文）。  - 字符长度范围为1\~128。          |
  | 工具版本      | 根据用户实际开发环境的需要，选择对应的工具版本。 CodeArts Build支持的工具版本，可查看[构建工具版本](https://support.huaweicloud.com/productdesc-codeci/cloudbuild_07_0004.html)。若当前的工具版本不满足您的使用要求，您可以[制作镜像并推送到SWR仓库](https://support.huaweicloud.com/usermanual-codeci/codeci_ug_0013.html)。 默认版本为docker-18.03，当前支持"docker 18.03"、"docker 20.10"。 |
  | 命令        | 单击"添加"，新增一条命令行，请根据需要选择并配置命令。CodeArts Build支持的Docker命令可参考[编译构建支持的Docker命令]。 可通过拖动命令调整命令执行顺序。                                                                                                                                                                                                        |
  | 失败后是否继续运行 | 当前步骤执行失败后是否继续执行下一个步骤，根据实际使用场景选择是或否。                                                                                                                                                                                                                                                                                                                                        |
     
- [代码化构建]
  参考以下代码示例，修改在[创建代码化构建使用的YAML文件](https://support.huaweicloud.com/usermanual-codeci/codeci_ug_0058.html#codeci_ug_0058__section72391847131511)中的BUILD部分代码信息。
  ```
  version: 2.0 # 必须是2.0
  steps:
    BUILD:
      - docker:
            inputs:
              command: |
                docker pull swr.xx-xxxxx-x.myxxcloud.com/codeci/dockerindocker:dockerindocker18.09-1.3.2
              ignore_fail: true
  ```
  表2代码示例参数说明 
  | **参数**      | **类型** | **说明**                                                                                                                                                                                                                                                                                                |
  |:---|:---|:---|
  | command     | string | 执行命令，每个命令一行。支持的docker命令可参考[编译构建支持的Docker命令]。                                                                                                                                                                                                                  |
  | ignore_fail | string | 用于控制当前步骤执行失败后是否继续执行下一个步骤。 - true：是。  - 为空：否。   |
     
 #### 编译构建支持的Docker命令
- **docker login** ：登录docker仓库。
  **用法**：docker login \[options\] \[server\]
  **options** 填写方法如下表，**server** 为docker仓库地址。
  
  | **参数**     | **对应短名称** | **说明**       |
  |:---|:---|:---|
  | --password | -p        | 登录仓库的用户密码。   |
  | --username | -u        | 登录仓库的用户名。    |
  | --password | -stdin    | 从标准输入获取用户密码。 |
     
  **示例** ：docker login -u jack -p 12345 mydocker-registry.com
  该示例表示使用jack用户远程登录地址为"mydocker-registry.com"的仓库，密码为"12345"。
  **高级用法**
  从文件里获取密码：cat \~/my_password.txt \| docker login **--username** jack **--password-stdin**
  ![](https://support.huaweicloud.com/usermanual-codeci/zh-cn_image_0000001949974764.png)
  
- **docker build** ：通过Dockerfile或者上下文制作镜像。上下文可以是构建执行所在的本地路径"Path"，也可以是远程URL，如Git库、tarball或文本文件等，还可以是"-"。
  **用法**：docker build \[options\] Path \| URL \| -
  **options** 填写方法如下表。Path/URL/-为上下文来源。
  
  | **参数** | **对应短名称** | **说明**                            |
  |:---|:---|:---|
  | --file | -f        | Dockerfile文件路径，默认为"./Dockerfile"。 |
  | --tag  | -t        | "镜像名:标签"格式。                       |
     
  **示例** ：docker build -t mydocker-registry.com/org/alpine:1.0 -f ./Dockerfile .
  该示例表示使用当前目录且标签为"mydocker-registry.com/org/alpine:1.0"的Dockerfile制作镜像。
  ![](https://support.huaweicloud.com/usermanual-codeci/zh-cn_image_0000001949990840.png)
  
- **docker push** ：推送镜像到指定的地址。
  **用法**：docker push \[options\] name\[:tag\]
  **示例** ：docker push mydocker-registry.com/org/alpine:1.0
  该示例表示将"mydocker-registry.com/org/alpine"镜像的1.0版本推送到远程仓库。
  ![](https://support.huaweicloud.com/usermanual-codeci/zh-cn_image_0000001980671833.png)
  
- **docker pull** ：从镜像仓库下载镜像到本地。
  **用法**：docker pull \[options\] name\[:tag\|@digest\]
  **options** 填写方法如下表。
  
  | **参数**     | **对应短名称** | **说明**            |
  |:---|:---|:---|
  | --all-tags | -a        | 下载镜像仓库所有标识tag的镜像。 |
     
  **示例** ：docker pull mydocker-registry.com/org/alpine:1.0
  该示例表示从远程仓库拉取版本号为1.0的mydocker-registry.com/org/alpine镜像。
  
- **docker tag** ：修改镜像的标签。
  **用法**：docker tag source_image\[:tag\] target_image\[:tag\]
  **其中source_image\[:tag\]** 表示需要修改标签的镜像，**target_image\[:tag\]**表示目标镜像。
  **示例** ：docker tag mydocker-registry.com/org/alpine:1.0 mydocker-registry/neworg/alpine:2.0
  该示例表示，将"mydocker-registry.com/org/alpine"镜像的标签从"1.0"改为"2.0"。
  
- **docker save** ：保存一个或者多个镜像到tar类型的文件，默认是标准输出流。
  **用法**：docker save \[options\] image \[image ...\]
  **options** 填写方法如下表。
  
  | **参数**   | **对应短名称** | **说明**       |
  |:---|:---|:---|
  | --output | -o        | 写文件，非使用标准输出。 |
     
  **示例** ：**docker save** **-o** **alpine.tar mydocker-registry.com/org/alpine:1.0 mydocker-registry.com/org/alpine:2.0**
  该示例表示将mydocker-registry.com/org/alpine:1.0镜像和mydocker-registry.com/org/alpine:2.0镜像打包到alpine.tar。
  
- **docker logout** ：从镜像仓库登出。
  **用法**：docker logout \[server\]
  **示例** ：**docker logout mydocker-registry.com**
  该示例表示登出地址为mydocker-registry.com的镜像仓。
  
 
