Peta dunia

 

EN: Read in English

Dunia D3: Loker & Talian Telefon

Loker: named volume

Anda akan belajar: simpan data dalam volume, iaitu loker di luar container.

Teks BM belum disemak oleh penutur asli.

Disemak dengan Docker Engine 29 pada 31 Okt 2026

Masalahnya

Jadual orders tunjuk satu pesanan, nasi lemak. db dibuang dan dimulakan semula. Kini psql kata: relation orders does not exist. Transkrip Docker: $ docker exec db psql -U postgres -c "select * from orders;" id | dish ----+------------ 1 | nasi lemak (1 row) $ docker rm -f db db $ docker run -d --name db -e POSTGRES_PASSWORD=secret postgres:18-alpine ff26fb60d1866060f2de23803b7bab68ce36c64329453308649d0970d4545128 $ docker exec db psql -U postgres -c "select * from orders" ERROR: relation "orders" does not exist LINE 1: select * from orders ^

Laptop anda~

  • Tiada tingkap terbuka

Bekas (container)

  • dbberjalan
    dari postgres:18-alpine tanpa nama → /var/lib/postgresql

Pek beku (image)

  • postgres:18-alpine9 layer · 433MB · sedang diguna

Loker (volume)

  • 26e7b8e4309c… (tanpa nama)24 fail · diguna oleh db

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

Kancil tukar bekas pangkalan data dengan yang baru. Kemudian: ERROR: relation "orders" does not exist. Maksudnya: pangkalan data baru tiada jadual orders.

Tengok

volume: Loker data supaya tak hilang bila container dibuang. (loker data) ialah loker di luar bekas. Docker simpan loker itu sampai anda padam. Tekan kepingan untuk bina pangkalan data yang ada loker.

Ketik kepingan ikut turutan yang betul.

…

Cuba

Mulakan db dengan loker pgdata. Kemudian buat jadual orders.

Laptop anda~

  • Tiada tingkap terbuka

Bekas (container)

  • Belum ada container

Pek beku (image)

  • alpine:3.221 layer · 12.9MB
  • nginx:1.30-alpine8 layer · 93.5MB
  • postgres:18-alpine9 layer · 433MB

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

Teka

Teka dulu, kemudian jalankan. Fail mana yang masih ada?

Di mana setiap fail disimpan? Teka apa yang kekal, kemudian jalankan.

$ docker run -d --name kedai -v kedai-data:/data nginx:1.30-alpine

Soalan 1 daripada 2

Bekas bekal: container kedai

  • Dalam bekas bekal (writable layer)/app/today.txt

Di luar bekas bekal

  • Loker kedai-data (volume)/data/orders.db

Lepas ini, anda jalankan:

Buang container itu dan mulakan yang baharu.

$ docker rm -f kedai$ docker run -d --name kedai -v kedai-data:/data nginx:1.30-alpine

Pilih Kekal atau Hilang untuk setiap fail dahulu.

Cuba

Buang db. Mulakan semula dengan loker yang sama. Kemudian tengok pesanan.

Laptop anda~

  • Tiada tingkap terbuka

Bekas (container)

  • dbberjalan
    dari postgres:18-alpine pgdata → /var/lib/postgresql

Pek beku (image)

  • alpine:3.221 layer · 12.9MB
  • postgres:18-alpine9 layer · 433MB · sedang diguna

Loker (volume)

  • pgdata24 fail · diguna oleh db

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

Semak

Arahan mana yang padam pesanan buat selamanya?

Pilih satu jawapan.

Anda berjaya!

Kini anda boleh simpan data dalam loker di luar container.

Nak tahu lebih (pilihan)

Ralat sebenar: volume is in use. Maksudnya: buang bekas itu dulu. Tanpa -v, Postgres dapat loker tanpa nama. Bekas baru dapat loker baru, jadi docker volume ls kumpul sisa.

docker volume ls senaraikan pgdata. docker volume rm pgdata ditolak: volume itu sedang digunakan oleh container db. Transkrip Docker: $ docker volume ls DRIVER VOLUME NAME local pgdata $ docker volume rm pgdata Error response from daemon: remove pgdata: volume is in use - [39d563ae0d5fc9e0296b4ce2c08de5892b25946ff7bbd9e4c310bfec677599ac]

Laptop anda~

  • Tiada tingkap terbuka

Bekas (container)

  • dbberjalan
    dari postgres:18-alpine pgdata → /var/lib/postgresql

Pek beku (image)

  • alpine:3.221 layer · 12.9MB
  • postgres:18-alpine9 layer · 433MB · sedang diguna

Loker (volume)

  • pgdata24 fail · diguna oleh db

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

Latihan sebenar (pilihan), dengan Docker anda sendiri:

Misi sebenar

  1. docker volume create practice-data
  2. docker run --rm -v practice-data:/data alpine:3.22 sh -c "echo hi > /data/note.txt"
  3. docker run --rm -v practice-data:/data alpine:3.22 cat /data/note.txt
  4. docker volume rm practice-data

0 daripada 4 langkah siap · Tanda anda disimpan.