이미지 레지스트리와 빌드 (DevOps)

2025. 5. 11. 16:58·DevOps/Docker

들어가며

이번 포스팅에서는 이미지랑 컨테이너를 어떻게 공유하고, 관리하고, 생성하는 과정에 대해서 다루려고 한다. 그중에서도 이미지의 저장소인 레지스트리랑 직접 이미지를 생성하는 빌드 과정을 함께 정리해보았다


본론


이미지 레지스트리란?

이미지 레지스트리(Registry)는 도커 이미지들을 저장하고 공유할 수 있는 중앙 저장소 역할을 한다. 대표적으로는 Docker Hub가 있으며, 기업에서는 자체적인 프라이빗 레지스트리를 운영하기도 한다고 한다.  Docker Hub 에서는 docker pull, docker push 명령어를 통해 이미지를 주고받을 수 있다

만약 이미지를 레지스트리에 업로드하려면 아래의 단계로 진행이 되는데,
1. docker tag 명령어로 이미지에 태그를 붙이기

2. docker login을 통해 인증 후

3. docker push 
의 간단한 과정으로 가능하다

이미지 레지스트리의 과정


반대로 이미지를 내려받을 때는 
docker pull 명령어를 사용하고, 이미지의 이름은 [레지스트리주소]/[계정명]/[이미지명]:[태그] 라는 컨벤션을 꼭 따라줘야한다


이미지 레지스트리 실습

실제 강의를 들으며 실습했던 내용은 아래와 같았다

devwikirepo/simple-web:1.0 이라는 이미지 -> huncozyboy/my-simple-web:0.1로 태깅 -> Docker Hub에 푸시

# 태깅
$ docker tag devwikirepo/simple-web:1.0 huncozyboy/my-simple-web:0.1

# 푸시
$ docker push huncozyboy/my-simple-web:0.1

# 풀
$ docker pull devwikirepo/simple-web:1.0

이미지와 레이어 구조

이전 게시글에서도 설명했듯이, Docker Hub를 통해서 다운받고 푸시하는 이미지는 사실 여러 개의 레이어가 쌓여 있는 구조다. 이 구조는 캐싱 효율성과 빌드 재사용성 측면에서 매우 중요한데, Dockerfile에서 한 줄씩 명령어를 작성할 때마다 각 명령이 하나의 레이어로 분리된다고 생각해주면 된다

이미지 레이어 구조

때문에 도커를 실행하면 사진의 오른쪽 부분처럼 여러 개의 레이어가 나타나게 되는것이다


이미지 빌드

앞서 설명한 도커 이미지들을 가장 체계적으로 생성하는 방법은 Dockerfile을 작성하고 docker build 명령어를 사용하는 것이라고 한다. Dockerfile은 이미지 생성의 모든 과정을 코드로 명시하는 일종의 스크립트다. 이 파일을 통해 어떤 OS를 기반으로 할지, 어떤 파일을 복사할지, 어떤 명령을 실행할지, 어떤 프로세스를 기본 실행할지 등을 정의한다

실제 dev 환경에서 사용하고있는 Dockerfile

위 파일을 기준으로 docker build -t my-app . 명령어를 실행하면, 실제로 해당 디렉토리의 파일들을 기반으로 새로운 이미지가 생성된다


멀티 스테이지 빌드

백엔드 Spring Boot Application 이미지 구성

멀티 스테이지 빌드라는 개념은, 나도 강의를 들으며 처음 배웠던 내용이였는데 최종 이미지의 크기를 최소화하고, 보안상 필요한 파일만 포함시킬 수 있도록 도와주는 고급 기능이라고 한다. 아래 코드의 예시처럼 두 개 이상의 FROM 지시어를 사용하여 빌드 단계와 실행 단계를 분리할 수 있다

FROM node:18 as builder
WORKDIR /app
COPY . .
RUN npm install && npm run build

FROM node:18-slim
WORKDIR /app
COPY --from=builder /app/dist ./dist
CMD ["node", "dist/index.js"]

해당 방식으로 진행해주게 되면 불필요한 개발 도구나 빌드 툴이 최종 이미지에 포함되지 않도록 하여, 보안성과 성능을 모두 확보할 수 있는 장점이 있다고 나와있다


마치며

이제 강의를 들으며 기존에 알던 내용이 아니라, 새로 알게된 내용이 꽤 생기게된 만큼 집중해서 더 잘 들어봐야겠다. 멀티 스테이지 빌드에 관련한 내용은 나도 공부중이라서 아래의 공식문서에서 자세한 내용을 참고해주면 더 좋을거같다

 https://docs.docker.com/build/building/multi-stage/

 

Multi-stage

Learn about multi-stage builds and how you can use them to improve your builds and get smaller images

docs.docker.com

공식문서 내용
1. 멀티 스테이지의 기본 구조

2. AS 키워드 사용법

3. COPY --from=... 방식

4. 예제 코드들

'DevOps > Docker' 카테고리의 다른 글

도커 스토리지와 볼륨 (DevOps)  (1) 2025.06.13
도커 네트워크, 실습 (DevOps)  (0) 2025.05.26
클라우드 네이티브 애플리케이션 + LEAFY 실습 (DevOps)  (0) 2025.05.11
Docker 이미지와 컨테이너 (DevOps)  (1) 2025.05.11
가상화 기술과 컨테이너 (DevOps)  (0) 2025.05.11
'DevOps/Docker' 카테고리의 다른 글
  • 도커 네트워크, 실습 (DevOps)
  • 클라우드 네이티브 애플리케이션 + LEAFY 실습 (DevOps)
  • Docker 이미지와 컨테이너 (DevOps)
  • 가상화 기술과 컨테이너 (DevOps)
huncozyboy
huncozyboy
이지훈
  • huncozyboy
    열정을 기록하기
    huncozyboy
  • 전체
    오늘
    어제
    • 분류 전체보기 (63)
      • Spring (26)
        • JWT (3)
        • 무한 스크롤 (1)
        • 매칭 로직 (2)
        • OAuth (4)
        • 자동화 (1)
        • 캐싱 (1)
        • AOP (2)
        • Swagger (1)
        • S3 (1)
        • CORS (1)
        • Spring Retry (0)
        • Webhook (2)
        • Grapheme Cluster (1)
        • 연관관계 (1)
        • CS 개념 (5)
      • DevOps (13)
        • 스왑 메모리 (1)
        • Blue Green (2)
        • Docker (7)
        • Route 53 (1)
        • 리버스 프록시 (2)
      • AI (2)
        • Claude Code (1)
        • Copilot (1)
      • CS (4)
        • JAVA (4)
      • Github (1)
        • Conflict (1)
      • Python (4)
        • Langchain (3)
        • Crawling (1)
      • 일상 (3)
        • 회고록 (1)
      • 알고리즘 (10)
        • 투포인터 (0)
        • 슬라이딩 윈도우 (0)
        • 정렬 (0)
        • 이분 탐색 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    수도코드
    Docker
    Spring
    OAuth
    https
    DevOps
    EC2
    코딩테스트
    aws
    스프링
    백준
    도커
    LangChain
    JWT
    java
    알고리즘
    redis
    자바
    코테
    프로그래머스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
huncozyboy
이미지 레지스트리와 빌드 (DevOps)
상단으로

티스토리툴바