docker build 명령어를 통해 이미지를 빌드하게 되면, default로 Dockerfile이라는 이름의 파일을 찾아서 해당 파일 내용에 따라 이미지를 생성하기 때문이다.
docker build 시에 -f 옵션을 추가로 사용하여 해당 이름을 알려준다면 사용이 가능하긴 하다.FROM - 베이스 이미지(및 태그) 지정
LABEL - 버전 정보, 작성자, 날짜와 같은 설명을 작성하기 위해 사용한다.
CMD - 컨테이너가 시작할때 실행할 쉘 명령을 지정. RUN은 이미지 생성시 실행되는 반면 CMD는 컨테이너를 시작할때 실행된다는 차이가 있다.
CMD ["python", "[app.py](<http://app.py>)"] ~ 배열 형태로 띄어쓰기를 구분하거나 CMD python app.py 처럼 기존 쉘 명령처럼 작성할 수도 있다.RUN - 이미지 생성 시 쉘 명령을 지정한다. e.g. RUN [’apt-get’, ‘install’, ‘nginx’] 새로운 이미지 layer를 만드는 역할을 한다고 볼 수 있다.
ENTRYPOINT - CMD와 비슷하게 컨테이너가 시작할때 실행할 쉘 명령을 지정한다고 한다. 차이점은 docker run 커맨드 실행시에 별도 명령어를 추가할 경우, CMD 명령은 docker run에 의해 덮어씌워지는 반면, ENTRYPOINT 는 그렇지 않다고 한다. 섹션 7 두번째 영상 후반부 참고.
Dockerfile Entrypoint 와 CMD의 올바른 사용 방법
또는 여기 참고
EXPOSE - 컨테이너 외부에 오픈할 포트를 설정한다. e.g. EXPORT 8080
ENV - 컨테이너 내부에서 사용할 환경 변수를 지정한다 e.g. ENV PATH /usr/bin:$PATH
WORKDIR - 컨테이너의 작업 디렉토리를 직접 명시한다. 명시하지 않을 경우 베이스 이미지 별로 다를 수 있는 default path를 사용한다.
COPY - 파일 또는 디렉토리를 컨테이너에 복사한다. ADD 와 달리 URL은 지정할 수 없으며, 압축 파일을 자동으로 풀어주지는 않는다. e.g. COPY test.sh/root/test.sh
COPY ./2021_DEV /usr/local/apache2/htdocs
./2021_DEV 디렉토리 내용을 컨테이너의 /usr/local/apache2/htdocs 디렉토리에 복사하겠다는 의미다.ADD - COPY와 유사하나 주로 COPY를 사용한다고 함. COPY와 다른점은 다음과 같다.
SHELL - 쉘 프로그램 지정 지시어 이지만 CMD 등으로 대체 가능ARG - dockerfile 내에서 필요한 변수 설정. 이미지/컨테이너 내에서 사용하는 환경 변수를 설정하는 ENV와 달리, dockerfile 스크립트 작성일 위해 필요한 변수를 설정함