Infra

DockerFile의 개념과 예시 정리

JeongKyun 2023. 1. 11.

DockerFile이란?


DockerFile은 명령이 들어있는 텍스트 파일이라고 보면된다. 물론 이 명령어들은 도커만의 고유한 것으로 도커 공식 문서에 정의되어 있다. 우리가 흔히 아는 자바나 파이썬과 같이 작성 후 컴파일러를 통해 실행되는 프로세스를 도커 파일도 동일하게 거친다.

 

도커에서도 마찬가지로 도커 클라이언트를 통해 도커파일을 실행하고 빌드 명령을 할 수 있다. build를 통해 DockerFile에 기술된대로 레이어된 파일 시스템을 생성한 다음 Docker 이미지를 사용하여 컨테이너를 만들 수 있다.

 

이 dockerfile을 이용해서 이미지를 만드는 방법과 예시는 아래를 참고바란다.

 


 

DockerFile 명령어 종류

FROM

다른 이미지에서 이미지를 만들고 싶을때 사용한다. 아무것도 없는 상태에서 처음부터 만들 수 있지만, 일반적으로 node 이미지, mongodb 이미지와 같이 만들어져있는 이미지를 기반으로 만든다. 이러한 이미지를 기준으로 삼은 다음 계층화된 파일 시스템을 사용하여 그 위에 구축하게 된다.

 

LABEL

누가 이 도커파일을 관리하는지 정의할 수있다.

 

RUN

FROM의 기반 이미지 위에서 실행될 명령어

command: RUN <명령어>

 

COPY

프로덕션으로 이동할 때 소스코드를 컨테이너에 복사하는 경우가 많은데, COPY를 사용하여 컨테이너에 소스코드를 복사할 수 있다. (= 도커 컨테이너의 경로로 파일을 복사하는 명령어)

command: COPY <복사 할 파일 경로> <컨테이너 경로>

 

ENTRYPOINT

컨테이너의 기본 진입점을 설정할 때 사용한다.

 

WORKDIR

작업 디렉토리가 무엇인지 정의할 때 사용하고, 컨테이너가 실행될 위치에 대한 컨텍스트를 설정한다. (이렇게 package.json이 있는 폴더에서 npm을 실행할 수 있게된다.)

 

EXPOSE

노출할 포트를 설정한다. 설정한 포트가 컨테이너가 내부적으로 실행되는 기본 포트로 설정된다.

command: EXPOSE <포트 번호1> .... <포트 번호5>

 

ENV

환경 변수를 설정하는 명령어

command: ENV <환경변수 이름> <값>

 

VOLUME

볼륨을 정의하고 컨테이너의 호스트 시스템에 볼륨을 저장하는 방법을 제어할 수 있다.

 


 

Dockerfile 예시

위와 같이 dockerfile을 하나 만들고 아래와 같이 작성한다.

FROM node:18.12.1-slim

COPY . ./app

WORKDIR /app

RUN npm install

EXPOSE 3000

CMD ["npm", "run", "start"]

위 명령어를 다시 한번 읽어보고 위 도커파일 내용을 해석해보면 그리 어렵지않다고 느껴질것이다. 이와같이 도커파일은 이미지를 만들고 컨테이너를 실행하는데 사용된다.

 

이 dockerfile을 build하는 방법은 아래와 같다.

docker build . -t nodeimage

만약 위 내용이 무슨 말인지 모른다면 아래 내용을 참고하기바란다.

 


 

Dockerfile 빌드/ 실행 방법

build

docker build <Dockerfile 경로> -t <생성할 이미지 이름>

- Dockerfile로 이미지를 생성한다.

 

 

run

$ docker run (<옵션>) <이미지 식별자> (<명령어>) (<인자>)

- docker run 커맨드는 상당히 여러가지 옵션을 통해 다양한 방식으로 컨테이너를 실행할 수 있도록 해준다.

- 위 포맷에서 이미지 식별자는 필수이며, 이미지ID나 레파지토리(repository):태그(tag)를 사용할 수 있다. 

    - docker를 run을 해주기 위해선 build를 통해 이미지를 먼저 생성해줘야한다.

- 옵션

    -i: 컨테이너와 상호 입출력 활성화

    -t: tty 활성화, 주로 -i 옵션과 함께 사용

    -p: 포트 지정

    -e: 환경변수를 지정하거나 값을 변경

    -d: 컨테이너를 백그라운드로 실행 

 

 

ref)

- docker run 공식홈페이지

- docker build 공식홈페이지

 

반응형

댓글

💲 많이 본 글