TIL - 20251010

juni·2025년 10월 10일

TIL

목록 보기
149/316

1010 Docker 입문: 컨테이너화의 기초


✅ 1. 도커(Docker)란 무엇인가?

  • 도커는 애플리케이션을 "컨테이너(Container)"라는 표준화된 단위로 패키징하여, 어떤 환경에서든 빠르고 안정적으로 실행할 수 있게 해주는 플랫폼입니다.

  • 핵심 해결 문제: "제 컴퓨터에서는 잘 되는데, 서버에서는 왜 안되죠?" 라는 고질적인 문제를 해결합니다. 애플리케이션과 그 실행에 필요한 모든 환경(라이브러리, 종속성, 설정 파일 등)을 하나의 컨테이너에 담아 통째로 전달하기 때문입니다.

➕ 가상 머신(VM)과의 차이점

  • 가상 머신 (Virtual Machine): 하드웨어를 가상화합니다. 각 VM은 자체적인 OS(Guest OS)를 포함하고 있어 무겁고, 시작하는 데 수 분이 걸립니다.
  • 도커 컨테이너 (Docker Container): OS를 가상화합니다. 호스트(Host) OS의 커널을 공유하며, 애플리케이션과 필요한 라이브러리만 격리하여 실행합니다. 따라서 매우 가볍고, 수 초 내에 시작할 수 있습니다.

VM vs Docker


✅ 2. 도커의 핵심: 이미지(Image)와 컨테이너(Container)

  • 도커를 이해하는 것은 이미지컨테이너의 관계를 이해하는 것과 같습니다. 이 둘의 관계는 프로그래밍의 "클래스(Class)와 인스턴스(Instance)" 관계와 매우 유사합니다.
구분이미지 (Image)컨테이너 (Container)
개념설계도, 템플릿설계도로 지은 집, 실제 제품
상태정적 (Read-Only)동적 (Running)
역할컨테이너를 생성하기 위한 실행 가능한 패키지. 코드, 런타임, 라이브러리, 환경 변수 등 모든 것을 포함.이미지를 기반으로 실행된 인스턴스. 격리된 공간에서 실제 애플리케이션이 동작함.
관계하나의 이미지로 여러 개의 컨테이너를 생성할 수 있음.이미지가 없으면 컨테이너를 생성할 수 없음.
  • 흐름: 개발자가 이미지를 만들어서 도커 허브(Docker Hub)와 같은 레지스트리에 저장하면, 다른 개발자나 서버는 그 이미지를 내려받아 컨테이너로 실행하기만 하면 됩니다.

✅ 3. 컨테이너 설계도: 도커파일(Dockerfile)

  • 도커파일(Dockerfile)은 나만의 커스텀 이미지를 만들기 위한 설명서(Recipe)입니다. 이 파일은 이미지를 어떻게 빌드할지에 대한 명령어들이 순서대로 적혀있는 텍스트 파일입니다.

  • 도커는 이 Dockerfile을 읽어서, 명령어들을 한 줄씩 실행하며 최종적으로 하나의 이미지를 생성합니다.

➕ Dockerfile의 주요 명령어

명령어설명예시
FROM생성할 이미지의 바탕이 될 베이스 이미지를 지정합니다. (필수)FROM openjdk:17-jdk-slim
WORKDIR컨테이너 내부에서 명령어를 실행할 작업 디렉토리를 설정합니다.WORKDIR /app
COPY호스트 컴퓨터의 파일이나 디렉토리를 이미지 안으로 복사합니다.COPY build/libs/*.jar app.jar
RUN이미지를 빌드하는 과정에서 실행할 명령어를 정의합니다. (e.g., 의존성 설치)RUN apt-get update && apt-get install -y vim
CMD컨테이너가 시작될 때 실행할 기본 명령어를 정의합니다. (Dockerfile에서 한 번만 사용)CMD ["java", "-jar", "app.jar"]
EXPOSE컨테이너가 외부에 노출할 포트를 지정합니다. (문서화 목적, 실제 포트 매핑은 아님)EXPOSE 8080

➕ 간단한 Spring Boot Dockerfile 예시

# 1. 베이스 이미지로 OpenJDK 17 버전을 사용
FROM openjdk:17-jdk-slim

# 2. 작업 디렉토리를 /app으로 설정
WORKDIR /app

# 3. 호스트의 빌드된 JAR 파일을 이미지의 /app/app.jar로 복사
COPY build/libs/*.jar app.jar

# 4. 컨테이너가 8080 포트를 외부에 노출할 것임을 명시
EXPOSE 8080

# 5. 컨테이너가 시작될 때 'java -jar app.jar' 명령어를 실행
CMD ["java", "-jar", "app.jar"]

📌 요약

  • 도커(Docker)는 애플리케이션과 그 실행 환경을 컨테이너에 담아, 어디서든 동일하게 실행할 수 있도록 하는 기술입니다.
  • Dockerfile이미지를 만들기 위한 설계도입니다.
  • 이미지는 애플리케이션과 그 환경을 담은 정적인 템플릿입니다.
  • 컨테이너는 이 이미지를 실행한 동적인 인스턴스이며, 이 컨테이너는 OS나 환경에 구애받지 않고 어디서든 동일하게 동작합니다.

0개의 댓글