Thanks to visit codestin.com
Credit goes to www.datacamp.com

ข้ามไปยังเนื้อหาหลัก

Docker pgAdmin: วิธีตั้งค่า PostgreSQL GUI ด้วย Docker Compose

คู่มือทีละขั้นตอนในการตั้งค่า pgAdmin 4 และ PostgreSQL ด้วย Docker Compose ครอบคลุมการกำหนดค่าคอนเทนเนอร์ การลงทะเบียนเซิร์ฟเวอร์ และฟีเจอร์หลักของ pgAdmin รวมถึง Query Tool ตัวเรียกดูสคีมา และการสำรอง/กู้คืน
อัปเดตแล้ว 4 พ.ค. 2569  · 10 นาที อ่าน

สลับเซสชันไปมา จำไวยากรณ์ให้ขึ้นใจ และภาวนาไม่ให้พิมพ์ผิดกับคิวรีที่อาจทำลายข้อมูล เป็นเรื่องที่น่าเบื่อเร็วมาก ไม่มีแผนคิวรีแบบภาพ ไม่มีตัวเรียกดูสคีมา และไม่มีวิธีสำรองฐานข้อมูลที่สะดวก มันใช้งานได้ แต่ยังห่างไกลจากคำว่าเหมาะที่สุด

pgAdmin 4 แก้ปัญหานี้ด้วย GUI บนเบราว์เซอร์ที่สร้างมาเพื่อ PostgreSQL โดยเฉพาะ และการรันใน Docker หมายถึงไม่ต้องติดตั้งใดๆ ในเครื่อง เพียงแค่สตาร์ตคอนเทนเนอร์ก็พอ

ในบทความนี้ จะสาธิตการตั้งค่า PostgreSQL และ pgAdmin 4 ด้วย Docker Compose เชื่อมต่อคอนเทนเนอร์ทั้งสอง และใช้งาน Query Tool ตัวเรียกดูสคีมา และฟีเจอร์สำรองข้อมูลของ pgAdmin

ในการทำตาม จะต้องมี Docker ติดตั้งและกำลังทำงานอยู่บนเครื่อง หากเพิ่งเริ่มใช้ Docker Compose โปรดอ่านคู่มือของเราเพื่อดูว่า ช่วยให้งานพัฒนาหลายคอนเทนเนอร์ง่ายขึ้นอย่างไร.

pgAdmin 4 คืออะไร?

pgAdmin 4 เป็นแพลตฟอร์มโอเพ่นซอร์สแบบเบราว์เซอร์สำหรับงานแอดมินและพัฒนาบน PostgreSQL เข้าถึงผ่านเว็บเบราว์เซอร์ จึงไม่ต้องติดตั้งเดสก์ท็อปแอป ให้ GUI สำหรับจัดการฐานข้อมูล รันคิวรี ตรวจสอบสคีมา และจัดการสำรองข้อมูล โดยไม่ต้องใช้บรรทัดคำสั่ง

Docker image ทางการคือ dpage/pgadmin4 ซึ่งดูแลโดยทีมพัฒนา pgAdmin

การรัน pgAdmin 4 ใน Docker มีข้อดีหลายอย่างเหนือการติดตั้งในเครื่อง ข้อแรกคือความพกพา ทั้งสภาพแวดล้อมฐานข้อมูลอยู่ในไฟล์ docker-compose.yml ที่แชร์กับทีมได้ ข้อสองคือไม่มีปัญหาเวอร์ชันชนกัน pgAdmin รันในคอนเทนเนอร์ของตัวเอง แยกขาดจากสิ่งอื่นๆ บนเครื่อง และเมื่อเสร็จงาน docker compose down ก็ลบทุกอย่างสะอาด

pgAdmin 4 เทียบกับ GUI อื่นของ PostgreSQL

มีเครื่องมือ GUI สำหรับจัดการฐานข้อมูลอยู่มากมาย นี่คือการเปรียบเทียบ pgAdmin 4 กับสองทางเลือกยอดนิยม

pgAdmin 4 เทียบกับตัวเลือกยอดนิยม

pgAdmin 4 เทียบกับตัวเลือกยอดนิยม

DBeaver และ TablePlus เป็นเครื่องมือที่ดี แต่ทั้งคู่ไม่มี Docker image ทางการ หากอินสแตนซ์ PostgreSQL ของคุณรันอยู่ใน Docker อยู่แล้ว pgAdmin 4 คือคู่ที่เข้ากันได้ดี เพียงเพิ่มหนึ่งบริการลงใน docker-compose.yml แล้วทุกอย่างก็รันร่วมกันในเครือข่ายเดียว

ตั้งค่าสภาพแวดล้อมด้วย Docker Compose

วิธีที่เร็วที่สุดในการให้ PostgreSQL และ pgAdmin 4 รันร่วมกันคือไฟล์ docker-compose.yml ไฟล์เดียว หากยังใหม่กับหัวข้อนี้ Docker Compose Guide ของเราครอบคลุมพื้นฐานไว้ ที่นี่จะโฟกัสการตั้งค่าเฉพาะของ pgAdmin

นี่คือไฟล์ฉบับสมบูรณ์ที่คัดลอกวางได้เลย:

services:
  postgres:
    image: postgres:18
    container_name: postgres
    environment:
      POSTGRES_USER: admin
      POSTGRES_PASSWORD: secret
      POSTGRES_DB: mydb
    volumes:
      - postgres_data:/var/lib/postgresql
    networks:
      - pgnetwork

  pgadmin:
    image: dpage/pgadmin4:9.13
    container_name: pgadmin
    environment:
      PGADMIN_DEFAULT_EMAIL: [email protected]
      PGADMIN_DEFAULT_PASSWORD: password
      PGADMIN_LISTEN_PORT: 5050 
    ports:
      - "5050:5050"                
    volumes:
      - pgadmin_data:/var/lib/pgadmin
    depends_on:
      - postgres
    networks:
      - pgnetwork

volumes:
  postgres_data:
  pgadmin_data:

networks:
  pgnetwork:

ฟิลด์ depends_on บอก Docker Compose ให้สตาร์ตคอนเทนเนอร์ postgres ก่อน pgadmin หากไม่มี pgAdmin อาจเริ่มก่อนที่ PostgreSQL จะพร้อมและเชื่อมต่อไม่สำเร็จ ทั้งนี้มันไม่ได้รอจน PostgreSQL สุขภาพดีสมบูรณ์ แค่รอให้คอนเทนเนอร์เริ่มเท่านั้น แต่ก็เพียงพอสำหรับหลีกเลี่ยง race condition ส่วนใหญ่

ตัวแปรสภาพแวดล้อมของ pgAdmin 4

ต้องมีตัวแปรสภาพแวดล้อมสองตัว:

  • PGADMIN_DEFAULT_EMAIL - อีเมลที่ใช้ล็อกอินหน้าเว็บของ pgAdmin
  • PGADMIN_DEFAULT_PASSWORD - รหัสผ่านของบัญชีนั้น

ตัวที่สามเป็นทางเลือก แต่ควรกำหนดไว้:

  • PGADMIN_LISTEN_PORT - พอร์ตที่ pgAdmin รับฟังภายในคอนเทนเนอร์ ค่าเริ่มต้นคือ 80 แต่ตั้งเป็น 5050 จะทำให้จัดการ mapping พอร์ตได้ชัดเจนขึ้น

อย่างไรก็ดี การฮาร์ดโค้ดข้อมูลรับรองไว้ในไฟล์ Compose เป็นแนวปฏิบัติที่ไม่ดี โดยเฉพาะหากไฟล์ถูกเก็บในระบบควบคุมเวอร์ชัน ให้ย้ายไปไว้ในไฟล์ .env แทน

สร้างไฟล์ .env ในไดเรกทอรีเดียวกับ docker-compose.yml:

POSTGRES_USER=admin
POSTGRES_PASSWORD=secret
POSTGRES_DB=mydb
[email protected]
PGADMIN_DEFAULT_PASSWORD=secret

จากนั้นอ้างอิงตัวแปรในไฟล์ Compose:

# postgres
environment:
  POSTGRES_USER: ${POSTGRES_USER}
  POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
  POSTGRES_DB: ${POSTGRES_DB}
  
# pgadmin
environment:
  PGADMIN_DEFAULT_EMAIL: ${PGADMIN_DEFAULT_EMAIL}
  PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_DEFAULT_PASSWORD}

Docker Compose จะอ่านไฟล์ .env เมื่อรันคำสั่ง จึงไม่ต้องมีการตั้งค่าเพิ่มเติม เพียงอย่าลืมเพิ่ม .env ลงใน .gitignore เพื่อกันข้อมูลรับรองไม่ให้เข้าไปในรีโป

โวลโยมและการคงอยู่ของข้อมูล

โวลยูมที่แมปไปยัง /var/lib/pgadmin คือที่ที่ pgAdmin เก็บข้อมูล เช่น ข้อมูลเซสชัน การเชื่อมต่อเซิร์ฟเวอร์ที่บันทึกไว้ และการตั้งค่า หากตัดส่วนนี้ออกจากไฟล์ compose คุณจะสูญเสียทั้งหมดทุกครั้งที่คอนเทนเนอร์รีสตาร์ต

ในไฟล์ compose ปัจจุบัน คุณมี named volume ที่ Docker จัดการบนเครื่องโฮสต์ ข้อมูลจะคงอยู่แม้คอนเทนเนอร์รีสตาร์ต สร้างใหม่ หรืออัปเดตอิมเมจ ตราบใดที่ยังไม่ลบโวลยูมด้วย docker volume rm โดยเจตนา

เริ่มสแตกและเข้าถึง pgAdmin 4

เมื่อพร้อมไฟล์ docker-compose.yml การเริ่มสแตกใช้คำสั่งเดียว:

docker compose up -d

แฟลก -d จะรันทั้งสองคอนเทนเนอร์แบบ detached คือรันเบื้องหลังและเทอร์มินัลยังใช้งานต่อได้ เพื่อตรวจสอบว่าคอนเทนเนอร์ทั้งคู่กำลังรันอยู่:

docker ps

ควรเห็นทั้ง postgres และ pgadmin แสดงสถานะ Up

สถานะคอนเทนเนอร์

สถานะคอนเทนเนอร์

หากมีสิ่งผิดปกติ ให้ตรวจสอบบันทึกของ pgAdmin:

docker logs pgadmin

การสตาร์ตที่ปกติจะมีลักษณะดังนี้:

บันทึกการสตาร์ตของ pgAdmin

บันทึกการสตาร์ตของ pgAdmin

หากเห็นข้อผิดพลาด มักจะเป็นสามกรณีนี้:

  • การยืนยันรหัสผ่านล้มเหลว: ค่า PGADMIN_DEFAULT_PASSWORD ขาดหายหรือผิดรูปแบบในไฟล์ .env

  • พอร์ตถูกใช้งานแล้ว: มีอย่างอื่นรันอยู่ที่พอร์ต 5050 ให้เปลี่ยนพอร์ตฝั่งโฮสต์ในไฟล์ Compose

  • ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว: พาธของโวลยูมผิดหรือคอนเทนเนอร์ไม่มีสิทธิ์เขียน

เมื่อคอนเทนเนอร์ทั้งสองขึ้นและบันทึกดูเรียบร้อย เปิดเบราว์เซอร์แล้วไปที่ http://localhost:5050:

หน้าเข้าสู่ระบบ pgAdmin

หน้าเข้าสู่ระบบ pgAdmin

เข้าสู่ระบบด้วยอีเมลและรหัสผ่านที่ตั้งไว้ใน PGADMIN_DEFAULT_EMAIL และ PGADMIN_DEFAULT_PASSWORD จะไปยังแดชบอร์ด pgAdmin พร้อมลงทะเบียนเซิร์ฟเวอร์ PostgreSQL:

หน้าแรก pgAdmin

หน้าแรก pgAdmin

เชื่อมต่อ pgAdmin 4 กับคอนเทนเนอร์ PostgreSQL

ในแถบด้านข้างของ pgAdmin คลิกขวาที่ Servers - Register - Server จะมีไดอะล็อกเปิดขึ้นพร้อมแท็บสองแท็บที่ต้องกรอก: General และ Connection

แท็บ General

ตั้งชื่อเซิร์ฟเวอร์ให้สื่อความหมาย เช่น local-dev-postgres นี่เป็นเพียงป้ายชื่อภายใน pgAdmin เลือกอะไรก็ได้ที่เหมาะกับการตั้งค่าของคุณ

ลงทะเบียนเซิร์ฟเวอร์ - แท็บ General

ลงทะเบียนเซิร์ฟเวอร์ - แท็บ General

แท็บ Connection

อย่าใช้ localhost ที่นี่ 

ภายในเครือข่าย Docker localhost จะอ้างถึงคอนเทนเนอร์นั้นเอง ไม่ใช่เครื่องโฮสต์ และไม่ใช่คอนเทนเนอร์ PostgreSQL Docker มี DNS ภายในของตัวเอง และจะ resolve ชื่อคอนเทนเนอร์ตาม service name ที่กำหนดใน docker-compose.yml ดังนั้นหากบริการ PostgreSQL ชื่อ postgres นั่นคือ hostname ที่ต้องใช้

กรอกฟิลด์ดังนี้:

  • Host name/address: postgres (ชื่อตามบริการใน docker-compose.yml)

  • Port: 5432

  • Maintenance database: ค่า POSTGRES_DB จากไฟล์ Compose (เช่น mydb)

  • Username: ค่า POSTGRES_USER (เช่น admin)

  • Password: ค่า POSTGRES_PASSWORD

คลิก Save

ลงทะเบียนเซิร์ฟเวอร์ - แท็บ Connection

ลงทะเบียนเซิร์ฟเวอร์ - แท็บ Connection

หากกรอกถูกต้อง เซิร์ฟเวอร์จะปรากฏในแถบข้างและสามารถขยายดูฐานข้อมูลได้

ลงทะเบียนเซิร์ฟเวอร์สำเร็จ

ลงทะเบียนเซิร์ฟเวอร์สำเร็จ

แปลว่าเชื่อมต่อเรียบร้อยแล้ว

การใช้ Query Tool

ตอนนี้เชื่อมต่อแล้ว มาดูพื้นฐานของ pgAdmin 4 และ Postgres โดยรวม

เปิด Query Tool โดยคลิก Tools - Query Tool จากเมนูด้านบน อินเทอร์เฟซมีสามพาเนล:

  • Editor: พื้นที่เขียน SQL
  • Data Output: แสดงผลลัพธ์หลังรันคิวรี
  • Messages: ข้อความสถานะ ข้อผิดพลาด และข้อมูลการรันจาก PostgreSQL

Query tool

Query tool

การเขียนและรัน SQL

มาสร้างตาราง orders แบบง่ายและเพิ่มข้อมูล สามารถรันแต่ละบล็อกด้วยปุ่ม Play หรือกด F5 ซึ่งเป็นทางลัด

รันคำสั่งนี้เพื่อสร้างตาราง:

CREATE TABLE orders (
    order_id SERIAL PRIMARY KEY,
    customer_name VARCHAR(100) NOT NULL,
    product VARCHAR(100) NOT NULL,
    quantity INT NOT NULL,
    order_date DATE DEFAULT CURRENT_DATE
);

แทรกข้อมูลสองสามแถว:

INSERT INTO orders (customer_name, product, quantity)
VALUES
    ('Alice Johnson', 'Wireless Keyboard', 2),
    ('Bob Smith', 'USB-C Hub', 1),
    ('Carol White', 'Mechanical Keyboard', 3);

แล้วคิวรีข้อมูล:

SELECT * FROM orders;

การคิวรีข้อมูล

การคิวรีข้อมูล

ผลลัพธ์จะแสดงในพาเนล Data Output เป็นตาราง สามารถเรียงคอลัมน์ ปรับขนาด และคัดลอกแถวจากกริดได้โดยตรง

การอ่านแผนคิวรีแบบภาพ

เพื่อดูว่าเบื้องหลังเกิดอะไรขึ้นเมื่อรันคิวรี ให้รัน EXPLAIN ANALYZE กับคำสั่ง SELECT ของคุณ:

EXPLAIN ANALYZE SELECT * FROM orders WHERE customer_name = 'Alice Johnson';

ผลลัพธ์ Explain Analyze

ผลลัพธ์ Explain Analyze

พาเนล Data Output จะแสดงผลดิบ แต่ pgAdmin มีทางเลือกที่ดีกว่า คลิกปุ่ม Explain ในทูลบาร์ แล้ว pgAdmin จะเรนเดอร์แผนคิวรีเป็นกราฟเชิงโต้ตอบ

แผนคิวรีแบบกราฟ

แผนคิวรีแบบกราฟ

สำหรับคิวรีนี้มันง่าย แต่เมื่อมีการ join ตารางหรือรวมข้อมูลซับซ้อน คุณจะได้ข้อมูลเชิงลึกมากขึ้น

สิ่งนี้สำคัญเพราะการอ่านผลลัพธ์ EXPLAIN แบบดิบช้าและเกิดข้อผิดพลาดง่าย แผนแบบภาพทำให้เห็นชัดว่าเมื่อใดที่ PostgreSQL สแกนทั้งตารางขนาดใหญ่ หรือเมื่อมีอินเด็กซ์แต่ไม่ได้ถูกใช้งาน

จัดการสคีมาฐานข้อมูล

แถบด้านข้างของ pgAdmin แสดงโครงสร้างฐานข้อมูลทั้งหมด และให้ปรับแก้ผ่าน GUI ได้

โครงสร้างต้นไม้ในแถบข้างคือ Servers - ชื่อเซิร์ฟเวอร์ของคุณ - Databases - ฐานข้อมูลของคุณ - Schemas - public - Tables ขยายตารางใดๆ จะเห็น Columns, Indexes และ Constraints เป็นโหนดย่อย คลิกเพื่อดูรายละเอียดในพาเนลขวา

การสร้างและแก้ไขตาราง

เพื่อสร้างตารางใหม่ คลิกขวาที่ Tables ใต้สคีมาของคุณ แล้วเลือก Create - Table จะมีไดอะล็อกเปิดพร้อมหลายแท็บ

การสร้างตาราง

การสร้างตาราง

แท็บ General ใช้ตั้งชื่อตาราง สลับไปแท็บ Columns เพื่อเพิ่มคอลัมน์ แต่ละแถวกำหนดชื่อคอลัมน์ ชนิดข้อมูล ความยาว และอนุญาตให้ว่างหรือไม่ แท็บ Constraints ใช้กำหนดคีย์หลัก คีย์ต่างประเทศ และข้อจำกัดแบบยูนีก

เพื่อเพิ่มอินเด็กซ์ให้ตารางที่มีอยู่ ให้ขยายตารางในแถบข้าง คลิกขวาที่ Indexes แล้วเลือก Create - Index เลือกคอลัมน์ที่จะทำดัชนีและชนิดอินเด็กซ์ โดย btree เป็นค่าเริ่มต้นและเหมาะกับส่วนใหญ่

การสร้างอินเด็กซ์

การสร้างอินเด็กซ์

สำรองและกู้คืน

เพื่อสำรองฐานข้อมูล ไปที่ Tools - Backup แล้วเลือกฟอร์แมต:

  • Custom: ไบนารีแบบบีบอัด ที่ยืดหยุ่นที่สุด และเหมาะกับส่วนใหญ่ เพราะสามารถกู้คืนเฉพาะบางตารางได้
  • Plain: สคริปต์ SQL ธรรมดาที่เปิดอ่านได้ด้วยโปรแกรมแก้ไขข้อความใดๆ เหมาะสำหรับตรวจทานหรือแก้ไขก่อนกู้คืน
  • Tar: แฟ้มบีบอัดแบบไม่บีบอัด พบไม่บ่อยแต่มีประโยชน์ในเวิร์กโฟลว์กู้คืนบางแบบ

หลังเลือกฟอร์แมตและพาธปลายทาง pgAdmin จะรัน pg_dump เบื้องหลังและบันทึกไฟล์ลงเครื่องท้องถิ่น

การสร้างสำรองข้อมูล

การสร้างสำรองข้อมูล

เมื่อต้องการกู้คืน ไปที่ Tools - Restore เลือกไฟล์สำรอง แล้วระบุฐานข้อมูลเป้าหมาย

การกู้คืนจากไฟล์สำรอง

การกู้คืนจากไฟล์สำรอง

หากสงสัยว่าทำไมสิ่งนี้จึงมีประโยชน์ ลองนึกถึงการทดสอบไมเกรชันที่อาจทำลายข้อมูลบนฐานข้อมูลสำหรับพัฒนา สำรองไว้ก่อน รันไมเกรชัน และหากมีอะไรพัง ก็คืนค่าจากสำรองเพื่อกลับสู่สถานะที่แน่นอน

แนวปฏิบัติที่ดีสำหรับการรัน pgAdmin 4 ใน Docker

การทำให้ pgAdmin 4 รันได้คืออย่างหนึ่ง แต่การให้รันได้ราบรื่นต้องรู้เพิ่มเติมเล็กน้อย ต่อไปนี้คือเคล็ดลับเชิงปฏิบัติ

อย่าเก็บข้อมูลรับรองไว้ในไฟล์ Compose

หาก docker-compose.yml ถูกเก็บในระบบควบคุมเวอร์ชัน ซึ่งมักเป็นเช่นนั้น รหัสผ่านที่ฮาร์ดโค้ดก็จะไปด้วย ใช้ไฟล์ .env สำหรับข้อมูลรับรองและเพิ่มไว้ใน .gitignore สำหรับสภาพแวดล้อมโปรดักชัน ให้ยกระดับด้วย Docker secrets ซึ่งเมานต์ค่าที่อ่อนไหวเป็นไฟล์แทนตัวแปรสภาพแวดล้อม

อย่าเปิดเผยพอร์ตของ pgAdmin ต่อสาธารณะ

โดยค่าเริ่มต้น Docker จะ bind พอร์ตไปยัง 0.0.0.0 ซึ่งหมายถึงทุกอินเทอร์เฟซเครือข่าย รวมถึงสาธารณะ บนเซิร์ฟเวอร์ระยะไกล นั่นทำให้อินสแตนซ์ pgAdmin เข้าถึงได้จากอินเทอร์เน็ต ให้ bind ไปยัง 127.0.0.1 โดยชัดเจนแทน:

ports:
  - "127.0.0.1:5050:5050"

วิธีนี้ทำให้เข้าถึง pgAdmin ได้จากตัวเซิร์ฟเวอร์เท่านั้น หากต้องการเข้าถึงจากระยะไกล ให้ใช้ SSH tunnel หรือ reverse proxy

ปักหมุดแท็กของอิมเมจ

การใช้ dpage/pgadmin4:latest จะดึงเวอร์ชันใหม่เมื่อมีใครรัน docker compose pull เวอร์ชันใหม่อาจทำงานต่างออกไป ทำให้คอนฟิกเสีย หรือมีการเปลี่ยนแปลงที่ไม่คาดคิด ใช้แท็กเฉพาะอย่าง dpage/pgadmin4:9.13 เพื่อให้ทุกคนในทีมรันเวอร์ชันเดียวกัน

พรีโหลดการเชื่อมต่อเซิร์ฟเวอร์ด้วย servers.json

หากทั้งทีมใช้ชุด Compose เดียวกัน อย่าปล่อยให้ทุกคนต้องลงทะเบียนเซิร์ฟเวอร์ PostgreSQL หลังสตาร์ตสแตก pgAdmin รองรับไฟล์ servers.json ที่เติมการเชื่อมต่อให้โดยอัตโนมัติขณะเริ่มต้น เมานต์ไฟล์เข้าไปในคอนเทนเนอร์แบบนี้:

volumes:
  - ./servers.json:/pgadmin4/servers.json

ตัวอย่าง servers.json แบบมินิมัลมีดังนี้:

{
  "Servers": {
    "1": {
      "Name": "local-dev-postgres",
      "Group": "Servers",
      "Host": "postgres",
      "Port": 5432,
      "MaintenanceDB": "mydb",
      "Username": "admin",
      "SSLMode": "prefer"
    }
  }
}

เซิร์ฟเวอร์จะปรากฏขึ้นเมื่อ pgAdmin เริ่มทำงาน โดยไม่ต้องตั้งค่าด้วยตนเอง

สรุป

บทความนี้พาเดินตั้งค่า pgAdmin 4 ใน Docker ตั้งแต่ศูนย์ เขียนไฟล์ Docker Compose ที่เปิดทั้ง PostgreSQL และ pgAdmin 4 พร้อมกัน เชื่อมต่อคอนเทนเนอร์ทั้งสองด้วย DNS ภายในของ Docker และใช้ฟีเจอร์หลักของ pgAdmin ได้แก่ Query Tool ตัวเรียกดูสคีมา และเวิร์กโฟลว์สำรอง/กู้คืน

หลักการสำคัญคือความทำซ้ำได้

ไฟล์ docker-compose.yml ไฟล์ servers.json และไฟล์ .env คือทั้งหมดที่ต้องใช้เพื่อส่งมอบสภาพแวดล้อมฐานข้อมูลที่ตั้งค่าเสร็จให้เพื่อนร่วมทีม สิ่งนี้ช่วยให้ปัญหา “ทำไมของฉันใช้ได้ แต่อีกเครื่องใช้ไม่ได้” ไม่เกิดขึ้นอีก

หากอยากเจาะลึก Docker และการทำคอนเทนเนอร์ ลองดูคอร์ส Intermediate Docker ของเรา อัดแน่นด้วยทิปที่เป็นประโยชน์เกี่ยวกับ multi-stage builds เน็ตเวิร์กกิง และเจาะลึก Compose

Docker pgAdmin คำถามที่พบบ่อย

รัน pgAdmin 4 ใน Docker บน Windows และ macOS ได้หรือไม่?

ได้ อิมเมจ dpage/pgadmin4 รันได้บนระบบปฏิบัติการใดก็ตามที่รองรับ Docker รวมถึง Windows และ macOS ขั้นตอนการตั้งค่าและไฟล์ docker-compose.yml เหมือนกันทุกแพลตฟอร์ม

ต้องติดตั้ง pgAdmin 4 ใหม่ทุกครั้งที่อัปเดต Docker image หรือไม่?

ไม่จำเป็น การดึงอิมเมจเวอร์ชันใหม่จะไม่กระทบข้อมูลที่บันทึกไว้ ตราบใดที่ได้แมป /var/lib/pgadmin ไปยัง named volume การเชื่อมต่อเซิร์ฟเวอร์ ข้อมูลเซสชัน และการตั้งค่าของคุณจะอยู่ครบแม้อัปเดตอิมเมจและรีสตาร์ตคอนเทนเนอร์

ใช้ pgAdmin 4 ใน Docker กับฐานข้อมูลโปรดักชันปลอดภัยหรือไม่?

pgAdmin 4 ใน Docker เหมาะสำหรับงานพัฒนาและเครื่องมือภายใน แต่ต้องล็อกดาวน์ให้รัดก่อนชี้ไปยังฐานข้อมูลโปรดักชัน อย่าเปิดพอร์ต pgAdmin ต่อสาธารณะเสมอ ใช้ไฟล์ .env หรือ Docker secrets สำหรับข้อมูลรับรอง และพิจารณาวาง pgAdmin ไว้หลัง reverse proxy ที่มีการยืนยันตัวตนหากต้องเข้าถึงจากระยะไกล

ทำไมจึงใช้ `localhost` เป็น hostname ตอนเชื่อม pgAdmin กับ PostgreSQL ไม่ได้?

ภายในเครือข่าย Docker localhost จะชี้ไปยังคอนเทนเนอร์นั้นเอง ไม่ใช่เครื่องโฮสต์หรือคอนเทนเนอร์อื่น Docker มี DNS ภายในที่ resolve ชื่อคอนเทนเนอร์ตาม service name ที่กำหนดใน docker-compose.yml ให้ใช้ service name ของ PostgreSQL — โดยทั่วไปคือ postgres — เป็น hostname แทน

ความแตกต่างระหว่างฟอร์แมตสำรอง Custom, Plain และ Tar ใน pgAdmin คืออะไร?

Custom เป็นฟอร์แมตไบนารีแบบบีบอัดที่ยืดหยุ่นที่สุด สามารถกู้คืนเฉพาะตารางได้ ไม่ต้องกู้คืนทั้งฐานข้อมูล Plain จะได้สคริปต์ SQL ที่อ่านได้ด้วย text editor ใดๆ ซึ่งสะดวกสำหรับตรวจทานหรือแก้ไขก่อนกู้คืน Tar เป็นอาร์ไคฟ์แบบไม่บีบอัด พบไม่บ่อยแต่รองรับโดย pg_restore สำหรับการกู้คืนแบบเลือกบางส่วน

หัวข้อ

เรียนรู้ Docker กับ DataCamp

Courses

Introduction to Docker

4 ชม.
46.9K
Gain an introduction to Docker and discover its importance in the data professional’s toolkit. Learn about Docker containers, images, and more.
ดูรายละเอียดCodestin Search App
เริ่มหลักสูตร
ดูเพิ่มเติมCodestin Search App