Dockerfiles 작성 Best Practice
Best practices for writing Dockerfiles.
FROM ubuntu:15.04 COPY . /app RUN make /app CMD python /app/app.py
FROM :
ubuntu:15.04
Docker 이미지 레이어를 만듭니다 .COPY
: Docker 클라이언트의 현재 디렉토리에서 파일을 추가합니다.RUN
make
:
응용 프로그램을 빌드합니다.CMD
: 컨테이너 내에서 실행할 명령을 지정합니다.
이미지 및 레이어
컨테이너 및 레이어
동일한 이미지를 공유하는 컨테이너들 예
디스크의 컨테이너 크기
[root@k8s-worker01 ~]# docker ps -s CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES SIZE 6d210e7eb353 registry "/entrypoint.sh /e..." 5 seconds ago Up 3 seconds 5000/tcp kickass_poitras 0 B (virtual 25.8 MB) [root@k8s-worker01 ~]# [root@k8s-worker01 ~]# docker run -d registry -name registry2 950068eff13574017649a0c3fc8f84047da4978204c68c23074580e5dbce0d02 [root@k8s-worker01 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6d210e7eb353 registry "/entrypoint.sh /e..." 7 minutes ago Up 7 minutes 5000/tcp kickass_poitras [root@k8s-worker01 ~]# docker ps -s CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES SIZE 2c7c287be3e2 registry:2 "/entrypoint.sh /e..." 8 seconds ago Up 6 seconds 5000/tcp musing_kowalevski 0 B (virtual 25.8 MB) 1cdfdfe3c2d6 registry "/entrypoint.sh /e..." 17 seconds ago Up 15 seconds 5000/tcp musing_blackwell 0 B (virtual 25.8 MB) [root@k8s-worker01 ~]#
size
: 각 컨테이너의 쓰기 가능한 계층에 사용되는 데이터 양 (디스크에 있음).virtual size
: 컨테이너에서 사용하는 읽기 전용 이미지 데이터와 컨테이너의 쓰기 가능한 레이어에 사용되는 데이터의 양입니다size
. 여러 컨테이너가 일부 또는 모든 읽기 전용 이미지 데이터를 공유 할 수 있습니다. 동일한 이미지에서 시작된 두 개의 컨테이너는 읽기 전용 데이터의 100 %를 공유하는 반면 공통 레이어를 가진 서로 다른 이미지를 가진 두 개의 컨테이너는 공통 레이어를 공유합니다. 따라서 가상 크기를 합산 할 수는 없습니다. 이것은 잠재적으로 중요한 디스크 사용량을 과소 평가합니다.
불필요한 Layer가 생성되지 않도록 권장 합니다.
Not Bed
ADD http://example.com/big.tar.xz /usr/src/things/
RUN tar -xJf /usr/src/things/big.tar.xz -C /usr/src/things
RUN make -C /usr/src/things all
Best
RUN mkdir -p /usr/src/things \
&& curl -SL http://example.com/big.tar.xz \
| tar -xJC /usr/src/things \
&& make -C /usr/src/things all