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
Temas
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
-
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
-
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. -
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.
-
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
, solo los archivos incluidos en(root directory name)
.(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
al ZIP archivo, solo los archivos que contiene(root directory name)
.(root directory name)
-
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:
-
En Operating system (Sistema operativo), elija Ubuntu.
-
En Runtime, elija Standard (Estándar).
-
En Imagen, elija aws/codebuild/standard:5.0.
-
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
" } -
-
Confirma que la imagen de Docker se ha insertado CodeBuild correctamente en el repositorio:
-
Abre la ECR consola de Amazon en https://console.aws.amazon.com/ecr/
. -
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.