啟動一個 Postgres 實例
docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d daocloud.io/postgres
這個鏡像會導出 Postgres 的 5432 端口, 因此通過標准的link
機制就可以方便的訪問 Postgres 數據庫實例。 容器啟動時會通過initdb
自動創建默認的 postgres
用戶和數據庫。 數據庫postgres
是可以被用戶,工具和第三方應用程序訪問的默認數據庫。
參考Postgres 文檔。
從應用中連接數據庫
docker run --name some-app --link some-postgres:postgres -d application-that-uses-postgres
或者通過 psql
docker run -it --link some-postgres:postgres --rm postgres sh -c 'exec psql -h "$POSTGRES_PORT_5432_TCP_ADDR" -p "$POSTGRES_PORT_5432_TCP_PORT" -U postgres'
環境變量
Postgres 鏡像通過一系列環境變量來配置容器,雖然這些環境變量都不是必須的,但是它們會極大的方便您使用鏡像。
POSTGRES_PASSWORD
推薦您使用鏡像時指定這個環境變量,它用來設置超級用戶的密碼。 默認的超級用戶是由環境變量POSTGRES_USER
指定的。 在開始的例子中,超級用戶密碼被設置為 "mysecretpassword"。
POSTGRES_USER
這個可選的環境變量是搭配POSTGRES_PASSWORD
一起來設置用戶名和密碼的,它會創建一個指定名稱的超級管理員和同名數據庫。 如果沒有設置這個環境變量,將使用默認值postgres
。
如何擴展這個鏡像
如果您希望在這個鏡像的派生鏡像中執行額外的初始化工作,可以在/docker-entrypoint-init.d
目錄下增加*.sh
腳本 (如果該目錄不存在則創建目錄),在初始化過程調用initdb
創建默認的postgres
用戶和數據庫后,它會執行該目錄下的所有*.sh
腳本完成額外初始化操作再啟動服務。
如果您希望在初始化中執行 SQL 語句,強烈建議您使用 Postgres 單用戶模式。
您還可以通過一個簡單的Dockerfile
設置locale
,下面這個例子將設置默認的locale
為de_DE.utf8
:
FROM daocloud.io/postgres:9.4
RUN localedef -i de_DE -c -f UTF-8 -A /usr/share/locale/locale.alias de_DE.UTF-8
ENV LANG de_DE.utf8
因為數據庫初始化僅發生在容器啟動時,因此您可以在數據庫創建前設置語言。
注意
如果容器啟動時沒有數據庫,Postgres 會為您創建一個默認數據庫。雖然這是 Postgres 正常的行為,但它意味着在這個階段數據庫是不接受連接請求的。 這個行為會對一些自動化工具產生影響,比如 docker-compose
會同時啟動多個容器。
支持的Docker版本
這個鏡像在 Docker 1.7.0 上提供最佳的官方支持,對於其他老版本的 Docker(1.0 之后)也能提供基本的兼容。