Seleccione sus preferencias de cookies

Usamos cookies esenciales y herramientas similares que son necesarias para proporcionar nuestro sitio y nuestros servicios. Usamos cookies de rendimiento para recopilar estadísticas anónimas para que podamos entender cómo los clientes usan nuestro sitio y hacer mejoras. Las cookies esenciales no se pueden desactivar, pero puede hacer clic en “Personalizar” o “Rechazar” para rechazar las cookies de rendimiento.

Si está de acuerdo, AWS y los terceros aprobados también utilizarán cookies para proporcionar características útiles del sitio, recordar sus preferencias y mostrar contenido relevante, incluida publicidad relevante. Para aceptar o rechazar todas las cookies no esenciales, haga clic en “Aceptar” o “Rechazar”. Para elegir opciones más detalladas, haga clic en “Personalizar”.

Ejemplo de publicación de una imagen de Docker en un repositorio de imágenes de Amazon ECR para CodeBuild

Modo de enfoque
Ejemplo de publicación de una imagen de Docker en un repositorio de imágenes de Amazon ECR para CodeBuild - AWS CodeBuild

Este ejemplo produce como salida de la compilación una imagen de Docker y la inserta después en un repositorio de imágenes de Amazon Elastic Container Registry (Amazon ECR). Puede adaptar este ejemplo para insertar la imagen de Docker en Docker Hub. Para obtener más información, consulte Adaptación del ejemplo de publicación de una imagen de Docker en Amazon ECR para insertar en Docker Hub.

Para obtener información acerca de cómo crear una imagen de Docker utilizando una imagen de compilación de Docker personalizada (docker:dind en Docker Hub), consulte nuestro Ejemplo de Docker en una imagen personalizada.

Este ejemplo se ha probado con golang:1.12.

Utiliza la nueva característica de fases múltiples de Docker, que produce una imagen de Docker como salida de la compilación. A continuación, envía la imagen de Docker a un repositorio de imágenes de Amazon ECR. Las compilaciones de imágenes de fases múltiples de Docker ayudan a reducir el tamaño de la imagen de Docker final. Para obtener más información, consulte Use multi-stage builds with Docker.

importante

La ejecución de este ejemplo puede producir cargos en su cuenta de AWS. Estos incluyen posibles cargos por AWS CodeBuild y por acciones y recursos de AWS relacionados con Amazon S3, AWS KMS, Registros de CloudWatch y Amazon ECR. Para obtener más información, consulte Precios de CodeBuild, Precios de Amazon S3, Precios de AWS Key Management Service, Precios de Amazon CloudWatch y Precios de Amazon Elastic Container Registry.

Ejecución del ejemplo de publicación de una imagen de Docker en Amazon ECR

Utilice el siguiente procedimiento para ejecutar el ejemplo que publica una imagen de Docker en Amazon ECR. Para obtener más información sobre este ejemplo, consulte Ejemplo de publicación de una imagen de Docker en un repositorio de imágenes de Amazon ECR para CodeBuild.

Para ejecutar este ejemplo
  1. Si ya tiene un repositorio de imágenes en Amazon ECR que desee utilizar, vaya al paso 3. De lo contrario, si utiliza un usuario en lugar de una cuenta de usuario raíz de AWS o un usuario administrador para trabajar con Amazon ECR, añada esta instrucción (entre ### BEGIN ADDING STATEMENT HERE ### y ### END ADDING STATEMENT HERE ###) para el usuario (o el grupo de IAM con el que está asociado el usuario). No se recomienda utilizar una cuenta raíz de AWS. Esta instrucción permite crear repositorios de Amazon ECR para almacenar imágenes de Docker. Los puntos suspensivos (...) se usan por motivos de brevedad y para ayudarle a encontrar el lugar donde debe añadir la instrucción. No elimine ninguna instrucción ni incluya estos puntos suspensivos en la política. Para obtener más información, consulte el artículo relacionado con el uso de políticas integradas a través de la AWS Management Console en la Guía del usuario.

    { "Statement": [ ### BEGIN ADDING STATEMENT HERE ### { "Action": [ "ecr:CreateRepository" ], "Resource": "*", "Effect": "Allow" }, ### END ADDING STATEMENT HERE ### ... ], "Version": "2012-10-17" }
    nota

    La entidad de IAM que modifica esta política debe tener permiso en IAM para modificar políticas.

  2. Cree un repositorio de imágenes en Amazon ECR. No olvide crear el repositorio en la misma región de AWS en la que va a crear el entorno de compilación y a ejecutar la compilación. Para obtener más información, consulte Crear un repositorio en la Guía del usuario de Amazon ECR. El nombre del repositorio debe coincidir con el que especificará más adelante en este procedimiento, representado por la variable de entorno IMAGE_REPO_NAME. Asegúrese de que la política de repositorios de Amazon ECR conceda acceso para envío de imágenes a su rol de IAM del servicio CodeBuild.

  3. Añada esta instrucción (entre ### BEGIN ADDING STATEMENT HERE ### y ### END ADDING STATEMENT HERE ###) a la política asociada a al rol de servicio de AWS CodeBuild. Esta instrucción permite a CodeBuild cargar imágenes de Docker en repositorios de Amazon ECR. Los puntos suspensivos (...) se usan por motivos de brevedad y para ayudarle a encontrar el lugar donde debe añadir la instrucción. No elimine ninguna instrucción ni incluya estos puntos suspensivos en la política.

    { "Statement": [ ### BEGIN ADDING STATEMENT HERE ### { "Action": [ "ecr:BatchCheckLayerAvailability", "ecr:CompleteLayerUpload", "ecr:GetAuthorizationToken", "ecr:InitiateLayerUpload", "ecr:PutImage", "ecr:UploadLayerPart" ], "Resource": "*", "Effect": "Allow" }, ### END ADDING STATEMENT HERE ### ... ], "Version": "2012-10-17" }
    nota

    La entidad de IAM que modifica esta política debe tener permiso en IAM para modificar políticas.

  4. Cree los archivos tal y como se describe en las secciones Estructura de directorios y Archivos de este tema y cárguelos en un bucket de entrada de S3 o en un repositorio de AWS CodeCommit, GitHub o Bitbucket. Para obtener más información, consulte Referencia del archivo de definiciones de imágenes en la Guía del usuario de AWS CodePipeline.

    importante

    No cargue (root directory name), solo los archivos incluidos en (root directory name).

    Si utiliza un bucket de entrada de S3, no olvide crear un archivo ZIP que contenga los archivos y cárguelo en el bucket de entrada. No añada (root directory name) al archivo ZIP, solo los archivos incluidos en (root directory name).

  5. Cree un proyecto de compilación, ejecute la compilación y vea la información de compilación.

    Si utiliza la consola para crear un proyecto:

    1. En Operating system (Sistema operativo), elija Ubuntu.

    2. En Runtime, elija Standard (Estándar).

    3. En Imagen, elija aws/codebuild/standard:5.0.

    4. Añada las siguientes variables de entorno:

      • AWS_DEFAULT_REGION con un valor de region-ID

      • AWS_ACCOUNT_ID con un valor de ID de account-ID

      • IMAGE_TAG con un valor de Latest

      • IMAGE_REPO_NAME con un valor de Amazon-ECR-repo-name

    Si usa la AWS CLI para crear el proyecto de compilación, es posible que el resultado con formato JSON del comando create-project tenga un aspecto similar al siguiente. (Sustituya los marcadores de posición por sus propios valores).

    { "name": "sample-docker-project", "source": { "type": "S3", "location": "codebuild-region-ID-account-ID-input-bucket/DockerSample.zip" }, "artifacts": { "type": "NO_ARTIFACTS" }, "environment": { "type": "LINUX_CONTAINER", "image": "aws/codebuild/standard:5.0", "computeType": "BUILD_GENERAL1_SMALL", "environmentVariables": [ { "name": "AWS_DEFAULT_REGION", "value": "region-ID" }, { "name": "AWS_ACCOUNT_ID", "value": "account-ID" }, { "name": "IMAGE_REPO_NAME", "value": "Amazon-ECR-repo-name" }, { "name": "IMAGE_TAG", "value": "latest" } ], }, "serviceRole": "arn:aws:iam::account-ID:role/role-name", "encryptionKey": "arn:aws:kms:region-ID:account-ID:key/key-ID" }
  6. Confirme que CodeBuild haya insertado correctamente la imagen de Docker en el repositorio:

    1. Abra la consola de Amazon ECR en https://console.aws.amazon.com/ecr/.

    2. Elija el nombre del repositorio. La imagen debe mostrarse en la columna Image tag (Etiqueta de imagen).

Estructura de directorios

En este ejemplo se presupone que existe esta estructura de directorios.

(root directory name) ├── buildspec.yml └── Dockerfile

Archivos

Este ejemplo usa los siguientes archivos.

buildspec.yml (in (root directory name))

version: 0.2 phases: pre_build: commands: - echo Logging in to Amazon ECR... - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com build: commands: - echo Build started on `date` - echo Building the Docker image... - docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG . - docker tag $IMAGE_REPO_NAME:$IMAGE_TAG $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG post_build: commands: - echo Build completed on `date` - echo Pushing the Docker image... - docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG

Dockerfile (in (root directory name))

FROM golang:1.12-alpine AS build #Install git RUN apk add --no-cache git #Get the hello world package from a GitHub repository RUN go get github.com/golang/example/hello WORKDIR /go/src/github.com/golang/example/hello # Build the project and send the output to /bin/HelloWorld RUN go build -o /bin/HelloWorld FROM golang:1.12-alpine #Copy the build's output binary from the previous build container COPY --from=build /bin/HelloWorld /bin/HelloWorld ENTRYPOINT ["/bin/HelloWorld"]
nota

CodeBuild anula las imágenes de ENTRYPOINT y las sustituye por imágenes de Docker personalizadas.

PrivacidadTérminos del sitioPreferencias de cookies
© 2025, Amazon Web Services, Inc o sus afiliados. Todos los derechos reservados.