용어 정리
이 책을 보다보면 이러한 용어가 많이 나오는데 이 용어에 대해서 먼저 정리를 해야될 것 같다.
인스트럭션
컴퓨터가 어느 정보를 가지고 어떠한 처리를 하는가를 나타낸다.
FROM
- 이미지를 가져올 (pull) 할 베이스
- 이미지에 대해 수행할 연산을 논리적으로 묶어서 레이어의 수를 최소화 하는 것이 좋다.
- 예를 들어 애플리케이션의 의존성에 관련된 패키지를 설치할 때는 각각을 별도의 디렉티브로 지정하지 않고 하나의 RUN 디렉티브로 묶어서 한꺼번에 설치하는 것이 좋다.
- 이미지에 대해 수행할 연산을 논리적으로 묶어서 레이어의 수를 최소화 하는 것이 좋다.
- 이미지 정의
- 로컬 이미지
- 도커 공용 레지스트리
- 사설 레지스트리
FROM
지점에서 부터 빌드 작업 시작- 로컬 이미지 제작에 사용할 베이스 이미지 지정
- 도커파일에 제일 먼저 나와야 한다.
- 빌드 하는데 반드시 필요한 요소
MAINTAINER
- 빌드할 이미지의 제작자 명시
- 옵션 값이므로 없어도 문제없음.
- FROM 뒤 어느곳에 둬도 상관 없다.
ENV
- 도커 파일에 환경변수 설정
- ENV <키> <값>
값>키>
- ENV <키1>=<값1> <키2>=<값2>값2>키2>값1>키1>
- 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