트러블 슈팅 도커 - 도커 용어 정리

용어 정리

이 책을 보다보면 이러한 용어가 많이 나오는데 이 용어에 대해서 먼저 정리를 해야될 것 같다.

인스트럭션
  • 컴퓨터가 어느 정보를 가지고 어떠한 처리를 하는가를 나타낸다.

FROM

  • 이미지를 가져올 (pull) 할 베이스
    • 이미지에 대해 수행할 연산을 논리적으로 묶어서 레이어의 수를 최소화 하는 것이 좋다.
      • 예를 들어 애플리케이션의 의존성에 관련된 패키지를 설치할 때는 각각을 별도의 디렉티브로 지정하지 않고 하나의 RUN 디렉티브로 묶어서 한꺼번에 설치하는 것이 좋다.
  • 이미지 정의
    • 로컬 이미지
    • 도커 공용 레지스트리
    • 사설 레지스트리
  • FROM 지점에서 부터 빌드 작업 시작
  • 로컬 이미지 제작에 사용할 베이스 이미지 지정
  • 도커파일에 제일 먼저 나와야 한다.
  • 빌드 하는데 반드시 필요한 요소

MAINTAINER

  • 빌드할 이미지의 제작자 명시
  • 옵션 값이므로 없어도 문제없음.
  • FROM 뒤 어느곳에 둬도 상관 없다.

ENV

  • 도커 파일에 환경변수 설정
  • ENV <키> <값>
    • ENV <키1>=<값1> <키2>=<값2>
    • ENV “키1 값1 키2 값2” -> 빈 공간이 있을때는 " " 으로 감싸줘야 한다.
  • 여러개의 환경변수 정의 할 때 하나의 인스트럭션으로 표현된다.
    • 환경변수는 이미지에서 컨테이너 생성할 때 사용할 수 있다.
    • docker inspect < 이미지 >
    • docker run 명령을 실행할 때, --env <키> = <값> 옵션 지정 하면 환경변수의 값 변경이 가능하다.

RUN

  • 명령을 실행 해서 그 결과를 새로운 레이어로 생성한다.
  • RUN 인스트럭션으로 전달한 명령은 이 인스트럭션이 나오기 전에 있던 레이어에서 실행된다. 따라서 순서에 주의해야한다.

** 주요 구문

RUN <명령>

  • <명령>으로 명시한 명령은 셸(`/bin/sh -c`)에서 실행된다.

RUN ["실행파일", "매개변수1", "매개변수2"]
실행할 명령을 실행파일 (절대경로) 과 매개변수 형태로 지정했다.

베이스 이미지 /bin/sh 없을때 지정해야 한다.

여기서 지정하는 실행 파일이 베이스 이미지에 존재하는 유일한 실행파일
실행한 결과를 토대로 레이어 생성

RUN ["/bins/bash", "-c", "echo True!"]

RUN <명령1> ; <명령2>

이렇게 작성하면 여러개의 명령을 ; 로 구분해 지정할 수 있다.
RUM 인스트럭션은 이렇게 지정된 명령을 한꺼번에 실행하며, 명령의 결과를 모아서 하나의 레이어로 빌드한다.

도커 컨테이너의 파일 시스템과 컨텍스트에서 실행할 수 있는것 이라면 무엇이든 적을 수 있다.

ADD

  • 로컬파일 시스템이나 원격 URL에 있는 파일이나 디렉터리를 이미지로 복사할 때 사용된다.

ADD <소스파일> <목적지 디렉터리>
여기서 <소스파일> 빌드 컨텍스트에 상대적인 위치로 지정한다.

목적지 디렉터리

  • 현재 작업 디렉토리에 대한 상대경로로 지정해도 되고 절대경로로 지정해도 된다.

ADD <파일1> <파일2> <파일3> <목적지>
여러개의 파일을 복사할 수 있도록 지정할 수 있다.
이때 소스파일의 경로는 반드시 빌드 컨텍스트의 상대경로로 지정

ADD <소스디렉토리> <목적지 디렉토리>
소스디렉토리 담긴 내용이 목적지에 복사 된다.
이때 파일 시스템의 메타데이터도 함께 복사된다
디렉토리는 복사되지 않는다.

CMD

  • 컨테이너가 실행될 때 디폴트 값을 전달하기 위한 용도로 주로 사용
    이때, 디폴트 값으로 실행파일을 지정할 때는 반드시 ENTRYPOINT 인스트럭션도 함께 지정해야 한다.
 - docker run 명령에 대한 인자를 지정했다면, CMD 인스트럭션에 지정된 디폴트 값을 무시한다.
 - 컨테이너를 구동할 때 마다 동일한 실행파일을 실행 시키고 싶다면, CMD & ENTRYPOINT 조합하는것이 좋다.

CMD vs RUN

  • RUN
    • 이미지를 빌드하는 동안 실제로 명령을 실행한 후, 결과를 커밋해서 레이어 추가
  • CMD
    • 빌드하는 동안 실행 안함.
    • 컨테이너에서 실행할 이미지를 지정하기만 한다.
    • 도커파일은 하나의 CMD만 실행 가능하다. (여러개 나오는 경우는 마지막의 CMD만 실행 가능하다.)

Comments