Docker(4)

별빛사막·2025년 2월 27일
0

docker

목록 보기
5/7
post-thumbnail

1. Java에서 Build와 실행 파일(JAR)의 차이

1️⃣ 빌드(Build)란?

  • 빌드(Build).java 파일을 컴파일하여 .class(바이트코드) 파일로 변환하는 과정이다.
  • javac(Java Compiler)를 사용하여 .java 파일을 .class 파일로 변환한다.

컴파일 예시

javac Test.java
  • 위 명령을 실행하면 Test.class 파일이 생성된다.

2️⃣ 실행 파일(JAR, Java Archive)

  • JAR(Java ARchive) 파일은 여러 개의 .class 파일과 라이브러리를 하나의 압축 파일로 패키징한 것이다.
  • .class 파일만으로 실행하기 불편하기 때문에, JAR 파일로 패키징하여 실행을 쉽게 만든다.

JAR 파일 생성 예시

jar cf Test.jar Test.class

또는 특정 디렉터리(build/) 안의 파일들을 JAR로 묶는 경우:

jar cf Test.jar -C build/ .
  • 위 명령을 실행하면 Test.jar 파일이 생성된다.

3️⃣ JAR 파일 실행

  • JAR 파일을 실행하려면 java -jar 명령어를 사용해야 한다.

JAR 실행 예시

java -jar Test.jar

📝 요약

단계개념예시 명령어
빌드 (컴파일).java 파일을 .class 파일로 변환하는 과정javac Test.java
패키징 (JAR 생성).class 파일을 JAR로 묶는 과정jar cf Test.jar Test.class
실행 (JAR 실행)JAR 파일을 실행하는 과정java -jar Test.jar

즉, 빌드는 .java 파일을 .class 파일로 변환하는 과정이며, JAR 파일은 실행 가능한 형태로 패키징한 것이다.


2. 바인드 마운트(Bind Mount)와 볼륨(Volume)의 차이

Docker에서는 컨테이너와 호스트 간 데이터 공유를 위해 바인드 마운트(Bind Mount)볼륨(Volume) 두 가지 방식을 제공한다.
둘 다 데이터를 컨테이너와 공유할 수 있도록 하지만, 동작 방식과 사용 목적이 다르다.

✅ 1. 바인드 마운트(Bind Mount)

개념

  • 바인드 마운트는 호스트의 특정 디렉터리를 컨테이너 내부로 연결하는 방식이다.
  • 컨테이너가 호스트의 파일 시스템을 직접 접근하여 읽고 쓸 수 있다.
  • 컨테이너가 종료되어도 호스트의 원본 파일은 그대로 유지된다.
  • 컨테이너와 호스트 간 파일 동기화가 즉시 이루어진다.

사용 예시

docker run -d --name bind-container \
  -v /home/user/app:/app \
  nginx
  • 호스트의 /home/user/app 디렉터리를 컨테이너의 /app에 마운트한다.
  • 컨테이너 내부에서 /app 경로를 수정하면 호스트의 /home/user/app도 함께 변경된다.

✅ 2. 볼륨(Volume)

개념

  • 볼륨은 Docker가 자체적으로 관리하는 저장소를 사용한다.
  • 컨테이너와 독립적으로 데이터가 저장되며, 여러 컨테이너 간에 공유할 수 있다.
  • Docker가 /var/lib/docker/volumes/ 디렉터리에서 데이터를 관리한다.
  • 컨테이너가 삭제되어도 볼륨은 유지되며, 데이터가 보존된다.

사용 예시

docker volume create my-volume

docker run -d --name volume-container \
  -v my-volume:/app \
  nginx
  • my-volume이라는 Docker 볼륨을 생성하고 컨테이너의 /app에 마운트한다.

  • 컨테이너가 종료되더라도 볼륨 데이터는 유지된다.

  • 볼륨을 삭제하려면 명시적으로 삭제해야 한다:

    docker volume rm my-volume

✅ 3. 바인드 마운트 vs 볼륨 비교

구분바인드 마운트 (Bind Mount)볼륨 (Volume)
저장 위치호스트의 특정 디렉터리Docker가 관리하는 /var/lib/docker/volumes/
데이터 유지컨테이너 삭제 후에도 유지 (호스트 파일 유지됨)컨테이너 삭제 후에도 유지 (볼륨 삭제 전까지)
독립성호스트 파일 시스템과 강하게 결합Docker가 관리, 컨테이너와 독립적
사용 목적로컬 개발 환경, 소스 코드 공유데이터베이스, 로그 저장, 여러 컨테이너 간 데이터 공유
성능호스트 파일 시스템에 의존 → 속도 차이가 있음Docker 내부에서 최적화되어 빠름

✅ 4. 바인드 마운트와 볼륨의 사용 사례

바인드 마운트를 사용할 경우

  • 개발 환경에서 호스트 파일을 컨테이너와 동기화해야 할 때
  • 호스트의 소스 코드 변경 사항이 컨테이너에 즉시 반영된다.
  • 호스트의 특정 파일을 컨테이너에서 직접 사용해야 할 때

볼륨을 사용할 경우

  • 데이터베이스 컨테이너에서 데이터를 영구 저장해야 할 때
  • 컨테이너가 삭제되더라도 데이터를 유지하고 싶은 경우
  • 여러 컨테이너에서 같은 데이터를 공유해야 할 경우

운영 환경에서는 일반적으로 볼륨을 사용하며,
개발 환경에서는 바인드 마운트를 활용하는 것이 편리하다.

profile
조금씩 매일 성장하자

0개의 댓글