---
url: /zh/build/showcase/docker-build-and-push-to-cnb-artifact.md
description: |
  介绍如何在 CNB 流水线中构建 Docker 镜像并推送到 CNB Docker 制品库或第三方镜像仓库，包含完整的配置示例。
---
本文介绍如何在流水线中构建 Docker 镜像并推送至制品库。

## 推送镜像

CNB 流水线内置触发者的访问凭据，可直接登录 CNB Docker 制品库并推送镜像。
如需推送至第三方仓库，增加 `imports` 导入凭据和 `docker login` 步骤即可。

::: tabs
@tab 推送到 CNB 制品库

```yaml title=".cnb.yml"
main:
  push:
    - services:
        - docker
      stages:
        - name: set docker tag
          script: echo -n "${CNB_DOCKER_REGISTRY}/${CNB_REPO_SLUG_LOWERCASE}:latest"
          exports:
            info: IMAGE_TAG
        - name: docker build
          script: docker build -t $IMAGE_TAG .
        - name: push image
          script: docker push $IMAGE_TAG
```

@tab 推送到第三方制品库

```yaml title=".cnb.yml"
main:
  push:
    - services:
        - docker
      imports: https://cnb.build/<your-repo-slug>/-/blob/main/xxx/docker-envs.yml
      stages:
        - name: docker login
          script: echo "${DOCKER_PWD}" | docker login -u ${DOCKER_USER} --password-stdin ${DOCKER_REGISTRY}
        - name: set docker tag
          script: echo -n "${DOCKER_REGISTRY}/${DOCKER_GROUP}/${DOCKER_REPO_NAME}:$CNB_COMMIT_SHORT"
          exports:
            info: IMAGE_TAG
        - name: docker build
          script: docker build -t $IMAGE_TAG .
        - name: push image
          script: docker push $IMAGE_TAG
```

其中 `docker-envs.yml` 文件内容：

```yaml
DOCKER_USER: user
DOCKER_PWD: password
DOCKER_REGISTRY: docker.io
DOCKER_GROUP: group_name
DOCKER_REPO_NAME: repo_name
```

:::
