Ejemplo de «Publicar una imagen de Docker en un repositorio de ECR imágenes de Amazon» para CodeBuild - AWS CodeBuild

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Ejemplo de «Publicar una imagen de Docker en un repositorio de ECR imágenes de Amazon» para CodeBuild

En este ejemplo, se genera una imagen de Docker como resultado de compilación y, a continuación, se envía la imagen de Docker a un repositorio de imágenes de Amazon Elastic Container Registry (AmazonECR). Puede adaptar este ejemplo para insertar la imagen de Docker en Docker Hub. Para obtener más información, consulte Adapte el ejemplo «Publicar imagen de Docker en AmazonECR» para subirlo a 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 ECR imágenes de Amazon. 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

Al ejecutar este ejemplo, es posible que se le cobren cargos a su cuenta. AWS Estos incluyen posibles cargos por AWS CodeBuild y por AWS los recursos y acciones relacionados con Amazon S3 AWS KMS, CloudWatch Logs y AmazonECR. Para obtener más información, consulte CodeBuild los precios, precios de Amazon S3, precios, AWS Key Management Service precios de Amazon y CloudWatch precios de Amazon Elastic Container Registry.

Ejecute el ejemplo «Publicar imagen de Docker en AmazonECR»

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

Para ejecutar este ejemplo
  1. Si ya tienes un repositorio de imágenes en Amazon ECR que quieras usar, salta al paso 3. De lo contrario, si utilizas un usuario en lugar de una cuenta AWS raíz o un usuario administrador para trabajar con AmazonECR, añade esta declaración (entre ### BEGIN ADDING STATEMENT HERE ### y ### END ADDING STATEMENT HERE ###) al usuario (o IAM grupo al que está asociado el usuario). No se recomienda usar una cuenta AWS root. Esta declaración permite la creación de ECR repositorios de Amazon 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 IAM entidad que modifique esta política debe tener permiso para modificarlas. IAM

  2. Crea un repositorio de imágenes en AmazonECR. Asegúrese de crear el repositorio en la misma AWS región en la que creó el entorno de compilación y en la que ejecutó la compilación. Para obtener más información, consulta Cómo crear un repositorio en la Guía del ECR usuario de Amazon. 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 ECR repositorios de Amazon conceda acceso a imágenes push para su IAM función CodeBuild de servicio.

  3. Añada esta declaración (entre ### BEGIN ADDING STATEMENT HERE ### y ### END ADDING STATEMENT HERE ###) a la política que asoció a su función AWS CodeBuild de servicio. Esta declaración permite CodeBuild cargar imágenes de Docker a los ECR repositorios de Amazon. 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 IAM entidad que modifique esta política debe tener permiso para modificarlasIAM.

  4. Cree los archivos tal y como se describe en las Archivos secciones Estructura de directorios y de este tema y, a continuación, cárguelos en un depósito de entrada de S3 o en un AWS CodeCommit GitHub repositorio de 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 utilizas un depósito de entrada de S3, asegúrate de crear un ZIP archivo que contenga los archivos y, a continuación, cárgalo en el depósito de entrada. No añada (root directory name) al ZIP archivo, solo los archivos que contiene(root directory name).

  5. Cree un proyecto de compilación, ejecute la compilación y consulte la información de la 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_IDcon un valor de account-ID

      • IMAGE_ TAG con un valor de Último

      • IMAGE_ REPO _ NAME con un valor de Amazon-ECR-repo-name

    Si utilizas el AWS CLI para crear el proyecto de compilación, la entrada JSON con formato -del create-project comando podría tener 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. Confirma que la imagen de Docker se ha insertado CodeBuild correctamente en el repositorio:

    1. Abre la ECR consola de Amazon 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 ENTRYPOINT de Docker personalizadas.