Docker

[Docker] Dockerfile에 대해 (코딩온)

효진인데요 2023. 12. 28. 19:15

 

 

복습

 

Docker란?

컨테이너 기반 가상화 기술을 제공하는 플랫폼

애플리케이션의 실행 환경을 격리된 컨테이너에 패키징할 수 있음

 

Docker 이미지?

컨테이너를 생성하는데 사용되는 템플릿

애플리케이션과 그 종속성들을 포함

 

 

 

 

Dockerfile?

  • Docker Image를 생성하기 위한 설정 파일
  • 주로 명령어들의 순차적인 리스트로 이루어짐
  • Dockerfile로 컨테이너에 필요한 이미지, 런타임, 라이브러리, 소스 코드 설정 가능
  • Dockerfile을 해석하여 이미지가 어떻게 구성되어 있는지 파악 가능

 

 

Dockerfile 특징

텍스트 기반 스크립트 이해하고 관리하기 쉬움
이미지 기반 빌드 지원 컨테이너 크기 최소화 가능
이미지 재사용 지원 동일 애플리케이션을 여러 환경에서 배포하기 용이

 

 

 

Dockerfile 장단점

장점 단점
애플리케이션의 배포 및 관리 단순화 Dockerfile을 작성하고 관리하는데에 시간이 소요
애플리케이션의 일관성 보장
애플리케이션의 보안 강화 Dockerfile이 복잡해질 수 있음
이미지 생성 과정 기록
컨테이너 (이미지)가 특정 행동을 수행하도록 함

 

 

 

 

Dockerfile 명령어

 

[코딩온] Docker > Dockerfile의 모든 것

 

FROM  컨테이너의 기본 이미지 지정
항상 Dockerfile의 맨 첫 줄에 위치해야 함
RUN 컨테이너를 실행하기 전 실행할 명령어 지정
CMD 컨테이너가 시작될 때 실행할 명령어 지정
EXPOSE 컨테이너의 외부 포트 지정
LABEL 이미지의 메타데이터를 설정
WORKDIR 컨테이너의 작업 디렉토리 지정
COPY 컨테이너에 파일 복사
ADD 컨테이너에 파일 추가
ENTRYPOINT 컨테이너 실행 시 고정적으로 실행되는 스크립트 혹은 명령어
ENV 컨테이너의 환경 변수 설정
VOLUME 컨테이너의 사용자 지정
USER 컨테이너의 볼륨 지정

 

 

 

 

Dockerfile 실행

 

 docker build -t <이미지 이름> .     Dockerfile 실행,

 docker images     build 명령어로 이미지가 잘 생성되었는지 확인할 수 있다.

 

 

 


 

 

 

Dockerfile 예제

 

[코딩온] Docker > Dockerfile의 모든 것

 

 

위에 간단한 Dockerfile 코드가 있다.

각 줄을 살펴보자면 아래와 같다.

 

FROM ubuntu:latest 베이즈 이미지로서 Ubuntu 최신 버전 사용을 선언
Docker 이미지를 빌드할 때 이 이미지를 기반으로 함
RUN apt-get update && apt-get install -y nginx 이미지를 빌드할 때 실행되는 명령어
패키지 리스트를 최신 상태로 업데이트
Nginx 웹 서버 설치
(-y : 설치 도중 나타나는 확인 프롬프트에 자동으로 Yes 응답)
CMD ["nginx", "-g", "daemon off;"] 컨테이너가 시작될 때 실행되는 기본 명령어
Nginx를 백그라운드에서 동작하지 않도록 하기 위해 명령어 실행
Nginx를 daemon이 아닌 포그라운드에서 실행하도록 설정
➡️ Docker 컨테이너가 실행되는 동안 Nginx 프로세스가 계속 활성화 된 상태 유지

 

 

➡️포그라운드 (Foreground)

  • 컴퓨터 운영체제에서 프로제스가 사용자와 상호작용하며 실행되는 모드
  • 프로세스가 사용자의 입력을 받고 출력을 생성
  • 사용자와 직접 상호작용

 

➡️Daemon 모드

  • Nginx의 경우, 기본적으로 데몬 (Daemon) 모드로 실행되어 백그라운드에서 동작
  • 프로세스가 백그라운드로 이동하고, 사용자와의 직접적인 상호작용이 없게 됨

 

 

 

 

 

위 Dockerfile을 사용해 이미지로 빌드하려면 아래와 같은 명령어를 실행하면 된다.

 

[코딩온] Docker > Dockerfile의 모든 것

 

 

해당 명령어는 현재 디렉토리의 Dockerfile을 사용해 nginx 이미지를 빌드한다.

 

 

 

 

728x90