Development Tip

Dockerfile에서 WORKDIR의 요점은 무엇입니까?

yourdevel 2020. 12. 29. 08:01
반응형

Dockerfile에서 WORKDIR의 요점은 무엇입니까?


저는 Docker를 배우고 있습니다. 많은 시간 동안 나는 것을 본 적이 Dockerfile있다 WORKDIR명령을 :

FROM node:latest
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY package.json /usr/src/app/
RUN npm install
COPY . /usr/src/app
EXPOSE 3000
CMD [ “npm”, “start” ] 

난 그냥 생략 할 수 없습니다 WORKDIRCopy단지 내를 Dockerfile내 프로젝트의 루트에? 이 접근 방식을 사용하면 어떤 단점이 있습니까?


문서 에 따르면 :

WORKDIR 명령어는 Dockerfile에서 뒤 따르는 RUN, CMD, ENTRYPOINT, COPY 및 ADD 명령어에 대한 작업 디렉토리를 설정합니다.

또한 Docker 모범 사례 에서는 다음을 사용하는 것이 좋습니다.

... 읽기, 문제 해결 및 유지 관리가 어려운 RUN cd… && do-something과 같은 명령을 확산시키는 대신 WORKDIR을 사용해야합니다.

나는 그것을 유지하는 것이 좋습니다.

Dockerfile을 다음과 같이 리팩터링 할 수 있다고 생각합니다.

FROM node:latest
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY package.json .
RUN npm install
COPY . ./
EXPOSE 3000
CMD [ “npm”, “start” ] 

당신은 할 필요가 없습니다

RUN mkdir -p /usr/src/app

지정하면 자동으로 생성됩니다. WORKDIR

FROM node:latest
WORKDIR /usr/src/app
COPY package.json .
RUN npm install
COPY . ./
EXPOSE 3000
CMD [ “npm”, “start” ] 

컨테이너 내부 WORKDIR처럼 생각할 수 있습니다 cd(명령처럼 나중에 Dockerfile에 나오는 명령에 영향을 미침 RUN). WORKDIR위의 예에서 제거한 경우 컨테이너 내부 RUN npm install/usr/src/app디렉토리에 있지 않기 때문에 작동하지 않습니다 .

나는 이것이 Dockerfile을 넣은 위치와 어떻게 관련되는지 알지 못합니다 (호스트 컴퓨터의 Dockerfile 위치는 컨테이너 내부의 pwd와 관련이 없기 때문입니다). 프로젝트에서 원하는 곳에 Dockerfile을 배치 할 수 있습니다. 그러나의 첫 번째 인수 COPY는 상대 경로이므로 Dockerfile을 이동하는 경우 해당 COPY명령 을 업데이트해야 할 수 있습니다 .


WORKDIR 적용 전. 여기서 WORKDIR은 잘못된 위치에 있으며 현명하게 사용되지 않습니다.

FROM microsoft/aspnetcore:2
COPY --from=build-env /publish /publish
WORKDIR /publish
ENTRYPOINT ["dotnet", "/publish/api.dll"]

위의 코드를 수정하여 WORKDIR을 올바른 위치에 배치하고 다음 구문을 제거하여 최적화했습니다. /Publish

FROM microsoft/aspnetcore:2
WORKDIR /publish
COPY --from=build-env /publish .
ENTRYPOINT ["dotnet", "/api.dll"]

할 수 있으며 괜찮습니다. 디버깅 목적으로 컨테이너에 터미널을 가져오고 싶을 때가 있습니다.

docker exec -it [container-id] bash

출처

그렇다면 어떤 사람들은 / usr / src / app에서 자신의 응용 프로그램을 찾는 것이 즐겁다 고 생각합니다. 또는 / mkasberg /. 또는 다른 전용 작업 디렉토리.

또 다른 가능성은 애플리케이션이 특정 절대 경로에 의존한다는 것입니다.

그 외에는 이것은 당신에게 달려 있습니다.

참조 URL : https://stackoverflow.com/questions/51066146/what-is-the-point-of-workdir-on-dockerfile

반응형