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
'SW Engineering > DevOps, SRE' 카테고리의 다른 글
Docker Network (0) | 2019.03.27 |
---|---|
Docker Compose-여러개의 컨테이너를 설정하고 생성하기 (0) | 2019.03.27 |
Docker file-이미지 생성시 필요한 작업을 스크립트로 만들기 (0) | 2019.03.27 |
Docker Image 추출 (0) | 2019.03.27 |
Docker Image 생성 및 docker hub에 이미지 업로드 (0) | 2019.03.27 |