본문 바로가기
42Seoul/Inception

Build context [42 inception 과제 개념 심화2]

by 뜨거운 개발자 2023. 6. 24.

Build context
Learn how to use the build context to access files from your Dockerfile
https://docs.docker.com/build/building/context/
🚨
이 공식 문서는 docker 파일을 사용하는 build 명령에 대해서 설명합니다. 이 내용도 과제의 범위를 벗어납니다. 한번 읽어 만 보시는 것을 권장합니다.

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와 비슷하게 동작합니다.)

💡
경고

루트 디렉토리를 빌드 컨텍스트 /로 사용하지 마십시오 PATH. 빌드가 하드 드라이브의 전체 콘텐츠를 데몬으로 전송하게 됩니다.

URL Context

URL context의 경우 3가지 종류가 인자로 들어올 수 있습니다.

Git repositories (깃 저장소)

docker build https://github.com/user/myrepo.git

기본적으로 build할 때 HEAD 커밋만을 이용해서 최신 커밋으로 하위 모듈을 전부 복제합니다.

URL에 대한 자세한 설정과 private repo에 대한 설정은 Git repositories 에 있으니 필요할 때 사용하시길 바랍니다.

Tarball contexts

URLa를 원격 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

다음 예제에서는 Dockerfilestdin을 통해 전달되는 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을 사용하여 원격 빌드 컨텍스트에서 빌드 (필요하다면 봅시다.)

이 구문을 사용하여 stdinDockerfile을 사용하여 원격 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

728x90