반응형

Docker build

-         Dockerfile 이용해서 이미지 생성하기

 

·         Version : Docker

 

Docker build 명령은 dockerfile 이용해서 이미지를 만드는 작업을 한다. dockerfile에는 이미지 생성시 필요한 작업이 스크립트로 작성되어 있다.

·         dockerfile : http://sqlmvp.kr/221465287824

 

아래 스크립트는 docker build 사용해서 이미지를 생성한다.

docker build -t makeimage:0.0 ./

 

·         -t : 생성될 이미지의 이름을 설정. 스크립트에서는 makeimage:0.0 라는 이름의 이미지가 생성된다. -t 옵션을 사용하지 않으면 16진수 형태의 이름으로 이미지가 생성된다.

·         ./ : build 명령어 끝에는 dockerfile 저장된 경로를 입력한다. 로컬 디렉터리의 dockerfile 사용할 수도 있으며 외부 URL로부터 dockerfile 내용을 가져와 빌드할 있다. 예제에서는 로컬의 현재 디렉터리(./) 입력했다.

 

Build 시작하면 dockerfile 내용이 실행되며 실행 단계가 출력된다.

 


빌드가 완료되면 docker image에서 생성된 이미지를 확인할 있다.

 


docekrfile에서 명령어가 하나씩 실행될 때마다 새로운 컨테이너가 하나씩 생성되며 이미지로 커밋한다. 명령어가 실행될 때마다 이전 스텝의 이미지에 명령어가 실행되고 새로운 이미지 레이어로 저장된다.

[출처 : https://openliberty.io/blog/2018/06/29/optimizing-spring-boot-apps-for-docker.html]

 

dockerfile 만들 주의할 점은 불필요한 작업으로 이미지 사이즈가 커지지 않도록 해야 한다. 예를들어 100MB 크기의 파일을 만들어 컨테이너에 할당하고 다시 삭제하는 명령이 있을때, dockerfiles 이미지를 빌드하면서 단계마다 이미지 레이어를 만드는데,  최종 빌드가 완료된 상태에서 이미지에는 100MB크기의 파일이 존재하지 않지만 이미지의 크기는 기존 이미지에 100MB 더한 크기를 가지고 있다. , 파일을 삭제 했다는 레이어를 가지고 있으므로 실제론 파일이 없더라고 공간은 차지한다. 이러한 현상을 방지하기 위해서는 dockerfile 작성할때 && 기호로 run 명령을 하나로 묶는것이다. 여러개의 명령을 run  하나에서 실행하도록 하면 된다.

FORM ubuntu:14.04

RUN mkdir /test && dummyfile -l 100m /test/dummy && rm /test/dummy

 

만약 다른 사람이 빌드한 이미지에 불필요한 이미지 레이어가 있으면 해당 이미지로 컨테이너를 생성하고  docker export, import 명령어를 사용해 컨테이너를 이미지로 만들면 레이어가 1개로 줄어들어 이미지의 크기를 줄일 있다. 그러나 이전 이미지에 저장된 각종 이미지 설정은 삭제되므로 주의해야 한다.

 

Docker build 다양한 옵션이 있으므로 공식 문서를 참고할 있도록 한다.

·         docker build : https://docs.docker.com/engine/reference/commandline/build/

 

 

2019-02-14 / Sungwook Kang / http://sqlmvp.kr

 

Docker,  dockerfile, docker build, 도커 파일, 도커 이미지 생성, dockerfile reference

반응형

+ Recent posts