[Docker] Dockerfile을 활용한 자체 이미지 빌드

Kim Hyen Su·2023년 10월 24일
0

🐋Docker

목록 보기
3/7
post-thumbnail

🚢 Dockrfile을 활용한 자체 이미지 빌드

Dockerfile은 컨테이너를 빌드하기 위한 설정 파일로, 컨테이너 이미지를 자동으로 생성할 수 있도록 도와준다.

Dockerfile은 텍스트 파일로 작성되며, 컨테이너 이미지를 생성하는 데 필요한 명령어들을 순서대로 기술한다.

각 명령어는 기본 이미지(부모 이미지)에서 변경 사항을 적용하고, 새로운 레이어를 생성하여 최종 이미지를 만든다.

Dockerfile 명령어

다음은 Dockerfile에서 사용되는 일반적인 구문들이다.

구문설명
FROM기본이 되는 이미지를 지정합니다.
RUN명령어를 실행하여 패키지를 설치하거나 설정을 변경합니다.
COPY파일이나 디렉토리를 컨테이너로 복사합니다.
ADDCOPY와 비슷하지만, URL로부터 파일을 다운로드할 수 있습니다.
WORKDIR작업 디렉토리를 설정합니다.
ENV환경 변수를 설정합니다.
EXPOSE포트를 외부에 노출합니다.
CMD컨테이너가 시작될 때 실행되는 명령어를 설정합니다.
ENTRYPOINT컨테이너가 시작될 때 실행되는 명령어를 설정합니다.
VOLUME볼륨을 마운트할 디렉토리를 지정합니다.
USER명령을 실행할 사용자를 지정합니다.
ARG빌드 시에만 사용되는 인자를 정의합니다.

위 구문들은 Dockerfile에서 자주 사용되는 명령어이다.

이러한 구문들을 조합하여 원하는 환경을 구성할 수 잇다.

예를 들어, 간단한 Node.js 애플리케이션을 위한 Dockerfile을 작성한다면 다음과 같다.

# 기본 이미지로부터 시작
FROM node

# 작업 디렉토리 설정
WORKDIR /usr/src/app

# 애플리케이션 소스코드 복사
COPY package*.json ./

# 패키지 설치
RUN npm install

# 노출 포트번호
EXPOSE 80

# 소스코드 복사
COPY . .

# 애플리케이션 실행
CMD [ "node", "app.js" ]

위 Dockerfile은 Node.js 14 이미지를 기반으로 시작하며, 작업 디렉토리를 설정하고 필요한 파일들을 복사하여 애플리케이션을 실행한다.

이 Dockerfile을 이용하여 docker build 명령어를 사용하여 컨테이너 이미지를 빌드할 수 있다.

생성된 이미지에 접근하기 위해서는 -p 포트번호:80 을 붙여야 본체 컴퓨터에서 해당 포트번호로 접근이 가능하다.

FROM eclipse-temurin:17
ARG JAR_FILE=*.jar
COPY build/libs/discovery-server-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

스프링 프로젝트 빌드 시 위와 같이 작성한 뒤 터미널 창으로 돌아와서

./gradlew clean build 를 해준다.

그리고 docker build -t 이미지명 . 을 입력 해주면 된다.

도커 이미지 레이어

도커의 이미지 레이어 개념은 도커 컨테이너 이미지를 구성하는 데 중요한 개념 중 하나입니다. 도커 이미지는 여러 개의 레이어로 구성되어 있으며, 이 레이어들은 계층적으로 쌓이는 구조를 가집니다. 이미지 레이어는 파일 시스템 변경 사항을 표현하며, 이미지를 빌드하고 관리하는 데 중요한 역할을 합니다.

다음은 도커 이미지 레이어에 대한 주요 특징과 개념입니다:

  1. 불변성 (Immutable): 이미지 레이어는 변경 불가능합니다. 한 번 생성되면 수정할 수 없으며, 변경 사항이 필요한 경우 새로운 레이어를 생성합니다. 이러한 불변성은 이미지 버전 관리와 이미지 공유를 용이하게 합니다.
  2. 캐싱 (Caching): 도커는 이미지 빌드 시에 각 레이어를 캐싱하여 동일한 명령어를 실행할 때 레이어를 다시 생성하지 않습니다. 이를 통해 이미지 빌드 속도를 향상시키고, 중복 명령어를 최소화할 수 있습니다.
  3. 레이어 스택 (Layered Stack): 이미지는 여러 레이어로 구성되며, 각 레이어는 변경 사항을 표현합니다. 이러한 레이어들은 하나의 이미지로 스택되어서 컨테이너를 생성하게 됩니다. 이 스택 구조를 통해 이미지의 재사용성과 공유가 가능해집니다.
  4. 최소한의 변경: 도커 이미지 빌드 시에는 최소한의 변경만 수행하도록 최적화되어 있습니다. 변경된 부분만 새로운 레이어로 추가되므로 이미지 크기를 최소화하고 이미지 빌드 시간을 단축합니다.
  5. 부모 이미지 (Base Image): 이미지 레이어는 부모 이미지에서 파생됩니다. 새로운 레이어는 이전 레이어와 다른 변경 사항만을 포함하며, 부모 이미지는 이전 레이어의 일부이며 레이어 스택을 형성합니다.
  6. 레이어 순서: Dockerfile에서 명령어가 순서대로 실행되면, 그에 따라 레이어도 생성됩니다. 레이어는 Dockerfile에서 명령어가 실행된 순서대로 스택에 쌓이게 됩니다.

이미지 레이어의 이러한 특징은 도커의 가벼운 이미지 관리와 배포를 가능하게 하며, 빠른 이미지 빌드 및 배포를 지원합니다. 또한 이러한 레이어는 도커 이미지의 버전 관리와 업데이트 시에도 유용하게 활용된다

profile
백엔드 서버 엔지니어

0개의 댓글

관련 채용 정보