Context
Deploying {{project_name}} ({{project_type}}) to a Docker Registry (DockerHub, GitHub Container Registry, AWS ECR, Google Artifact Registry). You will follow a strict 6-phase Deployment Lifecycle Contract.
Instructions
Execute the following phases in order:
Phase 1: Authentication
- Authenticate to the target container registry.
- For DockerHub or GHCR, use
docker login <registry-url> -u <username> -p <password/token>. (For GHCR, the URL isghcr.io). - For AWS ECR, run
aws ecr get-login-password --region <region> | docker login --username AWS --password-stdin <account-id>.dkr.ecr.<region>.amazonaws.com. - For GCP GCR/Artifact Registry, run
gcloud auth configure-docker <region>-docker.pkg.dev.
Phase 2: Build
- Prepare the artifacts for deployment.
- Build your Docker image:
docker build -t <registry-url>/<repository-name>/<image-name>:<tag> . - Consider using
--build-argif yourDockerfilerequires environment variables during the build process. - (Optional but recommended) Build multi-architecture images using
docker buildx build --platform linux/amd64,linux/arm64 -t <registry-url>/<repository-name>/<image-name>:<tag> --push .
Phase 3: Install / Provisioning
- Ensure the target repository exists in the registry.
- For AWS ECR, you might need to create the repository first:
aws ecr create-repository --repository-name <repository-name>. - For DockerHub or GHCR, pushing to a new repository name usually creates it automatically (if permissions allow).
Phase 4: Deploy
- Ship the artifact to the registry.
- Push the image:
docker push <registry-url>/<repository-name>/<image-name>:<tag>. - If you used
docker buildx build --pushin Phase 2, this step is already completed. - Optionally, tag the same image as
latestand push it as well:docker tag <registry-url>/<repository-name>/<image-name>:<tag> <registry-url>/<repository-name>/<image-name>:latest && docker push <registry-url>/<repository-name>/<image-name>:latest.
Phase 5: Checking
- Verify the deployment was successful.
- The
docker pushcommand output should confirm all layers were pushed. - You can also verify by pulling the image:
docker pull <registry-url>/<repository-name>/<image-name>:<tag>. - For ECR, you can list images:
aws ecr describe-images --repository-name <repository-name>.
Phase 6: Update / Rollback
- If Phase 5 fails (e.g., authentication error or network timeout), check your credentials and network connection.
- If a bad image was pushed, there is no direct "rollback" in a registry, but you should delete the bad tag or push the previous known-good image to the
latesttag. - Note the failure in the progress log.
Validation
- Registry authentication (
docker login) succeeds. - Docker image builds successfully.
- Docker image is pushed to the registry.
- Image can be pulled successfully.