Docker

Dockerfile 기본 문법

25G 2023. 8. 7. 13:16

Dockerfile 명령

  • FROM :베이스 이미지 지정명령
  • LABEL : 버전정보, 작성자와 같은 이미지설명을 작성하기 위한 명령
    • 도커파일의 기능적인 영향을 주지는 않는다.
  • CMD : docker컨테이너가 시작할때, 실행하는 쉘 명령을지지하는 명령 ,RUN과 비슷하지만 RUN은 이미지 작성시 실행하는 명령이고, CMD는 컨테이너를 시작할때 실행하는 명령임
    • dockerfile에서 cmd명령은 파일당 하나만 할 수 있다.
  • RUN: 쉘 명령을 실행하는 명령 ,RUN은 이미지 작성시 실행되며, 일종의 새로운 이미지 layer를 만드는 역할을 함
  • ENTRYPOINT: docker 컨테이너가 시작할대, 실행하는 쉘명령을 지정하는 명령 ,CMD명령은 해당명령으로 덮어씌워짐, ENTRYPOINT로 지정한 명령은 docker run커멘드 실행시 함께 넣어진 별도 명령어가 있더라도ㅡ 덮어씌워지지 않고 실행됨 반드시 실행돼야하는 명령어 기입한다.
  • EXPOSE : docker컨테이너 외부에 오픈할 포츠 설정
  • ENV : docker 컨테이너 내부에서 사용할 환경 변수 지정
  • WORKDIR : docker 컨테이너에서의 작업 디렉토리 설정
  • COPY : 파일또는 디렉토리를 docker컨테이너에 복사. ADD와 달리URL은 지정할 수 없으며, 압축 파일을 자동으로 풀어주진 않는다.

Dockerfile build

docker build 옵션 Dockerfile경로

  • 옵션
  • t : 이미지이름 설정
  • f : 이미지 빌드시 디폴트로 Dockerfile파일명으로 된 파일이 아닌 Dockerflie을 빌드하고 싶을때 사용하는 옵션
    ex) -f Dockerfile_test2
  • -pull FORM으로 지정된 이미지는 한번 다운로드 받으면, 이미지생성시마다 새로 다운로드 받지않고 다운로드 받은 이미지를 사용함, 해당옵션은 이미지 생성시 마다 새로 다운로드를 받는 옵션 ex)--pull=true

COPY

copy라는 명령은 첫번째 인자에있는 호스트pc 경로의 디렉토리및 파일을 docker컨테이너 내부에 어떠한 경로에 복사하게 하는 옵션 VOLUME과는 많이 다르다.

VOLUME

Dockerfile에서의 VOLUME명령은 docker run -v옵션과는 다른 명령이다 컨테이너 내부의 특정 폴더를 위한 볼륨을 생성하기 위해 사용

이미지 조사하기 과 LABLE

docker inspect 이미지id
이때 label이라는 명령은 주석과는달리 inspect를 사용해서 이미지를 조사할때도 나오기때문에 주석과는 다르다.

CMD

  • 세가지 형태로 CMD명령을 작성할 수 있다
    • 명령어, 인자를 리스트처럼 작성하는 형태
      CMD ["/bin/sh","-c","echo","Hello"]
    • ENTRYPOINT명령어에 인자를 리스트처럼 작성하여 넘겨주는 형태
      CMD ["param1","param2"....]
    • 쉘 명령처럼 작성하는 형태
      CMD commend praram1 param2

CMD명령은 하나의 Dockerfile에 하나만 설정 할 수 있다.
그리고 베이스이미지에 이미 명시돼 있는 CMD명령어가 있는경우에 CMD명령을 하면 기존에 있던 베이스이미지의 CMD이미지위에 덮어씌어지기때문에 CMD명령어는 주의해서 써야한다.

docker logs 컨테이너ID

컨테이너 에러 또는 출력결과 확인하는 명령어 입니다. 이때 컨테이너 내부에 기록돼 있는 로그를 확인 하는 명령어지만 컨테이너에서 표준출력STDOUT이나 표준에러STERR 로 표시돼 있다. 커스텀 돼 있는 경우도 있다.

ENTRYPOINT

  • ENTRYPOINT는 docker run 시에 함께 넣어지는 CMD 명령에 덮어씌워 지지 않고 반드시 실행해야 하는 명령을 기입할 때 사용
    • 이때 docker run 시 함께 넣어지는 명령은 ENTRYPOIN에 작성된 명령의 인자로 넣어지게 됨
    • 따라서 ENTRYPOINT에 컨테이너 실행시, 반드시 실행되야 하는 명령을 넣고 , 별도로 각 컨테이너 생성시 필요한 인자는 docker run에 넣는 식으로 활용 하기도 함
  • CMD와 ENTRYPOINT가 같이 있으면 ENTRYPOINT 명령어가 먼저 실행되고 그 뒤에 ENTRYPOINT의 인자값으로 CMD가 실행됩니다*

RUN

  • docker는 이미지 생성시, 각 단계를 layer로 나누어 작성함
  • 이를 통해 특정 당계변경시, 전체 이미지를 다시 다운로드 받지 않아도 됩니다.
    • RUN명령은 이미지 생성시, 일종의 layer를 만들 수 있는 명령으로 , 보통 베이스 이미지에 패키지를 설치하여 새로운 이미지를 만들때 사용한다.

EXPOSE

docker run -p 옵션과는 달리 이 이미지를 사용할때 해당 이미지의 특정 포트를 열어놔서 다른 컨테이너에서 접근하게 하고싶을때 사용
쉽게 말해서 빌드해서 이미지를 만들때 그이미지에 접근할 수 있도록 port를 열어 놓는 것이다.하지만 기본 베이스이미지에 다 설정이 돼 있기때문에 보통 docker run -p 옵션을 많이 쓴다.

ENV

컨테이너 내부에 환경변수를 설정하는 명령어
설정한 환경 변수는 RUN,CMD,ENTRYPOINT 명령에도 적용됨

WORKDIR

  • RUN,CMD,ENTRYPOINT 명령이 실행될 디렉토리 설정

그외 명령어

ADD: COPY와 유사하지만 자동으로 압축을 풀어줌
SHELL : 쉘프로그램 지정 명령이지만 CMD등을사용해서 지정하기때문에 잘안사용합니다.
ARG : dockerfile 내에서 필요한 변수 설정, ENV와 달리 스크립트 작성을 위한 변수를 설정
USER : docker 이미지 및 컨테이너에서 작업을 하는 사용자 ID를 지정
ONBULD: 생성한 이미지를 기반으로, 새로운 이미지를 생성시 실행하는 명령을 지정

'Docker' 카테고리의 다른 글

docker 주요명령어  (0) 2023.08.07
docker run 옵션 /alpine?  (0) 2023.08.07
docker 컨테이너와 이미지 조사하는법  (0) 2023.08.07
도커 엔진 기본 개념  (0) 2023.08.07
도커 이미지 기본개념  (0) 2023.08.07