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

본론
이미지 레지스트리란?
이미지 레지스트리(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를 기반으로 할지, 어떤 파일을 복사할지, 어떤 명령을 실행할지, 어떤 프로세스를 기본 실행할지 등을 정의한다

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

멀티 스테이지 빌드라는 개념은, 나도 강의를 들으며 처음 배웠던 내용이였는데 최종 이미지의 크기를 최소화하고, 보안상 필요한 파일만 포함시킬 수 있도록 도와주는 고급 기능이라고 한다. 아래 코드의 예시처럼 두 개 이상의 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 |