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)
'Infra' 카테고리의 다른 글
Docker의 개념과 사용 이유에 대해서 (+ 라이프사이클) (0) | 2022.12.02 |
---|---|
[CI/CD] Github Actions란? (개념/ 용어 정리) (1) | 2022.11.14 |
댓글