1-4. 도커 이미지 만들기

황인권·2025년 2월 4일

Kubernetes

목록 보기
4/37
post-thumbnail

도커 이미지란 무엇인가?

  • 도커 이미지(컨테이너 이미지)는 앱을 실행시키기 위한 환경 설정부터 각종 파일까지 앱을 위한 모든 구성요소를 하나로 패키징 한 파일이다.
    • 앞으로 '이미지'라고 한다면, 그림 이미지 파일을 말하는 것이 아니라 컨테이너 이미지 파일을 의미한다.
  • 도커 이미지를 실행시켜서 컨테이너를 만들게 된다.
  • 도커 이미지는 아래와 같은 원리로 만들어진다.
    1. 가장 기본이 되는 빈 도커 이미지를 가져온다.
      (아무 프로그램도 설치되어 있지 않은 리눅스라고 보면 쉽다.)
    2. 여기에 앱 실행에 필요한 여러 라이브러리를 설치하고 앱 실행 파일을 복사해서 넣는다.
    3. 컨테이너가 실행되는 순간 실행될 명령어를 지정한다.(앱을 실행하는 명령어)

도커 이미지를 직접 만들어보자.

1. 각자 가지고 있는 프로젝트의 최상위 경로에 Dockerfile을 만들자.

  • Gradle 빌드 jar 파일 생성 옵션
bootJar {
	duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}

2. Dockerfile 안에 아래와 같이 입력해서 Ubuntu 24.04 버전의 리눅스 환경을 만들어준다.

FROM ubuntu:24.04
  • 이렇게 새로운 이미지를 만들 때는 특정 이미지를 바탕으로 만들게 되는데, 이런 이미지를 '베이스 이미지'라고 한다.
  • Ubuntu 24.04가 아닌 다른 버전의 리눅스도 괜찮다.
    더 편한 버전이 있다면 그걸 사용해도 무관.

3. 이제 프로젝트를 실행할 수 있는 환경을 설정할텐데, 아래 명령어를 참고해서 각자 프로젝트에 맞는 설정을 한다.

Ubuntu:24.04 와 같이 비어있는 OS 이미지가 아닌, openjdk:17-jdk-slim 과 같이 아예 어느정도 준비된 이미지도 있으니 이를 활용할 수도 있다.

  • 도커 주요 명령어

  • 자주 헷갈리는 ARG와 ENV

    • ARG : 이미지를 빌드할 때만 잠깐 사용하는 환경변수
      • 즉, 이미지 빌드가 완료되면 사라짐.
    • ENV : 이미지를 빌드할 때도 사용되지만, 빌드가 완료되고 컨테이너로 실행된 이후에도 계속 적용되는 환경변수
  • Java 프로젝트 예시

# Ubuntu 24.04 이미지를 베이스 이미지로
FROM ubuntu:24.04

# Java 17 버전 설치
RUN apt-get update && apt-get install -y openjdk-17-jdk

# 컨테이너 안에 /app 디렉토리를 만들고, 여기를 기본 경로로 지정하기
WORKDIR /app
# 호스트의 ./build/libs/spring-demo.jar 파일을 컨테이너의 ./app.jar로 복사
COPY ./build/libs/spring-demo.jar ./app.jar

# 컨테이너가 실행되면 java -jar app.jar 명령어를 실행하도록 함
CMD ["java", "-jar", "app.jar"]

# 컨테이너가 8080 포트를 사용한다는 것을 명시
EXPOSE 8080
  • python 프로젝트 예시
FROM ubuntu:24.04

RUN apt-get update && apt-get install -y python3 python3-pip python3-venv
RUN python3 -m venv /opt/venv

WORKDIR /app

COPY requirements.txt .
RUN /opt/venv/bin/pip install --upgrade pip
RUN /opt/venv/bin/pip install -r requirements.txt

COPY app.py .

CMD ["/opt/venv/bin/python", "app.py"]

EXPOSE 8000
  • Node.js 프로젝트 예시
FROM ubuntu:24.04

RUN apt-get update && apt-get install -y nodejs npm

WORKDIR /app

COPY package*.json ./
RUN npm install

COPY . .

CMD ["npm", "start"]

EXPOSE 3000

4. 이제 이 Dockerfile을 빌드해서 이미지 파일로 만들자.

docker build -t spring-demo-image .
  • -t 옵션은 이미지에 별명을 지어주는 옵션이다.
  • docker scout quickview

5. 만든 이미지 컨테이너로 실행시켜보기

  • 아래와 같이 명령어를 입력하면, 이미지가 실행되어 컨테이너가 생성된다.
docker run -p 8001:8080 spring-demo-image
  • 잘 접속되는지 브라우저로 테스트해보기

profile
inkwon Hwang

0개의 댓글