我目前正在为我的应用程序开发一个Node后端.对它进行码头化(docker build.)时,最长的阶段是RUN npm install.RUN npm install每个小型服务器代码的指令都会改变,通过让开发人员每次等待构建完成来影响生产力.
我发现在应用程序代码所在的位置运行npm install并使用ADD指令将node_modules添加到容器中解决了这个问题,但它远非最佳实践.它打破了它的整个想法,它会使容器更重.
还有其他方法吗?
这是我的Dockerfile本地开发:
FROM node:12-alpine
WORKDIR /usr/app
ENV __DEV__ 1
COPY package.json ./
COPY yarn.lock ./
RUN yarn --frozen-lockfile
COPY tsconfig.json ./
COPY nodemon.json ./
RUN apk add --no-cache tini
ENTRYPOINT ["/sbin/tini", "--"]
CMD [ "yarn", "dev" ]
Run Code Online (Sandbox Code Playgroud)
这就是我构建它的方式:
docker build --rm -f Dockerfile.dev --tag my-app .
Run Code Online (Sandbox Code Playgroud)
这就是我运行它的方式:
docker run --rm -it --volume $(pwd)/src:/usr/app/src -p 3000:3000 my-app
Run Code Online (Sandbox Code Playgroud)
仅当文件夹外部的内容发生更改时,我才需要构建它src。例如,当我安装节点模块时。如何yarn在某处缓存模块,这样就不会在每个构建上提取所有模块。
我正在尝试在 docker 容器中构建/部署 Spring Boot。
FROM maven:3.5.3-jdk-8-slim AS build
COPY ./pom.xml /app/pom.xml
RUN cd /app
RUN mvn -f /app/pom.xml -s /usr/share/maven/ref/settings-docker.xml dependency:go-offline dependency:resolve-plugins -B
COPY . /app
RUN mvn -f /app/pom.xml -s /usr/share/maven/ref/settings-docker.xml --batch-mode package -DskipTests
Run Code Online (Sandbox Code Playgroud)
如您所见,我使用第一个 mvn 命令缓存所有依赖项,以便我的代码应用程序中的每个更改都不会触发新的大量依赖项下载。它适用于大多数依赖项,但仍然下载一些(即使缓存)。这是第二个 mvn 命令(包)的日志:
[INFO] Scanning for projects...
[INFO]
[INFO] ----------------------< xxx:xxx >----------------------
[INFO] Building xxxx 0.0.0
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- apt-maven-plugin:1.1.3:process (default) @ vsol-java ---
[INFO] Downloading from spring-releases: https://repo.spring.io/libs-release/org/apache/commons/commons-io/1.3.2/commons-io-1.3.2.pom
[INFO] Downloaded from spring-releases: https://repo.spring.io/libs-release/org/apache/commons/commons-io/1.3.2/commons-io-1.3.2.pom (0 B at 0 …Run Code Online (Sandbox Code Playgroud)