EN: Read in English
Dunia D2: Resepi · Cabaran bos
Sinar pengecut
Anda akan belajar: bungkus laman sebenar dengan nginx: kecil, bukan root dan boleh dicapai.
Teks BM belum disemak oleh penutur asli.
Disemak dengan Docker Engine 29 pada 31 Okt 2026
Masalahnya
Laptop anda~/diary
- Tiada tingkap terbuka
Bekas (container)
- Belum ada container
Pek beku (image)
- nginx:1.30-alpine8 layer · 93.5MB
- nginx:latest7 layer · 243MB
0 container (0 berjalan), 2 image, 0 loker.
Boss: Sinar pengecut! Bungkus laman diari anda dengan nginx. Garisan penamat: bawah 100MB, tiada nota rahsia di dalam, dan tidak berjalan sebagai root.
Cuba
Peringkat 1: buat ia berfungsi. Bina diary:1.0 dan hidangkan di port laptop 8080.
Laptop anda~/diary
- Tiada tingkap terbuka
Bekas (container)
- Belum ada container
Pek beku (image)
- nginx:1.30-alpine8 layer · 93.5MB
- nginx:latest7 layer · 243MB
0 container (0 berjalan), 2 image, 0 loker.
Petunjuk
Bina dulu, kemudian jalankan dengan-p 8080:80.Semak
docker images kata diary:1.0 ialah 241MB. Sasarannya bawah 100MB. Langkah mana paling membantu?
Pilih satu jawapan.
Cuba
Peringkat 2: rancang pengecutan. Kecilkan pek makanan ke 70MB atau kurang.
Kecilkan pek makanan bawah 70MB. Setiap butang ialah helah sebenar.
Saiz image 186MB
Sasaran: 70MBMula: 186MB
Base image
Helah resepi
Dockerfile
FROM nginx:1.29 COPY . /usr/share/nginx/html
Cuba
Peringkat 3: kecilkan betul-betul. Tinggalkan notes.txt di rumah, dan bina diary:2.0 atas nginx:1.30-alpine.
Laptop anda~/diary
- Tiada tingkap terbuka
Bekas (container)
- Belum ada container
Pek beku (image)
- nginx:1.30-alpine8 layer · 93.5MB
- nginx:latest7 layer · 243MB
0 container (0 berjalan), 2 image, 0 loker.
Petunjuk
Resepi bermula denganARG BASE. --build-arg BASE=... tukar asasnya.Teka
Anda tambah USER nginx sahaja pada resepi. Apa jadi bila bekas itu mula?
Pilih satu jawapan.
Cuba
Peringkat 4: tanpa root. Resepi ini sudah serahkan folder kepada nginx. Tambah USER nginx, bina diary:3.0, jalankan di 8080, dan ketuk.
Laptop anda~/diary
- Tiada tingkap terbuka
Bekas (container)
- Belum ada container
Pek beku (image)
- nginx:1.30-alpine8 layer · 93.5MB
0 container (0 berjalan), 1 image, 0 loker.
Petunjuk
Tersangkut?docker logs web tunjuk kenapa bekas berhenti.Anda berjaya!
Kini anda boleh bungkus laman sebenar: kecil, selamat dan bukan root.
Nak tahu lebih (pilihan)
Kenapa ada baris chown? nginx tulis cache ke /var/cache/nginx dan id prosesnya ke /run/nginx.pid. Sebagai root, boleh. Sebagai nginx, hanya jika ia pemiliknya. Sesetengah platform halang port rendah untuk pengguna biasa. Ramai pasukan guna 8080.
Misi sebenar
docker images
0 daripada 4 langkah siap · Tanda anda disimpan.
English
Boss: the Shrink ray! Pack your diary site with nginx. Finish line: under 100MB, no secret notes inside, and not running as root.
Stage 1: make it work. Build diary:1.0 and serve it on laptop port 8080.
-p 8080:80.docker images says diary:1.0 is 241MB. The target is under 100MB. Which move helps most?
Stage 2: plan the shrink. Get the meal pack to 70MB or less.
Stage 3: shrink for real. Leave notes.txt at home, and build diary:2.0 on nginx:1.30-alpine.
ARG BASE. --build-arg BASE=... swaps the base.You add only USER nginx to the recipe. What happens when the box starts?
Stage 4: no root. This recipe already gives nginx its folders. Add USER nginx, build diary:3.0, run it on 8080, and knock.
docker logs web shows why a box stopped.You can now pack a real site: small, safe and non-root.
Anda dah siapkan ini. Latihan lagi pun bagus!
Dokumentasi rasmi: Docker docs: Best practices · Docker docs: Build context · Dockerfile reference: USER
Anda dah belajar 25 minit. Rehat sekejap bantu otak anda.
Pecutan selesai! Fokus yang hebat. Regangkan badan seminit?