디지털 양피지/Docker2017. 6. 27. 17:39

* 이미지 태그 관리

 - docker tag와 rename으로 변경할 수 있다. 

 - 태그 작성시 항상 latest를 하나 더 달아 최신을 유지 해주는 것이 좋다.


 docker build 나 docker commit 명령으로 새로운 이미지를 생성한 후에, 이미지 태그 수정이나 추가

 - docker tag

 - 이미지 태그 구성 이유

  . 이미지 버전 

  . 이미지 버전 이름

  . latest: 태그를 지정하지 않는 경우 이미지의 기본값 태그 값



* Dockerfile


- Dockerfile은 쉽고 간단하며 명확한 구문을 갖는 텍스트 파일로 이미지 생성을 위한 핵심 요소

- git 사이트와 hub 사이트가 연동되어 자동으로 빌드 가능하다.

- automate build 기능을 사용하면 git 사이트에 올리면 자동을 이미지를 빌드해 hub에 올려준다.

 FROM ubuntu:latest  // base image

 MAINTAINER  // option


 RUN apt-get update && apt-get install -y apache2     // 설치

 

 ADD 00-default.conf /etc/apache2/sites-available/

 RUN chown root:root /etc/apache2/sites-available/000-default.conf


 EXPOSE 80   // link를 통해 자동을 컨테이너 연결 할 때 사용 (host 포트를 줄수는 없다)

 CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]  // image 실행시 자동으로 수행된다.


- 각각의 명령을 실행할 때마다 layer가 생성되고 commit 된다.

- 위의 경우 layer가 5개 만들어진다.


* Dockerfile 살펴보기



 - add: host 에서 container로 복사한다. remote에서 받아와서 복사. 압축 파일을 풀어준다.

 - copy: host에서 container 로 복사.

  ## host 에 파일은 항상 상대 경로를 가진다. 폴더를 만들고 그 안에서 빌드하자.

 - '/' 는 폴더와 파일을 구분하는 핵심 요소이다.

  . test: test 파일을 복사

  . test/: test 폴더를 복사

 - 실행 명령은 3가지가 있다. RUN, CMD, ENTRYPOINT

 . RUN: 빌링 명령어다. 빌딩중에서만 사용가능하다.

    .. 몇번이나 사용가능하다.

 . CMD: 시작 명령어로 사용된다. 1번만 사용 가능(여러개 넣으면 마지막 것만 실행)

    .. 쉘 명령을 실행할때는 쉘 폼을 사용 : 명령 매개변수1 매개변수2 

    .. 실행 명령을 실행할때는 실행 폼 :  ["executable", "매개변수1", "매개변수2"]

      쉘을 사용하고 싶으면 ["/bin/bash", "c", "ping"] 과 같이 사용한다.

 . ENTRYPOINT

  . 둘다 사용할 경우 entrypoint 에는 실행 명령, cmd 에는 default 매개변수가 들어간다.


 - key value 값으로 사용한다.

 . LABEL: metadata 로 사용 LABEL "key" = "value" "key1"="value1"

 . ENV: 컨테이너가 만들어진 후에 사용되는 값을 만들때 사용.

 . ARG: 빌딩 중에 사용된다.


- docker inspect 를 통해 어떻게 만들어졌는지 가능하다.

- EXPOSE : link 때 사용한다. open할때는 만들어 주어야 한다.

- VOLUME ["/etc/nginx/site-enabled", "/etc/nginx/certs"]: host에 연결이 필요한 경로들

   . 지정하지 않으면 임의의 host 경로 지정

- WORKDIR /etc/nginx : 현재 경로 지정


#docker run nginx -p 80    // 이렇게 하면 host port는 랜덤으로 결정된다.

                                   // 분산 환경에서는 auto scale 되므로 알아서 결정되어야 한다. 


- 빌딩할 때 문제는 cache에 저장된다는 것이다. apt-get update 같은 것은 문제가 될 수 있다.

- cache를 막는 옵션 

FROM ubuntu

 RUN apt-get update

 RUN apt-get install -y mongodb-server 

- docker build --no-cache 로 빌드한다.


- ARG

 FROM ubuntu

 ARG user=dellwon

- docker build --build-arg user=test 와 같이 바꿀수 있다.


- ONBUILD : 해당 이미지를 만들때는 사용되지 않고, child docker file로 이미지를 만들때 사용된다.

- STOPSIGNAL: 언제 죽을지 설정할 수 있다. 

- HEALTHCHECK: 컨테이너가 정상적으로 동작하고 있는지 확인할 수 있는것을 설정

HEALTHCHECK --interval=<interval> --timeout=<timeout> CMD <command> 

예>

HEALTHCHECK --interval=5m --timeout=2s --retries=3 CMD curl -f http://localhost || exit 1

 - SHELL ["executable", "parameters"] : 다른 shell 명령을 사용하고 싶을때


* Dockerfile 권장사항

- 폴더를 만들고 그 안에 dockerfile 을 만들어 작업하면 build할때 default로 dockerfile로 사용한다.

- build 시 현재 폴더에 있는 모든 파일을 메모리에 올리고 작업을 시작한다. 따라서, 필요 없는 파일 없이 작업한다.

- 아니면 .dockerignore 파일을 만들어 필요 없는 파일을 작성해 준다.

  - .dockerignore 파일 사용: 이미지 생성 작업 중에 불필요한 파일을 로드하지 않는다.

  - 이미지를 최소한 작게 생성할 수 있도록 불필요한 패키지를 구성하지 않는다.

  - 이미지 레이어 수가 최소가 될수 있도록 한다.

  - 한 컨테이너 당 한 애플리케이션을 구성



* Dockerfile로 이미지 생성하기

 Dockerfile을 사용한 이미지 생성: docker build

  - -t: 생성될 이미지에 적용할 이름. 여러 번 사용 가능.

  - -f: dockerfile 의 파일 이름과 경로. 생략시 현재 폴더의 dockerfile을 사용

  - dockerfile 이 있는 폴더에서 명령 실행시 PATH 매개변수로 . 을 사용

  - 이미지를 빠르게 생성하기 위해 .dockerignore 파일 사용 권장 


* Dockerfile의 기본 명령 오버라이드 하기

 아래와 같이 오버라이드해서 다른 실행을 수행 할 수도 있다.

- inspect를 통해 필요한 것을 수정해서 쓸 수 있다.

- ENV로 작업하면 빌딩에서 뿐만 아니라 run 환경에서 사용 할 수도 있다.

#docker run -it --entrypoint /bin/bash mongo 






'디지털 양피지 > Docker' 카테고리의 다른 글

4. 컨테이너 관리  (0) 2017.06.28
4. Dockerfile 실습  (0) 2017.06.28
3. Container 이미지 실행  (0) 2017.06.27
3. Docker Private Registry 구성  (0) 2017.06.27
3.Docker 보안  (0) 2017.06.27
Posted by 빨간 양말