• Home
  • About
    • Junseok photo

      Junseok

      개발자 블로그

    • Learn More
    • Facebook
    • Instagram
    • Github
  • Posts
    • All Posts
    • All Tags
  • Java
    • java-basic
    • java-solid
    • java-pattern
    • java-logging
  • Javascript
  • Angular
  • spring
    • spring-framework
    • spring-boot
    • spring-test
  • server
    • jeus
    • webtob
    • tomcat
  • test
    • junit
    • assertj
    • hamcrest
    • dbunit
    • spring
  • docker
  • unix
  • maven
  • db
  • network
  • eclipse
  • intellij
  • microservices
  • etc

Dockerfile reference

27 Feb 2020

Reading time ~3 minutes

출처:Dockerfile reference

Docker는 Dockerfile에서 지시 사항을 읽음으로써 이미지를 자동으로 빌드 할 수 있습니다. Dockerfile은 이미지를 어셈블하기 위해 사용자가 명령 행에서 호출 할 수있는 모든 명령을 포함하는 텍스트 문서입니다. docker build를 사용하면 여러 명령 행 명령을 연속적으로 실행하는 자동화 된 빌드를 작성할 수 있습니다.
이 페이지는 Dockerfile에서 사용할 수있는 명령을 설명합니다.

이 페이지를 다 읽은 후에는 Dockerfile Best Practices 를 참조하십시오.

Usage

docker build명령은 Dockerfile 및 컨텍스트에서 이미지를 빌드합니다. 빌드 컨텍스트는 지정된 위치 PATH또는 URL에있는 파일 세트입니다. PATH는 로컬 파일 시스템의 디렉토리입니다. URL은 Git 저장소 위치입니다.

컨텍스트는 재귀 적으로 처리됩니다. 따라서 PATH에는 하위 디렉토리가 포함되고 URL에는 리포지토리 및 해당 하위 모듈이 포함됩니다. 이 예제는 현재 디렉토리를 컨텍스트로 사용하는 빌드 명령 을 보여줍니다.

$ docker build .
Sending build context to Docker daemon  6.51 MB
...

build는 CLI가 아닌 Docker daemon에 의해 실행됩니다.

빌드 프로세스가 수행하는 첫 번째 작업은 전체 컨텍스트를 재귀 적으로 데몬에 보내는 것입니다. 대부분의 경우 빈 디렉토리를 컨텍스트로 시작하고 Dockerfile을 해당 디렉토리에 유지하는 것이 가장 좋습니다. Dockerfile을 빌드하는 데 필요한 파일 만 추가하십시오.

Warning: 루트 디렉토리 /를 PATH로 사용하면 빌드가 하드 드라이브의 전체 내용을 Docker 데몬으로 전송하게 되므로 루트 디렉토리 /를 PATH로 사용하지 마십시오.

빌드 컨텍스트에서 파일을 사용하기 위해 Dockerfile은 명령에 지정된 파일 (예:COPY 명령)을 참조합니다. 빌드 성능을 향상 시키려면 컨텍스트 디렉토리에 .dockerignore 파일을 추가하여 파일 및 디렉토리를 제외하십시오.

전통적으로 Dockerfile은 Dockerfile이라고 하며 컨텍스트의 루트에 있습니다. docker build와 함께 -f 플래그를 사용하면 파일 시스템의 어느 곳에서나 Dockerfile을 가리킬 수 있습니다.

$ docker build -f /path/to/a/Dockerfile .

빌드가 성공하면 새 이미지를 저장할 저장소 및 태그를 지정할 수 있습니다.

$ docker build -t shykes/myapp .

빌드 후 이미지를 여러 저장소에 태그하려면 build 명령을 실행할 때 여러 개의 -t 매개 변수를 추가하십시오.

$ docker build -t shykes/myapp:1.0.2 -t shykes/myapp:latest .

Docker 데몬은 Dockerfile에서 지시 사항을 실행하기 전에 Dockerfile의 예비 유효성 검증을 수행하고 구문이 올바르지 않으면 오류를 리턴합니다.

$ docker build -t test/myapp .
Sending build context to Docker daemon 2.048 kB
Error response from daemon: Unknown instruction: RUNCMD

Docker 데몬은 Dockerfile에서 명령을 하나씩 실행하여 필요한 경우 새 이미지의 ID를 출력하기 전에 각 명령의 결과를 새 이미지에 커밋합니다. Docker 데몬은 보낸 컨텍스트를 자동으로 정리합니다.

각 명령어는 독립적으로 실행되며 새 이미지가 만들어 지므로 RUN cd /tmp는 다음 명령어에 영향을 미치지 않습니다.

Docker는 가능할 때마다 중간 이미지 (캐시)를 재사용하여 docker build 프로세스를 크게 가속화 합니다. 이는 콘솔 출력에서 Using cache 메시지로 표시됩니다.

$ docker build -t svendowideit/ambassador .
Sending build context to Docker daemon 15.36 kB
Step 1/4 : FROM alpine:3.2
 ---> 31f630c65071
Step 2/4 : MAINTAINER SvenDowideit@home.org.au
 ---> Using cache
 ---> 2a1c91448f5f
Step 3/4 : RUN apk update &&      apk add socat &&        rm -r /var/cache/
 ---> Using cache
 ---> 21ed6e7fbb73
Step 4/4 : CMD env | grep _TCP= | (sed 's/.*_PORT_\([0-9]*\)_TCP=tcp:\/\/\(.*\):\(.*\)/socat -t 100000000 TCP4-LISTEN:\1,fork,reuseaddr TCP4:\2:\3 \&/' && echo wait) | sh
 ---> Using cache
 ---> 7ea8aef582cc
Successfully built 7ea8aef582cc

빌드 캐시는 로컬 상위 체인이있는 이미지에서만 사용됩니다. 이는 이러한 이미지가 이전 빌드에서 생성되었거나 전체 이미지 체인에 docker load가로드되었음을 의미합니다. 특정 이미지의 빌드 캐시를 사용하려면 --cache-from 옵션으로 이미지를 지정할 수 있습니다. --cache-from으로 지정된 이미지에는 상위 체인이 필요하지 않으며 다른 레지스트리에서 가져올 수 있습니다.

빌드가 끝나면 저장소를 레지스트리에 푸시할 준비가되었습니다.

……



docker Share Tweet +1