Le *_*con 66 docker dockerfile
我正在学习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” ]
Run Code Online (Sandbox Code Playgroud)
我不能省略WORKDIR
,Copy
只是让我Dockerfile
的项目根源?使用这种方法的缺点是什么?
jua*_*umn 76
根据文件:
WORKDIR指令为Dockerfile中的任何RUN,CMD,ENTRYPOINT,COPY和ADD指令设置工作目录.
此外,在Docker最佳实践中,它建议您使用它:
...你应该使用WORKDIR而不是像RUN cd那样增加指令... && do-something,这些都很难阅读,排除故障和维护.
我建议保留它.
我认为你可以将你的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 Code Online (Sandbox Code Playgroud)
Sam*_*are 36
你不必
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” ]
Run Code Online (Sandbox Code Playgroud)
mka*_*erg 26
你可以认为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"]
Run Code Online (Sandbox Code Playgroud)
我们更正了上面的代码以将 WORKDIR 放在正确的位置并通过删除优化以下语句 /Publish
FROM microsoft/aspnetcore:2
WORKDIR /publish
COPY --from=build-env /publish .
ENTRYPOINT ["dotnet", "api.dll"]
Run Code Online (Sandbox Code Playgroud)
所以它就像 acd
并为即将到来的陈述定下了基调。
归档时间: |
|
查看次数: |
64919 次 |
最近记录: |