保存依赖项并仅在Docker中重新构建代码
我在云上运行一个刮刀,运行铬和木偶。 为此,我必须在Docker映像中安装Chrome软件包和许多其他软件包。 但对于每一次代码更改,我都必须重新构建映像,而且似乎没有必要再次下载Chrome、所有软件包和依赖项 他们有没有办法只重新构建代码更改,而不安装所有其他东西,比如Chrome Docker文件保存依赖项并仅在Docker中重新构建代码,docker,google-cloud-platform,google-cloud-run,Docker,Google Cloud Platform,Google Cloud Run,我在云上运行一个刮刀,运行铬和木偶。 为此,我必须在Docker映像中安装Chrome软件包和许多其他软件包。 但对于每一次代码更改,我都必须重新构建映像,而且似乎没有必要再次下载Chrome、所有软件包和依赖项 他们有没有办法只重新构建代码更改,而不安装所有其他东西,比如Chrome Docker文件 FROM node:12-slim WORKDIR /Users/kod/Desktop/Code/Shopping-Feed/scraper-cloud-run COPY package*
FROM node:12-slim
WORKDIR /Users/kod/Desktop/Code/Shopping-Feed/scraper-cloud-run
COPY package*.json ./
# Install manually all the missing libraries
RUN apt-get update
RUN apt-get install -y wget gconf-service libasound2 libatk1.0-0 libcairo2 libcups2 libfontconfig1 libgdk-pixbuf2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libxss1 fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils
# Install Chrome
RUN wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
RUN dpkg -i google-chrome-stable_current_amd64.deb; apt-get -fy install
RUN npm install --production
COPY . .
CMD [ "npm", "start" ]
如果您将所有包/下载放在适当的暂存文件夹中,我认为您可以使用副本将它们移入,而不是从网络中查找它们。但是,如果容器被删除,更新现有容器内的代码库将丢失该代码库。您是否经常更改
包*.json
文件?否则,我希望Docker将所有层缓存到COPY
。你能告诉我们你是如何构建图像的吗?我认为他的包文件不是他寻求帮助的真正问题。他必须使用apt get来获取这些软件包。尽管考虑到这一点,我认为他们可以将层添加到您的图像中,而不是运行所有这些的安装。要echo@DustinIngram,将复制包*.json
的行移到运行dpkg-I chrome
的行之后是否有帮助?这将避免在节点依赖项或其他元数据更改时重新安装操作系统级软件包。