* 이미지 태그 관리
- 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 |