Pembuatan multi-tahap dengan wadah
Sistem dengan cepat menjadi sangat besar saat Anda mengirimkannya secara lengkap. Ini termasuk build dan seringkali lingkungan build dan test. Bahkan jika ekstraksi file yang akan dikirim tidak menjadi masalah, itu memakan waktu.
Kontainer menawarkan kemungkinan untuk melakukan ini secara otomatis.
Di sini Anda memiliki opsi untuk menentukan beberapa wadah dalam satu file. Situs web yang dibuat dalam JavaScript dan dibuat dengan Node.js adalah contoh yang bagus.
Contoh:
Node.js:~ 400 Mbyte – 600 Mbyte
nginx server web:~ 20 Mbyte
Situs web:~ 2 Mbyte
Seluruh sistem sebagai wadah menghasilkan total lebih dari 600 Mbyte, meskipun hanya 22 Mbyte (server web + situs web) yang dibutuhkan. Selain itu, ada risiko keamanan untuk sistem karena ada perangkat lunak, yang tidak diperlukan untuk operasi yang produktif. Solusi di sini adalah pembangunan multi-tahap.
Dalam build multi-tahap, beberapa container didefinisikan dalam satu file dan kemudian hanya data yang diperlukan dari satu container ke container lainnya yang ditransmisikan.
Contoh file docker multi-tahap
Untuk tetap menggunakan Node.js, berikut adalah contoh build multi-tahap. Wadah pertama berisi Node.js sebagai sistem build, di dalamnya situs web dibuat. Wadah kedua berisi server web, yang menyalin data yang diperlukan dari penampung pertama setelah pembangunan.
## Base System Stage 1
## Use community Node.js container
FROM node:8.11.3 as buildsystem
## Add source from our Git project
COPY ./source /root/frontend
## Build frontend with Nodejs
WORKDIR /root/frontend/
RUN npm install \
&& npm run build
#####################################################################
#####################################################################
## Base System Stage 2
## Use community nginx container
FROM nginx:alpine
## Copy build from stage 1
RUN mkdir -p /var/www/html/<MyApp>
COPY --from=buildsystem /root/frontend/dist/ /var/www/html/<MyApp>/
## Add default config for nginx
ADD default.conf /etc/nginx/conf.d/
## Publish Port
EXPOSE 80
## Start nginx
CMD ["nginx", "-g", "daemon off;"]
Hasilnya adalah wadah kecil yang hanya berisi yang paling diperlukan. Kami menggunakan distribusi Linux yang sangat kecil untuk nginx dengan alpine.
Keuntungan lainnya adalah Anda dapat mengakses dua wadah komunitas yang sudah jadi dan karenanya tidak memiliki pekerjaan untuk membuat dan memeliharanya. Untuk pembaruan sistem, wadah komunitas hanya diganti secara teratur. Semuanya dapat diotomatisasi dengan luar biasa dalam pipeline dengan GitLab (atau alat lainnya).