Python/IDE, 버전관리, 도커

Dockerfile 작성법, 문법, 인스트럭션

frcn 2022. 9. 10. 00:47
반응형

Dockerfile 이란 도커 이미지를 만드는 스크립트이다.

 

Dockerfile을 작성한 뒤, 아래와 같이 실행하면 도커 이미지가 빌드된다.

 

#기본 빌드 방식
docker build -t 이미지이름 dockerfile의_경로

#dockerfile이 존재하는 폴더에서 빌드할 경우
docker build -t 이미지이름 .

 

 

1. 주요 명령어(인스트럭션)

명령어(인스트럭션) 내용
FROM 베이스 이미지 지정
ADD 이미지에 파일이나 폴더를 추가
COPY 이미지에 파일이나 폴더를 추가
RUN 이미지 빌드할 때, 실행할 명령어 지정
CMD 컨테이너 실행할 때, 실행할 명령어 지정
ENTRYPOINT 컨테이너 실행할 때, 강제로 실행할 명령어 지정
WORKDIR RUN, CMD, ENTRYPOINT, ADD, COPY를 실행할 작업 디렉토리 지정
ENV 환경변수 정의
ARG docker build시, 입력받을 수 있는 인자 정의
LABEL 이름, 버전, 작성자를 정의
ONBUILD 이 이미지를 기반으로 다른 이미지를 만들 때, 실행될 명령어
EXPOSE 이미지가 사용할 포트를 설정
VOLUME 데이터를 저장할 경로를 설정
SHELL 빌드 시 사용할 쉘을 설정
USER RUN, CMD, ENTRYPOINT를 실행할 사용자 그룹을 설정
STOPSIGNAL docker stop을 했을 때, 컨테이너에서 실행 중인 프로그램에 전달한 명령어를 설정
HEALTHCHECK 컨테이너 헬스체크 방법을 커스터마이징

자주 사용하는 명령어에 굵은 색으로 체크해놨다.

 

- ADD와 COPY의 차이점.

ADD는 파일을 복사할 뿐만 아니라, 해당 파일이 압축 파일이면 압축을 해제하는 등의 추가적인 활동을 한다.

COPY는 파일을 복사만 한다.

따라서, 명시적으로 하기 위해서 COPY를 사용하는 편이 좋다고 한다.

 

- RUN CMD ENTRYPOINT의 차이점

RUN은 이미지를 빌드하면서 실행될 명령어이다. 베이스 이미지에 추가적으로 설치해야하는 점이 있으면 RUN으로 해줘야 빌드되면서 설치된 채로 이미지로 빌드된다.

CMD는 빌드된 이미지를 컨테이너로 실행하면서 실행될 명령어를 지정하는 것이다.

ENTRYPOINT는 CMD와 같지만 강제로 실행된다는 점에서 다르다. (사실 둘이 유사하다)

 

 

2. 예시

#베이스이미지 지정
FROM node:12-alpine

#추가적으로 python2 g++ make를 설치
RUN apk add --no-cache python2 g++ make

#작업디렉토리를 /app으로 변경
WORKDIR /app

#현재 폴더의 모든 파일들을 도커이미지에 복사
COPY . .

#해당 dependency를 설치
RUN yarn install --production

#/app 폴더에서 cmd명령어 node src/index.js를 실행. 
CMD ["node", "src/index.js"]

#포트는 3000으로 지정
EXPOSE 3000

#출처 : Docker docs

 

 

반응형