EN: Read in English
Dunia D5: Hantar & Lindung · Cabaran bos
Terbit dengan selamat
Anda akan belajar: terbitkan image bukan root dengan SBOM ke GHCR, dengan sifar lubang kritikal.
Teks BM belum disemak oleh penutur asli.
Disemak dengan Docker Engine 29 pada 31 Okt 2026
Masalahnya
Laptop anda~/kedai-api
- Tiada tingkap terbuka
Bekas (container)
- Belum ada container
Pek beku (image)
- kedai-api:1.06 layer · 244MB
- node:24-alpine4 layer · 244MB
0 container (0 berjalan), 2 image, 0 loker.
Boss: terbitkan API Kedai Kancil ke GHCR. Tiga peraturan: bukan root, ada SBOM, sifar lubang CRITICAL. Bilik 1 dulu: pek itu masih jalan sebagai root.
Cuba
Bilik 1: tambah USER node di hujung resepi. Kemudian bina kedai-api:1.0 semula.
Laptop anda~/kedai-api
- Tiada tingkap terbuka
Bekas (container)
- Belum ada container
Pek beku (image)
- kedai-api:1.06 layer · 244MB
- node:24-alpine4 layer · 244MB
0 container (0 berjalan), 2 image, 0 loker.
Petunjuk
echo "USER node" >> Dockerfile, kemudian docker build -t kedai-api:1.0 .Semak
Bilik 2: peraturan anda ialah sifar CRITICAL. Asingkan setiap penemuan daripada imbasan semalam.
Seret kad ke dalam kotak. Atau ketik kad, kemudian ketik kotak.
Tengok
Pek API anda, diimbas betul-betul. Kod keluar 0: sifar lubang CRITICAL. Peraturan 3 dipenuhi.
Cuba
Bilik 3: hantar ke GHCR. Token GitHub anda ada dalam $CR_PAT. Log masuk dengannya, kemudian tag dan push.
Laptop anda~/kedai-api
- Tiada tingkap terbuka
Bekas (container)
- Belum ada container
Pek beku (image)
- kedai-api:1.06 layer · 244MB
- node:24-alpine4 layer · 244MB
0 container (0 berjalan), 2 image, 0 loker.
Petunjuk
Log masuk dengan token dulu (--password-stdin), kemudian docker tag dan docker push.Semak
Bilik 4: pek itu mesti bawa senarai bahannya. Bina satu arahan yang bina, labelkan dan push.
Ketik kepingan ikut turutan yang betul.
Cuba
Bilik terakhir, betul-betul, dengan API Kedai Kancil anda (Misi 1).
Misi sebenar
read -s CR_PAT && export CR_PATecho $CR_PAT | docker login ghcr.io -u YOUR-NAME --password-stdindocker buildx build --sbom=true --provenance=mode=max -t ghcr.io/YOUR-NAME/kedai-kancil-api:1.0.0 --push .trivy image --severity CRITICAL --exit-code 1 ghcr.io/YOUR-NAME/kedai-kancil-api:1.0.0git tag v1.0.0 && git push origin v1.0.0
0 daripada 6 langkah siap · Tanda anda disimpan.
Semak
API awam GitHub boleh nampak repo dan tag anda. Ia tak nampak pakej tanpa log masuk.
Semak di GitHub
- Repo kedai-kancil anda awamBelum disemak
- Ia ada tag versi, contohnya v1.0.0Belum disemak
Semak
Semak yang selebihnya sendiri.
Semak sendiri
docker inspect -f '{{.Config.User}}' ghcr.io/YOUR-NAME/kedai-kancil-api:1.0.0docker buildx imagetools inspect ghcr.io/YOUR-NAME/kedai-kancil-api:1.0.0
0 daripada 4 langkah siap · Tanda anda disimpan.
Anda berjaya!
Kini anda boleh terbitkan image yang selamat dan berlabel ke registry.
English
Boss: publish Kedai’s API to GHCR. Three rules: not root, an SBOM inside, zero CRITICAL holes. Room 1 first: the pack still runs as root.
Room 1: add USER node to the end of the recipe. Then build kedai-api:1.0 again.
echo "USER node" >> Dockerfile, then docker build -t kedai-api:1.0 .Room 2: your rule is zero CRITICAL. Sort each finding from last night’s scan.
Your API pack, scanned for real. Exit code 0: zero CRITICAL holes. Rule 3 holds.
Room 3: ship it to GHCR. Your GitHub token is in $CR_PAT. Log in with it, then tag and push.
--password-stdin), then docker tag and docker push.Room 4: the pack must carry its ingredients list. Build the one command that builds, labels and pushes.
Final room, for real, with your Kedai Kancil API (Mission 1).
GitHub’s public API can see your repo and its tags. It cannot see packages without a login.
Check the rest yourself.
You can now publish a safe, labelled image to a registry.
Anda dah siapkan ini. Latihan lagi pun bagus!
Dokumentasi rasmi: GitHub: Container registry · Attestation binaan · Trivy · Dockerfile USER
Anda dah belajar 25 minit. Rehat sekejap bantu otak anda.
Pecutan selesai! Fokus yang hebat. Regangkan badan seminit?