[Docker] Dockerfile 빌드부터 ECR 이미지 등록까지

yedi·2025년 2월 16일
post-thumbnail

https://velog.io/@yedi/Docker-Dockerfile

앞서 설명한 Dockerfile을 AWS ECR에 등록하기 전에 먼저 ①빌드(Build)하고 ②태그(Tag)를 지정해야 한다.
각 과정에 대해 자세히 살펴보자.


① 빌드 (Build)

  • 빌드는 Docker 이미지를 생성하는 과정입니다.
    docker build 명령어를 통해 Dockerfile을 기반으로 이미지를 만듭니다.

  • 문법은 아래와 같습니다.

    docker build [OPTIONS] PATH

    주요 [OPTIONS]

    종류 설명
    -t, --tag - 이미지를 태그합니다.
    - 형식은 name:tag이며, tag가 지정되지 않으면 기본적으로 :latest가 사용됩니다.
    - :latest는 자동으로 생성되어 생략할 수 있지만, 명시적으로 태그를 지정하면 이미지의 버전이나 환경을 명확히 구분할 수 있어 관리와 배포 시 오류를 줄이고, 특정 버전의 이미지를 사용할 때 유리합니다.
    예시) -t my-image:latest
    -f, --file - 사용할 Dockerfile을 지정합니다.
    - 기본적으로 현재 디렉토리의 Dockerfile을 사용합니다.
    예시) -f /path/to/Dockerfile

    PATH는 로컬 시스템에 있는 디렉토리 경로를 지정합니다.

  • 예시
    Web Dockerfile )

    docker build -t popup-paging-web:latest -f /home/ec2-user/docker/docker-images/paging/web/Dockerfile.web /home/ec2-user/ui/web/popup-paging-web/target/
    

    해석하면, popup-paging-web:latest 태그를 붙이고, -f /home/ec2-user/docker/docker-images/paging/web/Dockerfile.web는 사용할 Dockerfile의 위치를, /home/ec2-user/ui/web/popup-paging-web/target/는 Dockerfile 빌드 시 사용할 파일들이 위치한 경로입니다.

    Api Dockerfile )

    docker build -t popup-paging-api:latest -f /home/ec2-user/docker/docker-images/paging/api/Dockerfile.api /home/ec2-user/ui/api/popup-paging-api/target/
    

    해석하면, popup-paging-api:latest 태그를 붙이고, -f /home/ec2-user/docker/docker-images/paging/api/Dockerfile.api는 사용할 Dockerfile의 위치를, /home/ec2-user/ui/api/popup-paging-api/target/는 Dockerfile 빌드 시 사용할 파일들이 위치한 경로입니다.


② 태그 (Tag)

  • 태그는 이미지를 구분하고, 특정 버전을 지정하는 데 사용됩니다.
    빌드 후에는 자동으로 :latest 태그가 생성되지만, 다른 태그를 명시적으로 추가하는 것이 좋습니다.

  • docker tag 명령어를 사용하여 기존 이미지를 다른 태그로 변경하거나 추가할 수 있습니다. 이때 latest와 함께 추가 태그를 명시적으로 지정하여 사용합니다.

  • 경우 1 ) 로컬에서 이미지 태그를 추가
    : 로컬에 존재하는 이미지에 대해 새로운 태그를 추가하는 것입니다.
    : 문법은 아래와 같습니다.

    docker tag <source_image>:<source_tag> <target_image>:<target_tag>
    종류 설명
    <source_image> 태그를 추가할 기존 이미지의 이름
    <source_tag> 기존 이미지의 태그 (생략하면 기본값은 latest)
    <target_image> 새로 지정할 이미지 이름
    <target_tag> 새 이미지의 태그 (예: latest, v1, staging 등)

    경우 2 ) ECR에 푸시할 이미지에 태그 추가
    : ECR에 이미지를 푸시하기 전에 로컬 이미지를 ECR 리포지토리와 연결하기 위해 태그를 추가하는 과정입니다.
    : 이때는 ECR에 푸시할 URL을 포함하여 태그를 추가해야 하며, 푸시하기 전에 해당 repository를 먼저 생성해야 합니다.
    : 문법은 아래와 같습니다.

    docker tag <source_image>:<source_tag> <aws_account_id>.dkr.ecr.<region>.amazonaws.com/<repository>:<new_tag>

    <source_image>:<source_tag>는 기존 로컬 이미지를 나타내고, <aws_account_id>.dkr.ecr.<region>.amazonaws.com/<repository>:<new_tag>는 ECR의 URL과 리포지토리 이름, 새로운 태그를 나타냅니다.

    예시

    docker tag popup-paging-web:latest <aws_account_id>.dkr.ecr.ap-northeast-2.amazonaws.com/paging:popup-paging-web-latest
    
    docker tag popup-paging-api:latest <aws_account_id>.dkr.ecr.ap-northeast-2.amazonaws.com/paging:popup-paging-api-latest
    

    : 참고로 <aws_account_id>.dkr.ecr.<region>.amazonaws.com/<repository>:<new_tag>는 AWS 에서 Amazon ECR > Repositories > URL에서 확인이 가능하다.


③ ECR Repository > Docker 이미지 등록

  • 하나의 이미지는 여러 태그를 가질 수 있으며, 어떤 태그에 푸시하더라도 동일한 이미지를 가리키므로, 여러 태그가 같은 이미지를 참조하게 됩니다.

  • 문법은 아래와 같습니다.
    Web Docker 이미지 푸시 )

    docker push <aws_account_id>.dkr.ecr.ap-northeast-2.amazonaws.com/paging:popup-paging-web-latest
    

    popup-paging-web-latest 태그로 이미지를 ECR에 푸시합니다.

    Api Docker 이미지 푸시 )

    docker push <aws_account_id>.dkr.ecr.ap-northeast-2.amazonaws.com/paging:popup-paging-api-latest
    

    popup-paging-api-latest 태그로 이미지를 ECR에 푸시합니다.

    푸시 후, Amazon ECR > Repositories > Image 에서 확인이 가능합니다.

0개의 댓글