Ok jadi saya menemukan artikel bagus tentang efisiensi saat menulis file buruh pelabuhan.
Ini adalah contoh dari file buruh pelabuhan yang buruk menambahkan kode aplikasi sebelum menjalankan RUN npm install
instruksi:
FROM ubuntu
RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list
RUN apt-get update
RUN apt-get -y install python-software-properties git build-essential
RUN add-apt-repository -y ppa:chris-lea/node.js
RUN apt-get update
RUN apt-get -y install nodejs
WORKDIR /opt/app
COPY . /opt/app
RUN npm install
EXPOSE 3001
CMD ["node", "server.js"]
Dengan membagi salinan aplikasi menjadi 2 instruksi SALIN (satu untuk file package.json dan yang lainnya untuk file lainnya) dan menjalankan instruksi npm install sebelum menambahkan kode sebenarnya, perubahan kode apa pun tidak akan memicu RUN npm install instruksi, hanya perubahan package.json yang akan memicunya. File buruh pelabuhan praktik yang lebih baik:
FROM ubuntu
MAINTAINER David Weinstein <david@bitjudo.com>
# install our dependencies and nodejs
RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list
RUN apt-get update
RUN apt-get -y install python-software-properties git build-essential
RUN add-apt-repository -y ppa:chris-lea/node.js
RUN apt-get update
RUN apt-get -y install nodejs
# use changes to package.json to force Docker not to use the cache
# when we change our application's nodejs dependencies:
COPY package.json /tmp/package.json
RUN cd /tmp && npm install
RUN mkdir -p /opt/app && cp -a /tmp/node_modules /opt/app/
# From here we load our application's code in, therefore the previous docker
# "layer" thats been cached will be used if possible
WORKDIR /opt/app
COPY . /opt/app
EXPOSE 3000
CMD ["node", "server.js"]
Di sinilah file package.json ditambahkan, instal dependensinya, dan salin ke container WORKDIR, tempat aplikasi berada:
ADD package.json /tmp/package.json
RUN cd /tmp && npm install
RUN mkdir -p /opt/app && cp -a /tmp/node_modules /opt/app/
Untuk menghindari fase instal npm pada setiap build buruh pelabuhan, cukup salin baris tersebut dan ubah ^ / opt / app ^ ke lokasi tempat aplikasi Anda berada di dalam container.
ADD
berkecil hati demiCOPY
, afaik.COPY
bahkan lebih efektif. IMO, dua paragraf terakhir tidak diperlukan, karena merupakan duplikat dan juga dari sudut pandang aplikasi, tidak masalah di mana pun pada sistem file tempat aplikasi berada, selamaWORKDIR
disetel.