Docker : Dockerfile Build
- Dev-Ops/Docker
- 2022. 10. 14.
들어가기 전
$ docker build --tag test:test .
Dockerfile을 위 명령어로 build 할 때 문제가 발생함.
Dockerfile과 동일한 폴더에 파일이 존재하거나 혹은 참조(SymLink)로 된 녀석들인데 복사가 되지 않는 경우가 발생했다. 이런 경우는 뭐가 문제가 어떻게 해결해야할까?
문제점
- Docker의 Image를 Build하려면 Dockerfile과 Context가 필요하다.
- Dockerfile의 COPY 지시자는 Context를 참조한다.
위 코드의 문제점은 Context의 위치가 잘못 지정되어 있어서 COPY 지시자가 Context를 찾아올 수 없다는 것이다.
Context의 위치
microservice
ㄴ game
ㄴ Dockerfile
ㄴ ...
Context의 위치는 Dockerfile을 build 했을 때 전달한 경로가 된다. 예를 들어 위와 같은 구조가 있다고 가정해보자.
- microservice에서 docker build . 명령어를 이용했으면 context는 microservice가 된다.
컨텍스트는 이런 메카니즘으로 동작한다.
Docker Build의 의미
$ docker build -f <DockerFile> <Context 경로>
# 예시
$ docker build -f ./docker/hello/Dockerfile .
앞서 이야기 했을 때 이미지를 빌드하기 위해서는 Dockerfile과 Context가 필요하다고 했다. 그 의미를 살리면 다음과 같을 것이다. 위의 내용대로 하면 컨텍스트가 기본 경로가 되는데, 컨텍스트 자체에는 DockerFile이 없기 때문에 Context 경로를 기준으로 DockerFile의 경로를 알려주는 형식으로 작성할 수 있다.
그렇다면 파일은 어떻게?
- 파일의 위치를 Context 기준으로 DockerFile에 알려준다.
- 파일을 모두 DockerFile에 옮기고, Context의 위치를 DockerFile로 옮긴다.
위 두 가지의 방법으로 대응할 수 있을 것이다.
출처 및 참고
'Dev-Ops > Docker' 카테고리의 다른 글
Docker란 무엇인가? (0) | 2022.07.30 |
---|