본문 바로가기
devops

Docker DockerFile

by Redking

Docker를 사용하게 된다면 DockerFile을 필수적으로 작성하게 된다. DockerFile 내에는 Docker Image를 어떻게 구성할지에 대해 작성할 수 있고 Dockerfile에서 구성한 설정들로 자동으로 DockerImage가 작성됩니다.

 

DockerFile

DockerFile은 텍스트 형식의 파일로 기본적으로 이름은 DockerFile로 설정하지만 특별한 경우에 따라 다른 이름으로 설정해서 사용이 가능합니다. 다만 이렇게 사용할 경우에 다르게 설정한 이름을 명시해줘야 합니다.

 

DockerFile에 작성 가능한 설정들

  • FROM : Docker Base Image (기반이 되는 이미지, <이미지 이름>:<태그> 형식으로 설정)
  • MAINTAINER : 메인테이너 정보 (작성자 정보)
  • RUN : Shell Script 또는 명령을 실행
  • CMD : 컨테이너가 실행되었을 때 명령이 실행
  • LABEL : 라벨 작성 (docker inspect 명령으로 label 확인할 수 있습니다.)
  • EXPOSE : 호스트와 연결할 포트 번호를 설정한다.
  • ENV : 환경변수 설정
  • ADD : 파일 / 디렉터리 추가
  • COPY : 파일 복사
  • ENTRYPOINT : 컨테이너가 시작되었을 때 스크립트 실행
  • VOLUME : 볼륨 마운트
  • USER : 명령 실행할 사용자 권한 지정
  • WORKDIR : "RUN", "CMD", "ENTRYPOINT" 명령이 실행될 작업 디렉터리
  • ARG : Dockerfile 내부 변수
  • ONBUILD : 다른 이미지의 Base Image로 쓰이는 경우 실행될 명령 수행
  • SHELL : Default Shell 지정

DockerFile Example

FROM python:3.6

# Copy Source Codes
COPY . /project
WORKDIR /project

# Install Python Packages
RUN pip3 install --upgrade pip && pip3 install -r requirements.txt

# Keep Container Running
CMD ["tail", "-f", "/dev/null"]
 

코드 해석

  1. FROM python:3.6 "공식 이미지를 불러와서 사용하게되고 버전을 명시하지 않는 경우 가장 최근 버전을 불러오게 됩니다. 저는 3.6 버전을 명시하였기 때문에 3.6 버전 이미지가 불러집니다."
  2. COPY . /project ". /project 경로에 있는 폴더를 복사"
  3. WORKDIR /project "/project 경로에 있는 폴더에서 RUN, CMD, ENTRYPOINT 명령을 실행"
  4. RUN pip3 install --upgrade pip && pip3 install -r requirements.txt "pip를 업그레이드 하고, requirements.txt 파일에 명시되어 있는 모듈들을 설치"
  5. CMD ["tail", "-f", "/dev/null"] "컨테이너가 실행 되었을 때 tail, -f, /dev/null 명령어 실행"

tail -f /dev/null 커맨드

리눅스 운영체제에서 사용되는 tail명령은 파일의 마지막 부분을 읽는 명령어입니다. 이 명령어에서 -f 옵션은 follow를 나타내는 것으로 계속해서 파일의 마지막을 읽어들이는 명령입니다. 즉, 읽고 있는 파일이 계속해서 늘어나면 tail -f 옵션으로 마지막을 업데이트하며 볼 수 있습니다. 주로 로그 파일등을 계속해서 업데이트하며 볼 때 많이 사용합니다. 이 명령을 null device file에 적용함으로서, 계속해서 null device file을 따라서 읽는 명령어를 실행하는 것입니다. 위의 도커 설정은 도커 컨테이너가 계속해서 null device file을 읽는 일을 entrypoint 커맨드로 설정함으로서, 컨테이너가 종료되지 않게끔 할 수 있는 것 입니다. (작성하지 않을 경우 Docker가 꺼질 수도 있습니다.)

 

'devops' 카테고리의 다른 글

Docker Docker Compose file 열어보기  (0) 2021.12.16
Docker로 nodejs 배포하기  (0) 2021.10.28
Jira 쓰는 개발자의 Git 사용방법  (0) 2021.03.29

댓글