Dockerfile은 컨테이너를 빌드하기 위한 설정 파일로, 컨테이너 이미지를 자동으로 생성할 수 있도록 도와준다.
Dockerfile은 텍스트 파일로 작성되며, 컨테이너 이미지를 생성하는 데 필요한 명령어들을 순서대로 기술한다.
각 명령어는 기본 이미지(부모 이미지)에서 변경 사항을 적용하고, 새로운 레이어를 생성하여 최종 이미지를 만든다.
다음은 Dockerfile에서 사용되는 일반적인 구문들이다.
구문 | 설명 |
---|---|
FROM | 기본이 되는 이미지를 지정합니다. |
RUN | 명령어를 실행하여 패키지를 설치하거나 설정을 변경합니다. |
COPY | 파일이나 디렉토리를 컨테이너로 복사합니다. |
ADD | COPY와 비슷하지만, 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 이미지명 .
을 입력 해주면 된다.
도커의 이미지 레이어 개념은 도커 컨테이너 이미지를 구성하는 데 중요한 개념 중 하나입니다. 도커 이미지는 여러 개의 레이어로 구성되어 있으며, 이 레이어들은 계층적으로 쌓이는 구조를 가집니다. 이미지 레이어는 파일 시스템 변경 사항을 표현하며, 이미지를 빌드하고 관리하는 데 중요한 역할을 합니다.
다음은 도커 이미지 레이어에 대한 주요 특징과 개념입니다:
이미지 레이어의 이러한 특징은 도커의 가벼운 이미지 관리와 배포를 가능하게 하며, 빠른 이미지 빌드 및 배포를 지원합니다. 또한 이러한 레이어는 도커 이미지의 버전 관리와 업데이트 시에도 유용하게 활용된다