docker build
또는 docker buildx build
명령은 도커 이미지를 Dockerfile 과 context를 통해 빌드합니다.
명령 형식: docker build [OPTIONS] PATH | URL | -
이전에 다뤘던 build 명령에 대해서 더 깊게 다뤄 보겠습니다.
기본적으로 context는 PATH, URL, -
이렇게 3가지 종류입니다.
PATH Context
첫번째 PATH
의 경우 docker file
의 경로를 의미합니다.
docker build .
이 명령을 사용할 수 있는데
이것을 도커 파일로 보면 다음과 같이 사용이 가능합니다.
# syntax=docker/dockerfile:1
FROM busybox
WORKDIR /src
COPY foo .
.
├── Dockerfile
├── bar
├── foo
└── node_modules
그러면 결국 다음과 같은 디렉토리 구조가 됩니다.
.dockerignore
파일을 사용하여 일부 파일 또는 디렉토리가 전송되지 않도록 제외 할 수 있습니다.
빌드 컨텍스트에서 일부 파일을 제외하여 빌드 속도를 향상시키려면 exclude with .dockerignore 를 참조하십시오 . (.dockerignore은 .gitignore와 비슷하게 동작합니다.)
URL Context
URL context의 경우 3가지 종류가 인자로 들어올 수 있습니다.
- Git repositories (깃 저장소)
- Pre-packaged tarball contexts (
tar.gz
로 되어있는 URL)
- Plain text files (그냥 텍스트 파일)
Git repositories (깃 저장소)
docker build https://github.com/user/myrepo.git
기본적으로 build할 때 HEAD 커밋만을 이용해서 최신 커밋으로 하위 모듈을 전부 복제합니다.
URL에 대한 자세한 설정과 private repo에 대한 설정은 Git repositories 에 있으니 필요할 때 사용하시길 바랍니다.
Tarball contexts
URL
a를 원격 tarball에 전달하면 URL
자체가 데몬으로 전송됩니다.
$ docker build http://server/context.tar.gz
# 1 [internal] load remote build context
# 1 DONE 0.2s
# 2 copy /context /
# 2 DONE 0.1s
데몬은 context.tar.gz
이를 가져와서 빌드 컨텍스트로 사용합니다.
stdin
텍스트 파일
컨텍스를 지정하는 대신에 single Dockerfile
in the URL
을 전달하거나, stdin
으로 도커파일을 전달할 수 있습니다.
docker build - < Dockerfile
다음 예제에서는 Dockerfile
stdin을 통해 전달되는 a를 사용하여 이미지를 빌드합니다. 빌드 컨텍스트로 데몬에 파일이 전송되지 않습니다.
docker build -t myimage:latest -<<EOF
FROM busybox
RUN echo "hello world"
EOF
Dockerfile
빌드 컨텍스트를 생략하면 파일을 이미지에 복사할 필요가 없고 파일이 데몬으로 전송되지 않으므로 빌드 속도가 향상되는 상황에서 유용할 수 있습니다 .
Docker에는 로컬 또는 원격 빌드 컨텍스트를 사용하여 stdin을 통해 Dockerfile을 파이핑하여 이미지를 빌드할 수 있는 기능입니다.
stdin을 통해 Dockerfile을 파이핑하면 Dockerfile을 디스크에 쓰지 않고 일회성 빌드를 수행하거나 Dockerfile이 유지되지 않아야 하는 상황에서 유용할 수 있습니다.
다만 이렇게 stdin
을 사용하는 경우에는, COPY
or ADD
명령을 사용하면 fail 합니다.
stdin의 Dockerfile을 사용하여 원격 빌드 컨텍스트에서 빌드 (필요하다면 봅시다.)
이 구문을 사용하여 stdin
의 Dockerfile
을 사용하여 원격 Git 리포지토리의 파일을 사용하여 이미지를 빌드합니다. 구문은 -f
(또는 --file
) 옵션을 사용하여 사용할 Dockerfile
을 지정하고 하이픈( -
)을 파일 이름으로 사용하여 Docker가 stdin에서 Dockerfile
을 읽도록 지시합니다.
docker build [OPTIONS] -f- PATH
docker build -t myimage:latest -f- https://github.com/docker-library/hello-world.git <<EOF
FROM busybox
COPY hello.c ./
EOF
Uploaded by N2T
'42Seoul > Inception' 카테고리의 다른 글
Multi-stage builds [42 inception 과제 개념 심화 1] (0) | 2023.06.24 |
---|---|
best practices for writing Dockerfiles (과제 요구사항) [42 inception 과제 개념12] (2) | 2023.06.24 |
컨테이너 빌드에 대한 권장사항 [PID 1] [42 inception 과제 개념11] (0) | 2023.06.24 |
Docker Volume이란? [42 inception 과제 개념 10] (0) | 2023.06.24 |
Dockerfiles이란? [42 inception 과제 개념 9] (0) | 2023.06.24 |