Skip to content

Instantly share code, notes, and snippets.

@miguelmota
Last active June 19, 2023 21:56
Show Gist options
  • Star 25 You must be signed in to star a gist
  • Fork 5 You must be signed in to fork a gist
  • Save miguelmota/c13bd2f5cc5493c82689c40117846571 to your computer and use it in GitHub Desktop.
Save miguelmota/c13bd2f5cc5493c82689c40117846571 to your computer and use it in GitHub Desktop.
Makefile docker push to AWS Elastic Container Registry (ECR)
# Login to AWS registry (must have docker running)
docker-login:
$$(aws ecr get-login --no-include-email --region us-east-1 --profile=mycompany)
# Build docker target
docker-build:
docker build -f Dockerfile --no-cache -t mycompany/myapp .
# Tag docker image
docker-tag:
$(eval REV=$(shell git rev-parse HEAD | cut -c1-7))
docker tag mycompany/myapp:latest 123.dkr.ecr.us-east-1.amazonaws.com/mycompany/myapp:latest
docker tag mycompany/myapp:latest 123.dkr.ecr.us-east-1.amazonaws.com/mycompany/myapp:$(REV)
# Push to registry
docker-push:
$(eval REV=$(shell git rev-parse HEAD | cut -c1-7))
docker push 123.dkr.ecr.us-east-1.amazonaws.com/mycompany/myapp:latest
docker push 123.dkr.ecr.us-east-1.amazonaws.com/mycompany/myapp:$(REV)
# Build docker image and push to AWS registry
docker-build-and-push: docker-login docker-build docker-tag docker-push 
@philvarner
Copy link

I ended up with this Makefile, which uses get-login-password and uses variables to reduce duplication:

.phony: all

all: docker-build docker-push 	

IMG_NAME = myapp
$(eval AWS_ACCOUNT_ID=$(shell aws sts get-caller-identity --query Account --output text))
$(eval REV=$(shell git rev-parse HEAD | cut -c1-7))
$(eval REG=$(AWS_ACCOUNT_ID).dkr.ecr.$(AWS_REGION).amazonaws.com)
$(eval REPO=$(REG)/$(IMG_NAME))

# Login to ECR
ecr-login:
	aws ecr get-login-password --region $(AWS_REGION) | docker login --password-stdin --username AWS $(REG)

# Build and tag docker image
docker-build:
	docker build -f Dockerfile --no-cache -t $(IMG_NAME) .

# Push docker image
docker-push: ecr-login
	docker tag $(IMG_NAME):latest $(REPO):latest
	docker tag $(IMG_NAME):latest $(REPO):$(REV)
	docker push $(REPO):latest
	docker push $(REPO):$(REV)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment