๐Ÿšจ AWS 128: Amazon ECR ์„ค์ • ๋ฐ Docker ์ด๋ฏธ์ง€ ํ‘ธ์‹œ

๋ฐœํ–‰: (2026๋…„ 1์›” 8์ผ ์˜คํ›„ 01:23 GMT+9)
4 ๋ถ„ ์†Œ์š”
์›๋ฌธ: Dev.to

Source: Dev.to

Hey Cloud Builders ๐Ÿ‘‹
#100DaysOfCloud ์ฑŒ๋ฆฐ์ง€์˜ Dayโ€ฏ28์— ์˜ค์‹  ๊ฒƒ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค! ์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” ํ”„๋ผ์ด๋น— Amazon Elastic Container Registry (ECR) ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“ค๊ณ , ์ปค์Šคํ…€ Python ์•ฑ Docker ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•œ ๋’ค, ํ•ด๋‹น ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ํ‘ธ์‹œํ•˜๋Š” ๊ณผ์ •์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

Overview

Amazon ECR์€ ์™„์ „ ๊ด€๋ฆฌํ˜• Docker ์ปจํ…Œ์ด๋„ˆ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋กœ, ๊ฐœ๋ฐœ์ž๊ฐ€ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ €์žฅยท๊ด€๋ฆฌยท๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ํ”„๋ผ์ด๋น— ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ๊ณต๊ฐœ๋กœ๋ถ€ํ„ฐ ์ˆจ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Stepโ€‘byโ€‘Step Workflow

๋‹ค์Œ ๋‹จ๊ณ„ ์ˆœ์„œ๋Œ€๋กœ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค:

  1. ์ €์žฅ์†Œ ์ƒ์„ฑ
  2. Docker ์ด๋ฏธ์ง€ ๋นŒ๋“œ
  3. Docker์™€ ECR ์ธ์ฆ
  4. ์ด๋ฏธ์ง€ ํƒœ๊ทธ ์ง€์ • ๋ฐ ํ‘ธ์‹œ
  5. ์—…๋กœ๋“œ ํ™•์ธ

Create the Repository

aws ecr create-repository \
    --repository-name devops-ecr \
    --region us-east-1

Note: ECR ์ €์žฅ์†Œ๋Š” ๋ฆฌ์ „๋ณ„๋กœ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“ค๊ณ ์ž ํ•˜๋Š” ๋ฆฌ์ „๊ณผ ๋™์ผํ•˜๊ฒŒ AWS CLI๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.

์ƒ์„ฑ ํ›„์—๋Š” Repository URI๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ํ˜•ํƒœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

.dkr.ecr..amazonaws.com/devops-ecr

Build the Docker Image

cd /root/pyapp          # Directory containing the Dockerfile
docker build -t pyapp .   # Build a local image named "pyapp"

Authenticate Docker with ECR

12์‹œ๊ฐ„ ์œ ํšจํ•œ ๋กœ๊ทธ์ธ ํ† ํฐ์„ ์ƒ์„ฑํ•˜๊ณ  Docker์— ํŒŒ์ดํ”„ํ•ฉ๋‹ˆ๋‹ค:

aws ecr get-login-password --region  |
docker login --username AWS --password-stdin .dkr.ecr..amazonaws.com

Tag and Push the Image

# Tag the local image with the full ECR URI
docker tag pyapp:latest .dkr.ecr..amazonaws.com/devops-ecr:latest

# Push the image to the repository
docker push .dkr.ecr..amazonaws.com/devops-ecr:latest

Verify the Upload

  1. ECR ์ฝ˜์†”์„ ์—ฝ๋‹ˆ๋‹ค.
  2. devops-ecr ์ €์žฅ์†Œ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  3. latest ํƒœ๊ทธ๊ฐ€ ๋ถ™์€ ์ด๋ฏธ์ง€๊ฐ€ ํ‘œ์‹œ๋˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ๋จธ์‹ ์—์„œ ์ด๋ฏธ์ง€๋ฅผ ํ’€๋งํ•ด ๋ณด๋Š” ๊ฒƒ๋„ ์ข‹์Šต๋‹ˆ๋‹ค(์ธ์ฆ ํ›„):

docker pull .dkr.ecr..amazonaws.com/devops-ecr:latest

Common Issues & Tips

IssueResolution
Incorrect region์ €์žฅ์†Œ URI๊ฐ€ CLI์— ์„ค์ •๋œ ๋ฆฌ์ „๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
Access deniedIAM ์‚ฌ์šฉ์ž์—๊ฒŒ AmazonEC2ContainerRegistryFullAccess ์ •์ฑ…์ด ๋ถ€์—ฌ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
Missing tagํ‘ธ์‹œํ•˜๊ธฐ ์ „์— ๋กœ์ปฌ ์ด๋ฏธ์ง€์— ์ „์ฒด ECR URI๋ฅผ ์‚ฌ์šฉํ•ด ํƒœ๊ทธ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
Login expiryDocker ๋กœ๊ทธ์ธ ์„ธ์…˜์€ 12์‹œ๊ฐ„ ํ›„ ๋งŒ๋ฃŒ๋ฉ๋‹ˆ๋‹ค. ํ•„์š” ์‹œ ๋กœ๊ทธ์ธ ๋ช…๋ น์„ ๋‹ค์‹œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

Next Steps

์ด๋ฏธ์ง€๊ฐ€ ECR์— ์ €์žฅ๋˜๋ฉด ECS, EKS, Lambda ๋“ฑ ์„œ๋น„์Šค์— ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. CI/CD ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•ด ๋นŒ๋“œยทํ‘ธ์‹œ ๊ณผ์ •์„ ์ž๋™ํ™”ํ•˜๋Š” ๊ฒƒ์ด ์ž์—ฐ์Šค๋Ÿฌ์šด ๋‹ค์Œ ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค.

Resources

  • KodeKloud Engineer โ€“ Practice Labs โ€“ ์‹ค์ œ AWS ํ™˜๊ฒฝ์—์„œ ์ด ์ž‘์—…๋“ค์„ ์ง์ ‘ ํ•ด๋ณด์„ธ์š”.
  • LinkedIn: Hritik Raj
  • GitHub: 100 Days of Cloud (โญ ์—ฌ์ •์„ ์ง€์›ํ•ด ์ฃผ์„ธ์š”)
Back to Blog

๊ด€๋ จ ๊ธ€

๋” ๋ณด๊ธฐ ยป

AWS ELASTIC BEANSTALK ๋ฐฐํฌ ๋ฐฉ๋ฒ•

๊ฐœ์š”: AWS Elastic Beanstalk๋Š” ๊ด€๋ฆฌํ˜• ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค๋กœ, ๊ธฐ๋ณธ ์ธํ”„๋ผ์ŠคํŠธ๋Ÿญ์ฒ˜์— ๋Œ€ํ•ด ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š๊ณ  ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

DevOps ์†Œ๊ฐœ #5. DevOps ํˆด๋ง ํ™˜๊ฒฝ

์ €๋Š” ํ˜„์žฌ DevOps๋ฅผ ๋ฐฐ์šฐ๊ณ  ์žˆ์œผ๋ฉฐ, ์ œ ์—ฌ์ •์„ ๊ธฐ๋กํ•˜๋ฉด์„œ ๊ณต๊ฐœ์ ์œผ๋กœ ๋ฐฐ์šฐ๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒŒ์‹œ๋ฌผ์€ ์ดˆ๋ณด์ž๋ฅผ ์œ„ํ•œ DevOps 101 ์‹œ๋ฆฌ์ฆˆ์˜ ๋งˆ์ง€๋ง‰ ํŒŒํŠธ์ž…๋‹ˆ๋‹คโ€ฆ

๋‹น์‹ ์€ ์•„๋ฌด ์ผ๋„ ํ•˜์ง€ ์•Š๋Š” EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค

๋ฌธ์ œ: ๊ณ„์ • ์–ด๋”˜๊ฐ€์—์„œ ํŠธ๋ž˜ํ”ฝ๋„ ์—†๊ณ , ๋ชฉ์ ๋„ ์—†์œผ๋ฉฐ, ์†Œ์œ ์ž๋„ ์—†๋Š” EC2 ์ธ์Šคํ„ด์Šค๊ฐ€ ์‹คํ–‰๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ธ์Šคํ„ด์Šค๋“ค์€ โ€œ์ž„์‹œ ํ…Œ์ŠคํŠธโ€๋ฅผ ์œ„ํ•ด ์‹œ์ž‘๋˜์—ˆ์ง€๋งŒ, ์ด์ œ๋Š”โ€ฆ