


Bagaimanakah saya menggunakan pelbagai peringkat membina di Docker untuk membuat imej yang lebih kecil dan lebih selamat?
Mar 14, 2025 pm 02:15 PMBagaimanakah saya menggunakan pelbagai peringkat membina di Docker untuk membuat imej yang lebih kecil dan lebih selamat?
Multi-stage dibina di Docker adalah ciri yang membolehkan anda menggunakan pelbagai FROM
pernyataan di Dockerfile anda. Setiap FROM
pernyataan boleh memulakan tahap baru proses membina, dan anda boleh menyalin artifak dari satu tahap ke tahap yang lain. Kaedah ini amat berguna untuk mewujudkan imej Docker yang lebih kecil dan lebih selamat dengan memisahkan persekitaran membina dari persekitaran runtime.
Berikut adalah cara anda boleh menggunakan pelbagai peringkat untuk mencapai matlamat ini:
-
Tentukan Peringkat Membina : Mulailah dengan menentukan tahap binaan di mana anda menyusun permohonan anda atau sediakan artifak anda. Sebagai contoh, anda mungkin menggunakan imej
golang
untuk menyusun aplikasi GO.<code class="Dockerfile">FROM golang:1.16 as builder WORKDIR /app COPY . . RUN go build -o myapp</code>
-
Tentukan Peringkat Runtime : Selepas peringkat membina, tentukan peringkat runtime dengan imej asas yang minimum. Salin hanya artifak yang diperlukan dari peringkat binaan ke peringkat runtime ini.
<code class="Dockerfile">FROM alpine:3.14 COPY --from=builder /app/myapp /myapp CMD ["/myapp"]</code>
Dengan menggunakan membina pelbagai peringkat, anda berakhir dengan imej akhir yang hanya mengandungi apa yang diperlukan untuk menjalankan aplikasi anda, yang jauh lebih kecil dan mempunyai kelemahan yang lebih sedikit berbanding dengan imej yang digunakan untuk membina.
Apakah amalan terbaik untuk menganjurkan kod dalam membina Docker pelbagai peringkat?
Menguruskan kod dengan berkesan dalam pembentukan Docker pelbagai peringkat dapat meningkatkan kecekapan dan kejelasan fail docker anda. Berikut adalah beberapa amalan terbaik:
-
Kebimbangan berasingan : Gunakan peringkat yang berbeza untuk tujuan yang berbeza (contohnya, bangunan, ujian, dan penyebaran). Pemisahan kebimbangan ini menjadikan fail docker anda lebih mudah difahami dan dikekalkan.
<code class="Dockerfile"># Build stage FROM node:14 as builder WORKDIR /app COPY package*.json ./ RUN npm install COPY . . RUN npm run build # Test stage FROM node:14 as tester WORKDIR /app COPY --from=builder /app . RUN npm run test # Runtime stage FROM node:14-alpine WORKDIR /app COPY --from=builder /app/build /app/build CMD ["node", "app/build/index.js"]</code>
-
Kurangkan bilangan lapisan : Campurkan arahan lari jika mungkin untuk mengurangkan bilangan lapisan dalam imej anda. Amalan ini bukan sahaja mempercepatkan proses membina tetapi juga menjadikan imej yang dihasilkan lebih kecil.
<code class="Dockerfile">RUN apt-get update && \ apt-get install -y some-package && \ rm -rf /var/lib/apt/lists/*</code>
- Gunakan
.dockerignore
: Buat fail.dockerignore
untuk mengecualikan fail yang tidak perlu daripada disalin ke dalam konteks membina Docker. Ini mempercepat proses membina dan mengurangkan saiz imej. - Mengoptimumkan operasi salinan : Hanya salin fail yang diperlukan untuk setiap peringkat. Sebagai contoh, dalam peringkat binaan untuk aplikasi Node.js, anda mungkin menyalin
package.json
terlebih dahulu, jalankannpm install
, dan kemudian menyalin permohonan yang lain. - Gunakan peringkat bernama : Berikan nama yang bermakna ke peringkat anda untuk menjadikan Dockerfile lebih mudah dibaca dan diselenggara.
Bagaimanakah saya dapat mengoptimumkan caching di Docker pelbagai peringkat membina untuk meningkatkan masa binaan?
Mengoptimumkan caching dalam pembentukan Docker pelbagai peringkat boleh mengurangkan masa membina. Berikut adalah beberapa strategi untuk mencapai ini:
-
Perintah Operasi : Letakkan perintah yang kerap berubah ke arah akhir Dockerfile anda. Docker akan cache lapisan dari permulaan fail Docker, mempercepatkan binaan berikutnya.
<code class="Dockerfile">FROM node:14 as builder WORKDIR /app COPY package*.json ./ RUN npm install COPY . . RUN npm run build</code>
Dalam contoh ini,
npm install
kurang berkemungkinan berubah daripada kod aplikasi, jadi ia diletakkan sebelumCOPY . .
perintah. - Gunakan Multi-Stage Builds : Setiap peringkat boleh di-cache secara bebas. Ini bermakna anda boleh memanfaatkan cache membina untuk setiap peringkat, berpotensi menjimatkan masa pada binaan berikutnya.
-
Leverage Buildkit : Docker Buildkit menawarkan mekanisme caching membina yang lebih baik. Dayakan BuildKit dengan menetapkan pembolehubah persekitaran
DOCKER_BUILDKIT=1
dan gunakan perintahRUN --mount
baru untuk melancarkan direktori cache.<code class="Dockerfile"># syntax=docker/dockerfile:experimental FROM golang:1.16 as builder RUN --mount=type=cache,target=/root/.cache/go-build \ go build -o myapp</code>
- Kurangkan konteks membina Docker : Gunakan fail
.dockerignore
untuk mengecualikan fail yang tidak perlu dari konteks binaan. Konteks yang lebih kecil bermakna kurang data untuk memindahkan dan membina lebih cepat. - Gunakan imej asas tertentu : Gunakan imej asas ringan dan stabil untuk mengurangkan masa yang diperlukan untuk menarik lapisan asas semasa membina.
Apakah faedah keselamatan yang dibina oleh Docker Multi-Stage berbanding dengan binaan satu peringkat?
Docker Multi-Stage Membina menyediakan beberapa manfaat keselamatan berbanding dengan satu peringkat membina:
- Saiz imej yang lebih kecil : Dengan menyalin hanya artifak yang diperlukan dari peringkat binaan ke peringkat runtime, pelbagai peringkat membina menghasilkan imej akhir yang lebih kecil. Imej yang lebih kecil mempunyai permukaan serangan yang dikurangkan kerana ia mengandungi komponen yang lebih sedikit yang boleh terdedah.
- Kerentanan yang dikurangkan : Oleh kerana imej akhir tidak termasuk alat binaan atau kebergantungan yang diperlukan hanya semasa proses membina, terdapat lebih sedikit peluang untuk penyerang untuk mengeksploitasi kelemahan dalam alat tersebut.
- Pengasingan Persekitaran Membina dan Runtime : Pembentukan pelbagai peringkat membolehkan anda menggunakan imej asas yang berbeza untuk membina dan menjalankan aplikasi anda. Persekitaran membina boleh menjadi lebih permisif dan termasuk alat yang diperlukan untuk menyusun atau membungkus, sementara persekitaran runtime boleh lebih terhad dan dioptimumkan untuk keselamatan.
- Pematuhan yang lebih mudah : Imej yang lebih kecil dan lebih fokus lebih mudah untuk mengimbas kelemahan dan memastikan pematuhan terhadap dasar keselamatan, menjadikannya lebih mudah untuk mengekalkan persekitaran yang selamat.
- Mengehadkan Pendedahan Rahsia : Oleh kerana data sensitif (seperti kekunci API yang digunakan semasa binaan) tidak perlu dimasukkan ke dalam imej akhir, membina pelbagai peringkat dapat membantu mencegah rahsia daripada terdedah dalam persekitaran runtime.
Dengan memanfaatkan pelbagai peringkat membina, anda dapat meningkatkan sikap keselamatan imej docker anda sambil juga mengoptimumkan saiz dan prestasi mereka.
Atas ialah kandungan terperinci Bagaimanakah saya menggunakan pelbagai peringkat membina di Docker untuk membuat imej yang lebih kecil dan lebih selamat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Untuk membuat pemacu rangkaian Docker tersuai, anda perlu menulis plugin Go yang melaksanakan NetworkDriverPlugin API dan berkomunikasi dengan Docker melalui Soket Unix. 1. Mula-mula memahami asas-asas pemalam Docker, dan pemacu rangkaian berjalan sebagai proses bebas; 2. Sediakan persekitaran pembangunan Go dan bina pelayan HTTP yang mendengar soket Unix; 3. Melaksanakan kaedah API yang diperlukan seperti plugin.aktivasi, getCapabilities, createnetwork, dan lain -lain dan mengembalikan respons JSON yang betul; 4. Daftar pemalam ke/run/docker/plugin/direktori dan lulus Dockernetwork

DockerSecretsprovideasecurewaytomanagesensitivedatainDockerenvironmentsbystoringsecretsseparatelyandinjectingthematruntime.TheyarepartofDockerSwarmmodeandmustbeusedwithinthatcontext.Tousethemeffectively,firstcreateasecretusingdockersecretcreate,thenr

DockerBuildKit adalah backend bangunan imej moden. Ia dapat meningkatkan kecekapan pembinaan dan penyelenggaraan sebanyak 1) pemprosesan selari langkah -langkah pembinaan bebas, 2) mekanisme caching yang lebih maju (seperti penggunaan semula cache jauh), dan 3) output berstruktur meningkatkan kecekapan pembinaan dan penyelenggaraan, dengan ketara mengoptimumkan kelajuan dan fleksibiliti bangunan imej docker. Pengguna hanya perlu membolehkan pembolehubah persekitaran Docker_BuildKit atau menggunakan arahan BuildX untuk mengaktifkan fungsi ini.

Ciri teras DockerCompose adalah untuk memulakan pelbagai bekas dalam satu klik dan secara automatik mengendalikan ketergantungan dan sambungan rangkaian di antara mereka. Ia mentakrifkan perkhidmatan, rangkaian, jilid dan sumber lain melalui fail YAML, menyedari orkestra perkhidmatan (1), secara automatik mewujudkan rangkaian dalaman untuk menjadikan perkhidmatan saling beroperasi (2), menyokong pengurusan jumlah data untuk meneruskan data (3), dan melaksanakan penggunaan semula dan pengasingan konfigurasi melalui profil yang berbeza (4). Sesuai untuk pembinaan persekitaran pembangunan tempatan (1), pengesahan awal seni bina mikroservis (2), persekitaran ujian dalam CI/CD (3), dan penempatan aplikasi kecil (4). Untuk memulakan, anda perlu memasang Docker dan pluginnya (1), buat direktori projek dan tuliskan Docker-Compose

Kubernet bukan pengganti Docker, tetapi langkah seterusnya dalam menguruskan bekas berskala besar. Docker digunakan untuk membina dan menjalankan bekas, manakala Kubernet digunakan untuk mengatur bekas ini merentasi pelbagai mesin. Khususnya: 1. 2. Kubernetes secara automatik menyebarkan, memperluaskan dan mengurus aplikasi kontena; 3. Ia menyedari orkestra kontena melalui komponen seperti nod, pod dan pesawat kawalan; 4. Kubernet bekerja dengan kerjasama Docker untuk memulakan semula bekas yang gagal secara automatik, mengembangkan permintaan, mengimbangi beban dan tiada kemas kini downtime; 5. Berkenaan dengan senario aplikasi yang memerlukan pengembangan pesat, menjalankan microservices, ketersediaan tinggi dan penempatan pelbagai alam sekitar.

Cara yang sama untuk membuat jumlah Docker adalah menggunakan perintah dockervolumecreate dan menentukan nama kelantangan. Langkah-langkah termasuk: 1. Buat jumlah yang dinamakan menggunakan dockervolume-createmy-volume; 2. Pasang kelantangan ke bekas melalui Dockerrun-Vmy-Volume:/Path/In/Container; 3. Sahkan kelantangan menggunakan dockervolumels dan jumlah yang tidak berguna dengan dockervolumePrune. Di samping itu, jumlah tanpa nama atau gunung mengikat boleh dipilih. Bekas secara automatik menjana ID oleh Docker, dan yang terakhir memaparkan direktori tuan rumah terus ke bekas. Perhatikan bahawa jumlah hanya sah di dalam negara, dan penyelesaian storan luaran diperlukan di seluruh nod.

Terdapat tiga cara biasa untuk menetapkan pembolehubah persekitaran dalam bekas Docker: Gunakan bendera -e, tentukan arahan ENV dalam fail docker, atau menguruskannya melalui dockercompose. 1. Menambah bendera -E apabila menggunakan Dockerrun boleh secara langsung lulus pembolehubah, yang sesuai untuk ujian sementara atau integrasi CI/CD; 2. Menggunakan Env dalam Dockerfile untuk menetapkan nilai lalai, yang sesuai untuk pembolehubah tetap yang tidak sering diubah, tetapi tidak sesuai untuk membezakan konfigurasi persekitaran yang berbeza; 3. Pilih kaedah yang betul mengikut keperluan projek atau gunakan pelbagai kaedah dalam kombinasi

Bekas Docker adalah cara yang ringan dan mudah alih untuk memasangkan aplikasi dan kebergantungan mereka bersama -sama untuk memastikan aplikasi berjalan secara konsisten dalam persekitaran yang berbeza. Contoh yang dijalankan berdasarkan imej membolehkan pemaju untuk memulakan program dengan cepat melalui "templat". Jalankan arahan Dockerrun yang biasa digunakan dalam bekas. Langkah -langkah khusus termasuk: 1. Pasang Docker; 2. Dapatkan atau bina cermin; 3. Gunakan arahan untuk memulakan bekas. Bekas berkongsi biji hos, lebih ringan dan lebih cepat untuk boot daripada mesin maya. Pemula mengesyorkan bermula dengan imej rasmi, menggunakan dockerps untuk melihat status berjalan, menggunakan dockerlogs untuk melihat log, dan kerap membersihkan sumber untuk mengoptimumkan prestasi.
