-
배포 - WORKING DIRECTRORY 명시해 주기Infra/CI-CD 2022. 12. 25. 17:49
Dockerfile의 WORKDIR 명령어
# Create app directory WORKDIR /usr/src/app
Docker image는 해당 image안에서 어플리케이션 소스가 복사될 디렉토리를 생성하는 것이다. 그리고 생성 된 디렉토리는 어플리케이션의 working 디렉토리가 된다.
왜 따로 working 디렉토리가 있어야 할까?
현재 Node 이미지 속의 root 디렉토리에는 home,bin, dev 파일등이 있다.
ls 명령어를 사용해서 node 안의 디렉토리
custom으로 build한 image의 root 디렉토리
기본으로 제공되는 node image와 다르게 node를 이용해서 server를 구축하기위한 여타 디렉토리와 file들이 들어 있는 것을 확인 할 수 있다.
즉 디렉토리와 file 중 노드 앱을 위해서 COPY로 이미지안에 들어온 것들을 확인 할 수 있다.
workdir를 지정하지 않고 그냥 COPY할때 생기는 문제점
1. 혹시 COPY한 파일과 원래 이미지에 있던 파일의 이름이 같다면?
ex)베이스 이미지에 이미 home이라는 폴더라 있고 COPY를 함으로써 새로 추가 되는 폴더 중에 home이라는 폴더가 있다면 원래 베이스 이미지에 있던 home 폴더가 COPY로 복사된 새로운 home으로 대체되어 버린다.
2. 특정한 목적을 가지 디렉토리와 폴더가 root 디렉토리에 그냥 정돈이 안된채로 섞여있게 된다.
=> 그래서 node 서버 어플리케이션을 위한 소스들은 WORK 디렉토리를 따로 만들어서 보관한다.
WORK 디렉토리를 설정하는 방법
FROM node:10 WORKDIR /usr/src/app COPY ./ ./ RUN npm install CMD ["node","server.js"]
Dockerfile을 작성할 시에 WORKDIR이라는 명령어를 추가 하고 거기에 어떠한 디렉토리를 work 디렉토리로 설정할 것인지 적어주면 된다.
WORKDIR 명령어를 추가해준 다음에 build된 custorm image의 디렉토리 구조를 살펴보면 Dockerfile을 통해 COPY된 디렉토리와 file들만 보이는 것을 확인 할 수 있다. 그 이유는 WORKDIR을 설정을 해주면 Container에 접근할 때 root 디렉토리부터 접근을 하는 것이 아니라 work 디렉토리에 바로 접근을 하기 때문이다.
'Infra > CI-CD' 카테고리의 다른 글
배포 - Docker Volumes에 대하여 (0) 2022.12.30 배포 - Application소스 변경으로 다시 재build 시 효율적으로 하는 법 (0) 2022.12.25 배포 - 생성한 이미지로 app 실행 시 접근이 안되는 이유(포트 맵핑) (0) 2022.12.25 배포 - Dockerfile를 이용해서 Docker image build (0) 2022.12.25 배포 - Dockerfile 작성하기 (0) 2022.12.25