Study/Docker & Kubernetes
Dockerfile 명령어
Bluesky_
2021. 7. 2. 00:20
반응형
명령어는 대소문자를 가리지 않으나 보통 대문자로 사용함
https://docs.docker.com/engine/reference/builder/
Dockerfile reference
docs.docker.com
아래의 경우 docker 실행 가능한 jenkins 이미지를 만드는 Dockerfile이다.
FROM jenkins/jenkins:jdk11
MAINTAINER bluesky <bluesky@email.net>
USER root
RUN curl -fsSL https://get.docker.com -o get-docker.sh \
&& sh get-docker.sh
RUN usermod -aG docker jenkins
USER jenkins
위 Dockerfile은 다음과 같이 수행된다.
- jdk11 버전의 jenkins image를 가져온 후 (해당 docker image의 유저/그룹 권한은 jenkins/jenkins)
- root user 권한으로
- docker를 설치하고
- docker를 설치할 때 사용된 docker 유저를 jenkins group에 추가하는 작업을 실행한 후 jenkins user로 변경하는 작업을 진행한다.
이때 사용되는 Dockerfile 명령어의 역할은 다음과 같다.
- FROM : 생성할 image의 base가 될 image. 1개 이상 반드시 필요하고 N개 사용도 가능
- MAINTAINER (deprecated) : image를 생성한 개발자 정보, LABEL로 교체해 표현할 수 있음
- LABEL : image에 metadata를 추가, "key:value"의 형태로 저장됨, inspect 명령 사용 시 확인할 수 있는 정보
- RUN : image를 만들기 위해 container 내부에서 명령을 실행.
- USER : 해당 설정 이후 명령어는 해당 사용자 권한으로 실행.
이외에 많이 쓰이는 명령어들은 다음과 같다.
- EXPOSE : 노출할 port를 설정. 다만 명시만 할 뿐이므로 컨테이너 생성 시 -P flag와 함께 사용됨
- CMD : container가 시작될 때마다 실행할 명령어를 설정. Dockerfile당 한 번만 사용
- ENTRYPOINT : CMD와 동일하게 container가 시작될 때 수행할 명령을 설정.
cmd에서 --entrypoint로 parameter를 받아 사용할 수 있는 스크립트의 역할을 할 수 있음 - COPY : local directory에서 읽어 들인 context로부터 image에 file을 복사
- ADD : file을 추가
COPY는 local의 file만 image에 추가할 수 있지만 ADD는 외부 URL 및 tar file에서도 파일을 추가할 수 있음 - WORKDIR : container 내에서 directory 이동 (cd 명령어라고 생각하면 됨)
- ENV : Dockerfile에서 사용될 환경 변수를 지정. 빌드 시 run 명령어에서 -e 옵션을 통해 재선언이 가능함
- VOLUME : 호스트와 공유할 container 내부의 directory 설정
- ARG : 빌드 시 추가로 입력을 받아 Dockerfile 내에서 사용될 변수의 값을 설정. ENV와 마찬가지로 ${}로 호출하여 사용한다. --build-arg 옵션으로 설정함.
- ONBUILD : 빌드된 이미지를 기반으로 하는 다른 이미지가 Dockerfile로 생성될 때 실행할 명령어를 추가
- STOPSIGNAL : container가 정지될 때 사용될 시스템 콜의 종류를 지정. default는 SIGTERM, 빌드 시 --stop-signal 옵션으로 설정할 수 있음
- HEALTHCHECK : container에서 동작하는 application의 상태를 체크하도록 설정
FROM nginx RUN apt-get update -y && apt-get install curl -y HEALTHCHECK : --interval=1m --timeout=3s --retries=3 CMD curl -f http://localhost || exit 1
- SHELL : 사용하고자 하는 shell을 명시. SHELL을 지정하지 않으면 RUN 사용 시 window와 linux가 각각의 환경에 맞춰 명령어가 다르게 수행됨
반응형