Dockerfile 문법정리
2022. 1. 28. 17:45ㆍDevOps/Docker & kubernetes
본인이 영어를 잘 안다면 먼저 아래의 링크를 참조하기 바란다. 공식 문서이며 dockerfile에 대한 내용을 서술해 두고 있다. 필요한 지시어를 최대한 정리해 보았다.
https://docs.docker.com/engine/reference/builder/
Dockerfile reference
docs.docker.com
# Commant
==> 파이선과 마찬가지로 #을 통해 주석 처리를 한다.
RUN echo 'test anything'
==> run이라는 도커 파일의 지시어 이며 echo~는 인자값이다.
FROM busybox
ENV FOO=/bar
WORKDIR ${FOO} # WORKDIR /bar
ADD . $FOO # ADD . /bar
COPY \$FOO /quux # COPY $FOO /quux
==> ENV를 사용하면 이미지 빌드타임과 컨테이너 런 타임에 환경변수 값을 전달할 수 있다.
FOO라는 환경변수에 bar라는 문자를 넣었으며 WORKDIR, ADD에 FOO 라는 컨테이너의 환경변수를 참조하는것을 확인할 수 있다.
FROM busybox
ARG user1
ARG buildno
# ...
==> Argumentd의 약자로서 arg지시어를 통해 도커 이미지 상에서 사용할 환경변수를 전달하는 방법이다.
값을 전달하는 방법은 2가지로서 키벨류형식을 사용해 기본값을 사용하는것과
docker build --build-arg CONT_IMG_VER=v2.0.1 .
==> 도커 빌드 명령을 실행하는 시점에 build-arg옵션을 통해서 전달할 수 있다.
이때 반드시 arg지시어를 통해서 유저를 정의해 둬야한다.
FORM node:16
==> nodejs 의 16버전을 베이스 이미지로 사용해라 라는 지시어 이다.
LABEL maintainer="Test Pack <test@test.com>
LABEL description="Test server with Node.js"
==> 이미지의 메타데이터 설정을 한다. 기본적으로 옵션값이기에 설정하지 않아도 상관은 없지만
규모가 점점 더 커지고 컨테이너를 좀 더 편하게 괸라히기 위해서는 사용하는것이 좋다.
WORKDIR /app
==> 다음에 오는 경로를 working directory 로 만들어 준다고 보면 된다.
cd 명령어를 통해 이동한다. 와 비슷한 개념이다.
COPY package*.json ./
==> src(호스트 OS 경로) dest(이미지 상의 경로) 형식을 띈다.
호스트 OS에 있는 packag로 시작해서 .json 으로 끝나는 모든 파일을 복사해서
이미지 상의 경로 즉 현재이미지(./) 상에 복사해 두어라. 라는 의미이다.
이전 단계에서 workdir를 사용했기에 /app 안에 저장이 된다.
RUN npm install
==> 도커 이미지 빌드 상에서 해당 명령어를 실행해라. 라는 의미이다.
npm install 이라는 명령을 실행한다.
COPY . .
==> 닷(.) 이 2번 찍혀있다.
현재 디렉토리 상의 모든 파일과 디렉토리를 app 디렉토리에 복사해라 라는 의미이다.
EXPOSE 8080
==> 포트 번호를 가져온다. 도커 이미지가 8080포트를 사용한다 라는 개념이다.
해당 포트를 퍼블리싱 하기 위해서는 -p 명령어를 사용하면된다.
CMD ["node", "server.js"]
==> 해당 이미지를 가지고 컨테이너를 실행할 때 어떤 명령을 실행할 것인지를 결정한다.
컨테이너의 주요 프로세스를 결정한다고 본다. 배열형태, 문자열 형태[node server.js]로도 받을 수 있다.
ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2
==> 엔트리 포인트를 정의할때는 커멘드와 마찬가지로 배열형태로도 할 수 있으며, shell형태로도 할 수 있다.
커멘드에 앞서 시작 프로그렘을 지정하는데 사용할 수 있다.
FROM ubuntu
ENTRYPOINT ["top", "-b"]
CMD ["-c"]
==> 이런 명령어가 있게 된다면 top 과 -b, -c 라는 프로세스가 같이 실행된다.
ADD [--chown=<user>:<group>] <src>... <dest>
ADD [--chown=<user>:<group>] ["<src>",... "<dest>"]
==> copy 지시어와 거의 유사하다. add는 url또한 받을 수 있다.
단 이 방법은 소스값의 변경유무를 확인할 수 없는 단점이 있다.
그렇기에 add보다는 copy를 사용하는것이 좋다.
USER <user>[:<group>]
USER <UID>[:<GID>]
==> 보안을 고려할때 반드시 사용하는 지시어로서
유저 지시어를 통해 도커 컨테이너가 사용할 기본 사용자 지정을 할 수 있으며 그룹값도 지정할 수 있다.
'DevOps > Docker & kubernetes' 카테고리의 다른 글
Docker Hub 저장소 활용하기 (0) | 2022.01.28 |
---|---|
Docker images 압축과 불러오기 (0) | 2022.01.28 |
Docker image Build(도커 이미지 빌드하기) (0) | 2022.01.28 |
Docker log 확인 및 다뤄보기 (0) | 2022.01.26 |
Docker Volume 다루기 (0) | 2022.01.24 |