为什么docker-compose build从头开始

时间:2019-02-24 07:06:05

标签: docker docker-compose

例如。

每次建造。

  • 复制package.json
  • 安装package.json
  • 添加当前目录。

我的问题是:

为什么不从缓存中使用它。例如,如果package.json不变,则不应从头开始安装package.json。

它应该使用缓存并仅更新更改代码。

更新

Dockerfile

FROM ubuntu:18.04
RUN rm /bin/sh && ln -s /bin/bash /bin/sh

RUN apt-get update && apt-get upgrade -y \
    && apt-get install -y  --no-install-recommends \
    build-essential \
    ca-certificates \
    gcc \
    git \
    libpq-dev \
    make \
    python-pip \
    python2.7 \
    python2.7-dev \
    apt-transport-https \
    curl \
    g++ \
    sudo \
    wget \
    bzip2 \
    chrpath \
    libssl-dev \
    libxft-dev \
    libfreetype6 \
    libfreetype6-dev \
    libfontconfig1 \
    libfontconfig1-dev \
    libfontconfig \
    poppler-utils \
    imagemagick \
    && apt-get clean \
    && rm -rf /tmp/* /var/lib/apt/lists/* \
    && apt-get -y autoclean

RUN apt-get update && apt-get install -y  --no-install-recommends software-properties-common && add-apt-repository ppa:malteworld/ppa && apt update && apt install -y  --no-install-recommends pdftk \
    && apt-get clean \
    && rm -rf /tmp/* /var/lib/apt/lists/* \
    && apt-get -y autoclean


ENV NVM_DIR /usr/local/nvm
ENV NODE_VERSION 10.6.0

# Install nvm with node and npm
RUN curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.29.0/install.sh | bash \
    && source $NVM_DIR/nvm.sh \
    && nvm install $NODE_VERSION \
    && nvm alias default $NODE_VERSION \
    && nvm use default

# Set up our PATH correctly so we don't have to long-reference npm, node, &c.
ENV NODE_PATH $NVM_DIR/versions/node/v$NODE_VERSION/lib/node_modules
ENV PATH $NVM_DIR/versions/node/v$NODE_VERSION/bin:$PATH

# Set the work directory
RUN mkdir -p /var/www/app/jobsaf-website
RUN mkdir /data
RUN mkdir /data/db

WORKDIR /var/www/app/jobsaf-website

RUN npm install -g node-gyp @angular/cli@6.2.3 nodemon  request


# Add our package.json and install *before* adding our application files
COPY package.json ./

# RUN npm install --force
RUN npm install --force

RUN npm rebuild node-sass


# Add application files
ADD . .

EXPOSE 3000 5858 4200 35729 27017 6379 49153

.dockerignore

# See http://help.github.com/ignore-files/ for more about ignoring files.

# compiled output
/tmp
/public/__build__/
/src/*/__build__/
/__build__/**
/public/dist/
/src/*/dist/
/dist/**
/.awcache
.webpack.json
/compiled/
dll/

package-lock.json
# dependencies
/node_modules
*/node_modules
# IDEs and editors
/.idea
.project
.classpath
.c9/
*.launch
**.js.map
.settings/

# IDE - VSCode
.vscode/


# misc
/.sass-cache
/connect.lock
/coverage/*
/libpeerconnection.log
npm-debug.log
testem.log
/typings

# e2e
/e2e/*.js
/e2e/*.map

#System Files
.DS_Store
Thumbs.db

*.csv
*.dat
*.iml
*.log
*.out
*.pid
*.seed
*.sublime-*
*.swo
*.swp
*.tgz
*.xml
.strong-pm
coverage

npm-debug*
/admin/dist

npm
/.cache-loader/*
stats.json

!/src/assets/js/admin-header.js
!/src/assets/js/website-custom.js

webpack-cache/
web/

/src/app/**/*.map
/src/app/**/*.js

1 个答案:

答案 0 :(得分:1)

--force应该从以下行中删除,因为它将忽略任何缓存并为您的软件包进行全新安装,这将导致从安装步骤开始的新docker build层。

RUN npm install --force
  

-f或--force参数将强制npm获取远程资源,即使磁盘上存在本地副本。