Peta dunia

 

EN: Read in English

Dunia D3: Loker & Talian Telefon · Cabaran bos

Data yang kekal

Anda akan belajar: jalankan aplikasi dan Postgres yang datanya kekal selepas docker rm.

Teks BM belum disemak oleh penutur asli.

Disemak dengan Docker Engine 29 pada 31 Okt 2026

Masalahnya

Ujian semalam: satu pesanan, kemudian db dibuang dan dimulakan semula. 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.

Boss: Kedai Kancil buka esok! Ujian semalam hilangkan semua pesanan. Bina dengan betul: kedai dan Postgres, dengan pesanan yang kekal selepas docker rm.

Cuba

Bilik 1: buat loker pgdata dan talian telefon shopnet.

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.

Semak

Bilik 2 mulakan Postgres 18. Di mana loker pgdata mesti dibuka?

Pilih satu jawapan.

Cuba

Bilik 2: mulakan db di shopnet, 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

Loker (volume)

  • pgdata0 fail

Talian telefon (rangkaian)

  • shopnet—

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

Semak

Aplikasi kedai perlu cari db. Tetapan mana yang berfungsi?

Leret ke kanan untuk bagus, ke kiri untuk perlu baiki. Atau guna butang.

1 / 3DB_HOST=db
DB_HOST=db

Cuba

Bilik 3: mulakan web, halaman kedai, di shopnet. Buka tingkap 8080 untuk pelanggan.

Laptop anda~

  • Tiada tingkap terbuka

Bekas (container)

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

Pek beku (image)

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

Loker (volume)

  • pgdata24 fail · diguna oleh db

Talian telefon (rangkaian)

  • shopnetdb

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

Teka

Sebelum bilik terakhir: semakan loker yang ringkas. Teka dulu, kemudian jalankan.

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

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

Bekas bekal: container kedai

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

Di luar bekas bekal

  • Loker kedai-data (volume)/data/orders.db
  • Rak anda ./menu (bind mount)/menu/menu.md

Lepas ini, anda jalankan:

Buang container itu dan mulakan yang baharu.

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

Pilih Kekal atau Hilang untuk setiap fail dahulu.

Cuba

Bilik terakhir: buang db dengan docker rm -f. Mulakan semula di talian dan loker yang sama. Kemudian tunjuk pesanan.

Laptop anda~

  • Port laptop 8080 → web port 80

Bekas (container)

  • dbberjalan
    dari postgres:18-alpine shopnet pgdata → /var/lib/postgresql
  • webberjalan
    dari nginx:1.30-alpine 8080→80 shopnet

Pek beku (image)

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

Loker (volume)

  • pgdata24 fail · diguna oleh db

Talian telefon (rangkaian)

  • shopnetdb ↔ web

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

Anda berjaya!

Kini anda boleh jalankan aplikasi dan pangkalan data yang datanya kekal.