如何使用 Docker 安裝具有 Vector 資料庫的 PostgreSQL
今天要跟大家分享一個超級實用的技巧——如何使用 Docker 安裝並設定支援向量資料庫 (vector database) 的 PostgreSQL。讓我們一起來看看這篇文章吧!
什麼是 Vector 資料庫?
在進入技術細節之前,讓我們先了解一下什麼是向量資料庫。向量資料庫主要用於儲存和處理向量數據,這對於現代的數據分析和機器學習應用非常重要。例如,向量資料庫可以幫助我們高效地進行相似度搜索和聚類分析。
使用 Docker 安裝 PostgreSQL 並添加 Vector 支援
Step 1: 建立 Docker Compose 設定檔
首先,我們需要建立一個 docker-compose.yml
檔案,這是用來配置我們的 Docker 容器的。這裡我們將設定兩個服務:db
(PostgreSQL) 和 pgadmin
(用來管理資料庫的 GUI)。
version: "3.7"
services:
db:
image: postgres:13.2-alpine
restart: always
environment:
POSTGRES_DB: postgres
POSTGRES_USER: 使用者帳號
POSTGRES_PASSWORD: 密碼
PGDATA: /var/lib/postgresql/data
volumes:
- /local/path/for/data:/var/lib/postgresql/data
ports:
- "5432:5432"
networks:
- app-network
pgadmin:
image: dpage/pgadmin4:latest
restart: always
environment:
PGADMIN_DEFAULT_EMAIL: your-email@example.com
PGADMIN_DEFAULT_PASSWORD: your-pgadmin-password
PGADMIN_LISTEN_PORT: 80
ports:
- "8080:80"
volumes:
- pgadmin-data:/var/lib/pgadmin
networks:
- app-network
volumes:
pgadmin-data:
networks:
app-network:
driver: bridge
使用 .env 檔案
我們可以使用 .env
檔案來管理環境變數,這樣可以更方便地修改和管理敏感資訊。創建一個名為 .env
的檔案,內容如下:
POSTGRES_USER=使用者帳號
POSTGRES_PASSWORD=密碼
PGADMIN_DEFAULT_EMAIL=your-email@example.com
PGADMIN_DEFAULT_PASSWORD=your-pgadmin-password
然後,在 docker-compose.yml
檔案中引用這些變數:
version: "3.7"
services:
db:
image: postgres:13.2-alpine
restart: always
environment:
POSTGRES_DB: postgres
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
PGDATA: /var/lib/postgresql/data
volumes:
- /local/path/for/data:/var/lib/postgresql/data
ports:
- "5432:5432"
networks:
- app-network
pgadmin:
image: dpage/pgadmin4:latest
restart: always
environment:
PGADMIN_DEFAULT_EMAIL: ${PGADMIN_DEFAULT_EMAIL}
PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_DEFAULT_PASSWORD}
PGADMIN_LISTEN_PORT: 80
ports:
- "8080:80"
volumes:
- pgadmin-data:/var/lib/pgadmin
networks:
- app-network
volumes:
pgadmin-data:
networks:
app-network:
driver: bridge
Step 2: 添加向量資料庫支援
接下來,我們需要為 PostgreSQL 添加 pgvector
擴展,這樣就可以支援向量資料類型和操作。為此,我們需要建立一個自定義的 Dockerfile。
創建一個名為 Dockerfile.pgvector
的檔案,內容如下:
FROM postgres:13.2-alpine
RUN apk add --no-cache make gcc g++ clang llvm10 wget
RUN wget https://github.com/pgvector/pgvector/archive/refs/tags/v0.1.4.tar.gz \
&& tar -xzvf v0.1.4.tar.gz \
&& cd pgvector-0.1.4 \
&& make && make install
RUN apk del make gcc g++ clang llvm10
Step 3: 重建 Docker 容器
在配置好 docker-compose.yml
和 Dockerfile.pgvector
之後,我們需要重建 Docker 容器。打開終端機,執行以下命令:
docker-compose down
docker-compose up --build
這樣就會重新建立和啟動 Docker 容器,同時安裝 pgvector 擴展。
Step 4: 使用 pgAdmin 連接 PostgreSQL
現在,我們可以使用 pgAdmin 來連接和管理我們的 PostgreSQL 資料庫。
- 開啟 pgAdmin: 在瀏覽器中打開
http://localhost:8080
。 - 登入 pgAdmin: 使用你在
.env
檔案中設定的 email 和 password。 - 添加新伺服器:
- 右鍵點擊 “Servers”,選擇 “Create” > “Server”。
- 在 “General” 標籤中,輸入伺服器名稱 (例如
Local PostgreSQL
)。 - 在 “Connection” 標籤中,填寫以下資訊:
- Host:
db
- Port:
5432
- Username:
${POSTGRES_USER}
- Password:
${POSTGRES_PASSWORD}
- Database:
postgres
- Host:
- 點擊 “Save” 保存設置。
Verify Network Configuration
要確保 pgAdmin 和 PostgreSQL 容器能夠互相通信,我們需要驗證 Docker 的網路配置。
檢查 Docker 網路: 執行以下命令來列出 Docker 網路,並檢查由 Docker Compose 創建的網路:
docker network ls
你應該會看到一個名稱類似
your_project_default
的網路。檢查該網路:
docker network inspect your_project_default
確保
db
和pgadmin
服務都列在Containers
下。明確定義網路: 在
docker-compose.yml
中明確定義一個網路,確保兩個服務使用相同的網路。networks: app-network: driver: bridge
重建容器: 在更新
docker-compose.yml
之後,關閉現有的容器並重新啟動以應用更改:docker-compose down docker-compose up --build
測試連接: 使用
ping
測試pgadmin
容器能否解析並連接到db
服務。docker exec -it <pgadmin_container_id> /bin/bash ping db
使用向量資料庫
現在,你的 PostgreSQL 資料庫已經支援向量資料類型,你可以使用 pgvector 擴展來執行向量操作。以下是一個簡單的示例,展示如何在 PostgreSQL 中使用向量資料類型:
CREATE TABLE items (
id SERIAL PRIMARY KEY,
vector VECTOR(3)
);
INSERT INTO items (vector) VALUES ('[1, 2, 3]'), ('[4, 5, 6]'), ('[7, 8, 9]');
SELECT * FROM items WHERE vector <-> '[1, 2, 3]' < 1.5;
在這個示例中,我們創建了一個包含向量資料類型的表格,並插入了一些向量
數據。然後,我們使用向量相似度操作符 <->
來查詢與特定向量接近的記錄。
結論
恭喜你!現在你已經成功地使用 Docker 安裝並設定了支援向量資料庫的 PostgreSQL。這將大大提升你的數據分析和機器學習應用的能力。希望這篇文章對你有所幫助,如果有任何問題或需要進一步的指導,請隨時聯絡我。
感謝你的閱讀,祝你有個美好的一天!
graph TD
A[開始] --> B[創建 .env 檔案]
B --> C[編寫 docker-compose.yml]
C --> D[創建 Dockerfile.pgvector]
D --> E[執行 docker-compose up --build]
E --> F{服務啟動成功?}
F -->|是| G[訪問 pgAdmin]
F -->|否| H[檢查 Docker 日誌]
H --> I[檢查網路配置]
I --> J[檢查環境變數]
J --> E
G --> K[創建新伺服器連接]
K --> L[設置 pgAdmin 連接參數]
L --> M[成功連接 PostgreSQL]