Docker : 이미지와 컨테이너화 실습

dakcoh·2024년 9월 18일
post-thumbnail


Docker를 활용하려면 이미지와 컨테이너의 개념을 이해하고, 이를 실제 애플리케이션 개발과 배포에 어떻게 활용하는지 알아야 합니다.

이번 글에서는 이미지와 컨테이너의 역할, Dockerfile 작성법, 간단한 Java 애플리케이션 컨테이너화, 그리고 이미지 관리 및 공유 방법을 같이 공부해보겠습니다.


1. Docker 이미지와 컨테이너의 구조와 역할

Docker 이미지란?

  • 읽기 전용 템플릿: 애플리케이션 실행에 필요한 코드, 라이브러리, 환경설정 등을 포함한 불변(immutable) 파일입니다.
  • 계층화된 구조: 이미지는 여러 계층(layer)으로 이루어져 있으며, 각 계층은 변경 사항을 추적합니다.
  • 재사용성: 동일한 이미지를 기반으로 여러 컨테이너를 생성할 수 있습니다.
  • 이식성: 운영체제와 하드웨어에 관계없이 일관된 실행 환경을 제공합니다.

Docker 컨테이너란?

  • 이미지의 실행 인스턴스: Docker 이미지를 기반으로 애플리케이션이 실행되는 독립적인 환경입니다.
  • 읽기-쓰기 계층: 컨테이너는 이미지의 읽기 전용 계층 위에 쓰기 가능한 계층을 추가하여 실행 중 데이터 변경 사항을 처리합니다.
  • 격리된 환경: 호스트 시스템과 독립된 네트워크, 파일 시스템, 프로세스를 제공합니다.
  • 임시성: 필요 시 빠르게 생성 및 삭제 가능하며, 컨테이너의 상태를 쉽게 재현할 수 있습니다.

이미지와 컨테이너의 관계

  • Docker 이미지는 설계도, 컨테이너는 설계도를 기반으로 실행된 집과 같습니다.
  • 여러 컨테이너가 하나의 이미지를 공유하며, 컨테이너는 이미지에 쓰기 계층만 추가하여 효율적으로 작동합니다.

비유를 통한 이해

  • 이미지: 요리를 위한 레시피
  • 컨테이너: 레시피를 사용해 완성된 요리

2. Dockerfile 작성법과 빌드

Docker 이미지는 Dockerfile이라는 설정 파일로부터 생성됩니다. Dockerfile은 이미지를 생성하기 위한 명령어를 정의합니다.
예제를 통해 간단한 Java 애플리케이션을 컨테이너화하는 방법을 알아보겠습니다.

Dockerfile 작성법

1. Dockerfile 기본 구조

FROM: 기본 이미지 지정
COPY: 파일 복사
RUN: 명령 실행
CMD 또는 ENTRYPOINT: 컨테이너 실행 시 실행할 명령 지정

2. Dockerfile

  • 간단한 Java 애플리케이션을 실행하는 이미지를 생성하는 Dockerfile입니다.
# 1. 기본 이미지 설정 (OpenJDK 사용)
FROM openjdk:11-jdk-slim

# 2. 애플리케이션 파일 복사
COPY HelloDocker.java /app/HelloDocker.java

# 3. 애플리케이션 빌드
WORKDIR /app
RUN javac HelloDocker.java

# 4. 컨테이너 실행 시 실행할 명령 설정
CMD ["java", "HelloDocker"]

3. HelloDocker.java

  • Dockerfile과 동일 디렉토리에 아래와 같은 Java 파일을 작성합니다:
public class HelloDocker {
    public static void main(String[] args) {
        System.out.println("Hello, Docker!");
    }
}

Docker 이미지 빌드 및 실행

1. 이미지 빌드

docker build -t hello-docker .
  • t: 이미지를 태그 지정 (이름: hello-docker)
  • .: Dockerfile 위치

2. 컨테이너 실행

docker run --rm hello-docker
  • --rm: 컨테이너 실행 종료 시 자동 삭제
  • 실행 결과: Hello, Docker!

3. 이미지 관리 및 공유 방법

Docker 이미지를 효과적으로 관리하고 공유하기 위해 다음 명령어를 사용할 수 있습니다.

이미지 태그 설정

이미지에 태그를 추가하면 특정 버전을 명확히 구분할 수 있습니다.

docker tag hello-docker your-dockerhub-id/hello-docker:1.0

Docker Hub에 이미지 푸시

1. Docker Hub 로그인

docker tag hello-docker your-dockerhub-id/hello-docker:1.0

2. 이미지 푸시

docker tag hello-docker your-dockerhub-id/hello-docker:1.0

3. 다른 사용자가 이미지 사용

docker tag hello-docker your-dockerhub-id/hello-docker:1.0

4. 마무리

이번 글에서는 Docker 이미지를 생성하고 관리하는 방법을 알아보았습니다.
특히, 간단한 Java 애플리케이션을 예제로 실습하며 Dockerfile 작성법이미지를 공유하는 방법을 익혔습니다.

Docker를 활용하면 애플리케이션 배포 및 실행 환경 설정을 쉽게 관리할 수 있습니다.

다음 글에서는 Docker Compose멀티 컨테이너 프로젝트에 대해 공부해보겠습니다.

감사합니다.
이전글 < Docker : 기본 개념과 컨테이너 실행
다음글 > 실전 활용: Docker Compose와 프로젝트 배포

profile
포기하기 금지

0개의 댓글