Dockerfile에서 사용될 환경변수를 지정한다.
설정한 환경변수는 ${ENV_NAME}
또는 $ENV_NAME
의 형태로 사용할 수 있다.
환경변수는 Dockerfile뿐 아니라 이미지에도 저장되므로 빌드된 이미지로 컨테이너를 생성하면 이 환경변수를 사용할 수 있다.
build 명령어를 실행할 때 추가로 입력받아 Dockerfile 내에서 사용될 변수의 값을 설정한다.
build 명령어를 실행할 때 --build-arg
옵션을 사용해 값을 입력한다.
Dockerfile에서 ARG로 설정한 변수를 ENV에서 같은 이름으로 다시 정의하면 --build-arg
옵션으로 설정한 값은 ENV로 덮어씌여진다.
컨테이너 내에서 사용될 사용자 계정의 이름이나 UID를 설정하면 그 아래의 명령어는 해당 사용자 권한으로 실행된다.
일반적으로 RUN으로 사용자의 그룹과 계정을 생성한 뒤 사용한다.
빌드된 이미지를 기반으로 하는 다른 이미지가 Dockerfile로 생성될 때 실행할 명령어를 추가한다.
이미지가 빌드될 때 수행돼야 하는 각종 명령어를 나중에 빌드될 이미지를 위해 미리 저장해 놓을 수 있다.
부모 이미지의 자식 이미지에만 적용되며, 자식 이미지는 ONBUILD 속성을 상속받지 않는다.
컨테이너가 정지될 때 사용될 시스템 콜의 종류를 지정한다.
default는 SIGTERM
으로 설정되어있다.
이미지로부터 생성된 컨테이너에서 동작하는 애플리케이션의 상태를 체크하도록 한다.
컨테이너 내부에서 동작 중인 애플리케이션의 프로세스가 종료되지는 않았으나 애플리케이션이 동작하고 있지 않은 상태를 방지하기 위해 사용할 수 있다.
상태 체크에 대한 로그는 컨테이너의 정보에 저장되므로 애플리케이션에 장애가 있을 때 해당 로그를 확인할 수 있다.
COPY는 로컬 디렉터리에서 읽어 들인 컨텍스트로부터 이미지에 파일을 복사한다.
COPY는 로컬의 파일만 이미지에 추가할 수 있고,
ADD는 외부 URL 및 tar 파일에서도 파일을 추가할 수 있다.
ADD는 이미지에 어떤 파일이 추가될 지 알 수 없기 때문에 권장하지 않는다.
둘 다 컨테이너가 시작될 때 수행할 명령을 지정한다.
ENTRYPOINT는 커맨드를 인자로 받아 사용할 수 있는 스크립트의 역할을 할 수 있다.
컨테이너에 ENTRYPOINT가 설정되면 RUN 명령어의 맨 마지막에 입력된 CMD를 인자로 삼아 명령어를 출력한다.
ENTRYPOINT가 설정되어있지 않으면 CMD에 설정된 명령어를 그대로 실행하지만,
ENTRYPOINT가 설정되면 CMD는 단지 ENTRYPOINT에 대한 인자의 기능을 한다.
커맨드와 ENTRYPOINT 둘 다 설정되지 않으면 컨테이너는 생성되지 않고 에러를 출력한다.