Docker 해석 및 경량급PaaS 플랫폼 연습(3) - Dockerfile 작성

이 문서에서는 Dockerfile 작성에 대해 설명합니다.
Image를 수정하고 컨테이너를 만들고 Image로 포장해서 우리가 필요로 하는 Image를 만드는 것 외에 Dockerfile 파일을 작성하고build을 통해 우리가 필요로 하는 Image를 만들 수 있습니다
Dockerfile은 파일 이름입니다. Docker는 프로젝트의 루트에 Dockerfile을 두어야 한다고 규정하고 있습니다. Dockerfile은 프로젝트의 루트 디렉터리에 두어야 합니다. Dockerbuild-t {미러의 이름} {프로젝트의 경로}를 통해 Dockerfile의 코드를 읽고 Image를 자동으로 구축합니다.
Dockerfile의 모든 줄의 명령이 실행된 후에 하나의 Image로 제출됩니다. 이로써 명령 사이에 영향을 주지 않을 것입니다. 또한 Docker는 가능한 한 이전의 Image를 복원하려고 시도할 것입니다.build 명령에 no-cache 방식을 추가하여 이런cache 복원 방식을 취소할 수 있습니다.
Dockerfile에서는 사용자가 정의한 명령어만 지원하며, 쓸 때 모두 대문자로 쓰는 것을 권장합니다
FROM {base Image}은 Dockerfile의 첫 번째 행에 배치해야 합니다.
MAINTAINER 선택사항, Image 작성자 식별
RUN 각 RUN 명령은 새 Container에서 실행되며 Image로 제출됩니다. 다음 RUN의base image RUN ["excutable", "arg1"로 제출됩니다.
CMD가 Dockerfile에서 정의한 CMD 명령은 Image로 제출할 때 작동하지 않습니다. 이 Image를 사용하여 Container를 만들 때만 Container 내부에서 기본적으로 이 CMD 명령을 실행합니다. Dockerfile 중 유효한 CMD가 Container를 실행할 때command를 지정하면 기본적으로 설정된 이 CMD를 덮어씁니다
다음은 Demo Dockerfile 작성
/test 디렉토리에서 새 Dockerfile 만들기
FROM busybox:ubuntu-14.04
RUN touch /test.sh
CMD ["ls","-al","/"]
//    ls -al /
//      ls -al /usr   ps -al      command

build을 사용하여 Image 구성
docker build -t jchubby/testimage /test 
//-t [image ] [Dockerfile  ]

실행 결과는 다음과 같습니다.
ENTRYPOINT 이전의 CMD는 기본적인command 명령을 정의하지만,container를 실행할 때 다른command를 실행하여 이전의command EntRYPOINT를 덮어쓰는 역할은container를 실행할 때 기본적으로command 명령을 설정하는 것입니다. 수정할 수 없지만 이 command 명령에 서로 다른 파라미터를 전달하여 다른 결과를 얻을 수 있습니다. Dockerfile에는 유효한 ENTRYPOINT만 있을 수 있습니다.
ENTRYPOINT 사용
FROM busybox:ubuntu-14.04
RUN touch /test.sh
ENTRYPOINT ["ls","-al"]
CMD["/"]
//     ls -al /
//            ,          ,    ls  

ADD ©는 host의 파일이나 디렉터리를 Image에 복사합니다. ADD가 URL인 경우 지정한 디렉터리로 다운로드합니다
FROM busybox:ubuntu-14.04
RUN touch /test.sh
ADD http://.... /test/..
//           /test/..   
ENTRYPOINT ["ls","-al"]
CMD["/"]

기타 Dockerfile 명령
ENV ENV key value는 환경 변수를 설정하는 데 사용되며, 이후의 RUN은 해당 Image 기반 Container를 만들 때 이러한 환경 변수를 자동으로 가집니다.
WORKDIR 현재 작업 디렉토리 지정
USER RUN 에서 사용할 사용자 지정
ONBUILD는 하나의 트리거와 유사하다. 예를 들어 Image a의 Dockerfile에서 ONBUILD를 제정했고 Image b의 Dockerfile에서 FROM Imagea를 지정하면 Image b를 구축할 때 Image a의 ONBUILD가 지정한 조작을 먼저 실행한다(ONBUILD 뒤에 Dockerfile의 명령이 따른다)
VOLUME는 VOLUME["path1", "path2",...]를 통해 일부 디렉터리를 Container 간에 데이터를 공유하고 접근할 수 있는 디렉터리로 지정합니다

좋은 웹페이지 즐겨찾기