Peta dunia

 

EN: Read in English

Dunia D6: Di Sebalik Tabir · Cabaran bos

X-ray

Anda akan belajar: tukar proses biasa jadi container, satu namespace dan satu had pada satu masa.

Teks BM belum disemak oleh penutur asli.

Disemak dengan Docker Engine 29 pada 31 Okt 2026

Masalahnya

Misi bos: X-ray. node server.js ialah proses biasa dalam laptop Aina. Anda akan jadikannya container, satu suis pada satu masa. Mula-mula: apa sebenarnya container?

Pilih satu jawapan.

Cuba

Bilik 1: sorok proses lain dalam laptop daripadanya.

Hidupkan suis yang sorok proses lain.

Apa yang ia nampak (namespace)

  • Proses yang ia nampak

    • 1 /sbin/init
    • 412 sshd
    • 655 containerd
    • 701 dockerd
    • 1880 firefox
    • 4242 node server.js← proses ini
  • Fail yang ia nampak

    • /home/aina/kedai/server.js
    • /home/aina/.ssh/id_ed25519
    • /home/aina/Photos/
    • /var/lib/docker/

Teka

PID dah hidup. Tapi ps di dalam masih senaraikan proses laptop. Kenapa?

Pilih satu jawapan.

Cuba

Bilik 2: hidupkan set penutup mata Docker sendiri, sampai sepanduk tulis container.

Hidupkan suis yang docker run guna, sehingga ia jadi container.

Hanya satu proses. Ia nampak seluruh laptop.

Apa yang ia nampak (namespace)

  • Proses yang ia nampak

    • 1 node server.js← proses ini

    Di dalam, ia PID 1. Tetapi ps baca /proc. Docker juga mount /proc yang baharu (suis Mount).

  • Fail yang ia nampak

    • /home/aina/kedai/server.js
    • /home/aina/.ssh/id_ed25519
    • /home/aina/Photos/
    • /var/lib/docker/
  • Network

    • lo 127.0.0.1
    • wlan0 192.168.1.20
    • docker0 172.17.0.1
  • Hostname

    aina-laptop
  • Memori kongsi

    • memori kongsi dari firefox
    • memori kongsi dari pulseaudio
  • Pengguna

    Di dalam: uid=0(root)

    Di laptop: uid=0 (root di laptop juga!)

    Docker guna suis ini hanya dalam mod rootless, atau dengan userns-remap.

Cuba

Bilik 3: sekarang yang sebenar. web jalankan nginx. Lihat dari dalam dengan docker exec web ps, kemudian dari laptop dengan docker top web.

Laptop anda~

  • Port laptop 8080 → web port 80

Bekas (container)

  • webberjalan
    dari nginx:1.30-alpine 8080→80

Pek beku (image)

  • nginx:1.30-alpine8 layer · 93.5MB · sedang diguna

1 container (1 berjalan), 1 image, 0 loker.

Cuba

Bilik 4: tambah had catuan, dan penutup mata terakhir. Hidupkan semua suis.

Hidupkan semua suis. Lihat apa yang proses itu boleh nampak dan guna.

Kini sebuah container: suis lalai Docker sudah hidup.

Apa yang ia nampak (namespace)

  • Proses yang ia nampak

    • 1 node server.js← proses ini
  • Fail yang ia nampak

    • /app/server.js
    • /usr/local/bin/node
    • /etc/alpine-release

    Docker juga tukar folder root kepada fail image.

  • Network

    • lo 127.0.0.1
    • eth0 172.17.0.2

    Docker pasang kabel maya, namanya eth0.

  • Hostname

    3f9c2a7b1d04
  • Memori kongsi

    Tiada yang dikongsi. Memori aplikasi lain tersembunyi.

  • Pengguna

    Di dalam: uid=0(root)

    Di laptop: uid=0 (root di laptop juga!)

    Docker guna suis ini hanya dalam mod rootless, atau dengan userns-remap.

Apa yang ia boleh guna (cgroup)

  • Had

    Memori
    Tiada had: semua 16 GB
    CPU
    Tiada had: semua 8 CPU
    Proses
    Tiada had

Semak

Bilik terakhir: apa jadi bila anda taip docker run? Susun, yang pertama di atas.

Langkah pertama di atas. Susun ikut turutan. Guna anak panah, atau seret.

  • dockerd hantar pesanan kepada containerd
  • Anda taip docker run
  • containerd susun lapisan image dengan plastik atas yang baharu
  • runc hidupkan namespace dan cgroups
  • Aplikasi anda bermula sebagai PID 1, dan runc pergi

Anda berjaya!

Kini anda boleh bina container dalam kepala, suis demi suis.

Nak tahu lebih (pilihan)

Latihan sebenar (pilihan, Linux): hidupkan suis sebenar dengan unshare. Namespace rangkaian baharu cuma ada lo, dan ia mula dalam keadaan mati. Laptop anda tak berubah.

Misi sebenar

  1. sudo unshare --pid --fork --mount-proc --uts --net sh
  2. ps
  3. ip link
  4. exit

0 daripada 4 langkah siap · Tanda anda disimpan.