Docker PostgreSQL容器化部署方式
Docker PostgreSQL容器化部署
PostgreSQL標準軟件基于Bitnami PostgreSQL 構建。當前版本為16.1.0
你可以通過輕云UC部署工具直接安裝部署,也可以手動按如下文檔操作,該項目已經(jīng)全面開源,可以從如下環(huán)境獲取
配置文件地址: https://gitee.com/qingplus/qingcloud-platform
連接到其他容器
使用Docker 容器網(wǎng)絡,應用程序容器可以輕松訪問容器內(nèi)運行的 PostgreSQL 服務器。
連接到同一網(wǎng)絡的容器可以使用容器名稱作為主機名來相互通信。
使用命令行
在此示例中,我們將創(chuàng)建一個 PostgreSQL 客戶端實例,該實例將連接到與客戶端在同一 docker 網(wǎng)絡上運行的服務器實例。
第 1 步:創(chuàng)建網(wǎng)絡
docker network create app-tier --driver bridge
步驟 2:啟動 PostgreSQL 服務器實例
使用命令–network app-tier的參數(shù)docker run將 PostgreSQL 容器連接到網(wǎng)絡app-tier。
docker run -d --name postgresql-server \
--network app-tier \
registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest第 3 步:啟動 PostgreSQL 客戶端實例
最后,我們創(chuàng)建一個新的容器實例來啟動 PostgreSQL 客戶端并連接到上一步中創(chuàng)建的服務器:
docker run -it --rm \
--network app-tier \
registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest psql -h postgresql-server -U postgres使用 Docker Compose 文件
如果未指定,Docker Compose 會自動設置一個新網(wǎng)絡并將所有已部署的服務附加到該網(wǎng)絡。但是,我們將顯式定義一個bridge名為 的新網(wǎng)絡app-tier。
在此示例中,我們假設您希望從您自己的自定義應用程序映像連接到 PostgreSQL 服務器,該映像在以下代碼片段中通過服務名稱進行標識myapp。
version: '2'
networks:
app-tier:
driver: bridge
services:
postgresql:
image: 'registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest'
networks:
- app-tier
myapp:
image: 'YOUR_APPLICATION_IMAGE'
networks:
- app-tier重要:
替換YOUR_APPLICATION_IMAGE占位符
在您的應用程序容器中,使用主機名postgresql連接到 PostgreSQL 服務器
啟動容器:
docker-compose up -d
配置
容器啟動時
當容器執(zhí)行時,初始化或啟動postgresql之前,它會執(zhí)行位于/docker-entrypoint-preinitdb.d的擴展名為.sh的文件。
為了將自定義文件放入 docker 映像中,您可以將它們安裝為卷。
將額外的命令行標志傳遞給 PostgreSQL
可以通過以下環(huán)境變量將額外的命令行標志傳遞給 postgresql 服務命令:
- POSTGRESQL_EXTRA_FLAGS:要附加到postgres啟動命令的標志。無默認值
初始化一個新實例
當容器第一次執(zhí)行時,它將執(zhí)行擴展名為.sh, .sql 和 .sql.gz的文件,位于/docker-entrypoint-initdb.d目錄下.
為了將自定義文件放入 docker 映像中,您可以將它們安裝為卷。
首次運行時設置 root 密碼
在上面的命令中您可能已經(jīng)注意到環(huán)境變量的使用POSTGRESQL_PASSWORD。
首次運行映像時傳遞環(huán)境變量POSTGRESQL_PASSWORD會將postgres用戶的密碼設置為POSTGRESQL_PASSWORD的值(或POSTGRESQL_PASSWORD_FILE變量中指定的文件的內(nèi)容)。
docker run --name postgresql -e POSTGRESQL_PASSWORD=password123 registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest
或者通過修改docker-compose.yml文件:
services:
postgresql:
...
environment:
- POSTGRESQL_PASSWORD=password123
...注意! 該postgres用戶是超級用戶,擁有 PostgreSQL 數(shù)據(jù)庫的完全管理訪問權限。
首次運行時創(chuàng)建數(shù)據(jù)庫
POSTGRESQL_DATABASE通過在第一次運行鏡像時傳遞環(huán)境變量,將創(chuàng)建一個數(shù)據(jù)庫。
如果您的應用程序要求數(shù)據(jù)庫已存在,這非常有用,使您不必使用 PostgreSQL 客戶端手動創(chuàng)建數(shù)據(jù)庫。
docker run --name postgresql -e POSTGRESQL_DATABASE=my_database registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest
或者通過修改docker-compose.yml文件:
services:
postgresql:
...
environment:
- POSTGRESQL_DATABASE=my_database
...首次運行時創(chuàng)建數(shù)據(jù)庫用戶
您還可以創(chuàng)建一個受限數(shù)據(jù)庫用戶,該用戶僅具有使用環(huán)境變量創(chuàng)建的數(shù)據(jù)庫的權限POSTGRESQL_DATABASE。為此,請?zhí)峁㏄OSTGRESQL_USERNAME環(huán)境變量。
docker run --name postgresql -e POSTGRESQL_USERNAME=my_user -e POSTGRESQL_PASSWORD=password123 -e POSTGRESQL_DATABASE=my_database registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest
或者通過修改docker-compose.yml文件:
services:
postgresql:
...
environment:
- POSTGRESQL_USERNAME=my_user
- POSTGRESQL_PASSWORD=password123
- POSTGRESQL_DATABASE=my_database
...注意!POSTGRESQL_USERNAME指定后,postgres user不會分配密碼,因此您無法以該postgres用戶身份遠程登錄 PostgreSQL 服務器。
如果您仍想使用用戶postgres進行訪問,請設置POSTGRESQL_POSTGRES_PASSWORD環(huán)境變量(或POSTGRESQL_POSTGRES_PASSWORD_FILE指定文件中內(nèi)容)。
審計
PostgreSQL image默認啟用 pgAudit 模塊。因此,可以使用以下環(huán)境變量在容器中啟用審核信息:
POSTGRESQL_PGAUDIT_LOG:以逗號分隔的列表,其中包含要審核的不同操作。沒有默認值。POSTGRESQL_PGAUDIT_LOG_CATALOG:在語句中的所有關系都在 pg_catalog 中的情況下啟用會話日志記錄。沒有默認值。POSTGRESQL_LOG_CONNECTIONS:添加登錄日志條目。沒有默認值。POSTGRESQL_LOG_DISCONNECTIONS:添加注銷日志條目。沒有默認值。POSTGRESQL_LOG_HOSTNAME:記錄客戶端主機名。沒有默認值。POSTGRESQL_LOG_LINE_PREFIX:定義日志條目行的格式。在PostgreSQL 官方文檔中查找字符串參數(shù)。沒有默認值。POSTGRESQL_LOG_TIMEZONE:設置日志條目時間戳的時區(qū)。沒有默認值。
會話設置
PostgreSQL 映像允許配置多個連接和會話管理參數(shù):
POSTGRESQL_USERNAME_CONNECTION_LIMIT:如果創(chuàng)建了不同的用戶postgres,請設置連接限制。沒有默認值。POSTGRESQL_POSTGRES_CONNECTION_LIMIT:設置用戶的連接限制postgres。沒有默認值。POSTGRESQL_STATEMENT_TIMEOUT:設置語句超時時間。沒有默認值。POSTGRESQL_TCP_KEEPALIVES_INTERVAL:TCP 保活間隔。沒有默認值。POSTGRESQL_TCP_KEEPALIVES_IDLE:TCP keepalive 空閑時間。沒有默認值。POSTGRESQL_TCP_KEEPALIVES_COUNT:TCP ?;钣嫈?shù)。沒有默認值。
配置時區(qū)
PostgreSQL 映像允許使用以下環(huán)境變量配置 PostgreSQL 的時區(qū):
POSTGRESQL_TIMEZONE:設置顯示和解釋時間戳的時區(qū)。POSTGRESQL_LOG_TIMEZONE:設置寫入服務器日志的時間戳所使用的時區(qū)。
修改pg_hba.conf
默認情況下,PostgreSQL image會生成local、md5 在pg_hba.conf文件。
為了適應任何其他要求或標準,可以通過以下方式更改 pg_hba.conf 文件:
- 掛載你自己的pg_hba.conf 到文件/bitnami/postgresql/conf
- POSTGRESQL_PGHBA_REMOVE_FILTERS將與以逗號分隔的模式列表一起使用。所有與任何模式匹配的行都將被刪除。
- 例如,如果我們想要刪除所有l(wèi)ocal和md5驗證(例如,僅支持hostssl連接),請設置POSTGRESQL_PGHBA_REMOVE_FILTERS=local, md5.
預加載共享庫
可以通過設置 .postgresql 文件來修改 PostgreSQL 在啟動時預加載的庫列表POSTGRESQL_SHARED_PRELOAD_LIBRARIES。
默認值為POSTGRESQL_SHARED_PRELOAD_LIBRARIES=pgaudit。
例如,如果您想將pg_stat_statements庫添加到預加載中,請設置POSTGRESQL_SHARED_PRELOAD_LIBRARIES=pgaudit, pg_stat_statements。
設置流式復制
可以使用以下環(huán)境變量設置流復制集群:
POSTGRESQL_REPLICATION_MODE:復制模式??赡艿闹祄aster/ slave。沒有默認值。POSTGRESQL_REPLICATION_USER:首次運行時在主服務器上創(chuàng)建的復制用戶。沒有默認值。POSTGRESQL_REPLICATION_PASSWORD:復制用戶密碼。沒有默認值。POSTGRESQL_REPLICATION_PASSWORD_FILE:包含復制用戶密碼的文件的路徑。這將覆蓋 中指定的值POSTGRESQL_REPLICATION_PASSWORD。沒有默認值。POSTGRESQL_MASTER_HOST:復制主機的主機名/IP(從機參數(shù))。沒有默認值。POSTGRESQL_MASTER_PORT_NUMBER:復制主機的服務器端口(從機參數(shù))。默認為5432.在復制集群中,您可以擁有一個主服務器和零個或多個從服務器。啟用復制后,主節(jié)點處于讀寫模式,而從節(jié)點處于只讀模式。為了獲得最佳性能,建議限制對從屬設備的讀取。
第 1 步:創(chuàng)建復制主服務器
第一步是啟動master。
docker run --name postgresql-master \ -e POSTGRESQL_REPLICATION_MODE=master \ -e POSTGRESQL_USERNAME=my_user \ -e POSTGRESQL_PASSWORD=password123 \ -e POSTGRESQL_DATABASE=my_database \ -e POSTGRESQL_REPLICATION_USER=my_repl_user \ -e POSTGRESQL_REPLICATION_PASSWORD=my_repl_password \ registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest
在此命令中,我們使用參數(shù)將容器配置為主容器POSTGRESQL_REPLICATION_MODE=master。
POSTGRESQL_REPLICATION_USER使用和參數(shù)指定復制用戶POSTGRESQL_REPLICATION_PASSWORD。
第2步:創(chuàng)建復制從站
接下來我們啟動一個復制從屬容器。
docker run --name postgresql-slave \ --link postgresql-master:master \ -e POSTGRESQL_REPLICATION_MODE=slave \ -e POSTGRESQL_MASTER_HOST=master \ -e POSTGRESQL_MASTER_PORT_NUMBER=5432 \ -e POSTGRESQL_REPLICATION_USER=my_repl_user \ -e POSTGRESQL_REPLICATION_PASSWORD=my_repl_password \ registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest
在上面的命令中,容器被配置為slave使用POSTGRESQL_REPLICATION_MODE參數(shù)。
在復制從屬啟動之前,從屬容器使用POSTGRESQL_MASTER_HOST和POSTGRESQL_MASTER_PORT_NUMBER參數(shù)連接到主服務器并從主服務器復制初始數(shù)據(jù)庫。
POSTGRESQL_REPLICATION_PASSWORD和POSTGRESQL_REPLICATION_USER用于向主服務器進行身份驗證。為了更改pg_hba.conf默認設置,從站需要知道是否POSTGRESQL_PASSWORD已設置。
通過這兩個命令,您現(xiàn)在已經(jīng)啟動并運行了一個兩節(jié)點 PostgreSQL 主從流復制集群。您可以通過添加/刪除從屬服務器來擴展集群,而不會導致任何停機。
注意:集群會完整復制主節(jié)點,其中包括所有用戶和數(shù)據(jù)庫。
如果主服務器出現(xiàn)故障,您可以重新配置從服務器以充當主服務器,并通過創(chuàng)建觸發(fā)器文件開始接受寫入/tmp/postgresql.trigger.5432。
例如,以下命令重新配置postgresql-slave為充當主服務器:
docker exec postgresql-slave touch /tmp/postgresql.trigger.5432
注意:集群中其他從站的配置需要更新,以便它們知道新的主站。–link postgresql-slave:master這將要求您按照我們的示例重新啟動其他從站。
通過 Docker Compose,可以使用以下命令設置主從復制:
version: '2'
services:
postgresql-master:
image: 'registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest'
ports:
- '5432'
volumes:
- 'postgresql_master_data:/bitnami/postgresql'
environment:
- POSTGRESQL_REPLICATION_MODE=master
- POSTGRESQL_REPLICATION_USER=repl_user
- POSTGRESQL_REPLICATION_PASSWORD=repl_password
- POSTGRESQL_USERNAME=my_user
- POSTGRESQL_PASSWORD=my_password
- POSTGRESQL_DATABASE=my_database
postgresql-slave:
image: 'registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest'
ports:
- '5432'
depends_on:
- postgresql-master
environment:
- POSTGRESQL_REPLICATION_MODE=slave
- POSTGRESQL_REPLICATION_USER=repl_user
- POSTGRESQL_REPLICATION_PASSWORD=repl_password
- POSTGRESQL_MASTER_HOST=postgresql-master
- POSTGRESQL_PASSWORD=my_password
- POSTGRESQL_MASTER_PORT_NUMBER=5432
volumes:
postgresql_master_data:使用以下方法擴展從站數(shù)量:
docker-compose up --detach --scale postgresql-master=1 --scale postgresql-slave=3
上面的命令將 Slave 的數(shù)量增加到3。您可以用同樣的方法縮小規(guī)模。
注意:您不應增加/減少主節(jié)點的數(shù)量。始終只有一個主節(jié)點運行。
同步提交
默認情況下,從屬實例配置為異步復制。為了保證更多的數(shù)據(jù)穩(wěn)定性(以一些性能為代價),可以使用以下環(huán)境設置同步提交(即事務提交在被寫入一組副本之前不會向客戶端返回成功)變量。
POSTGRESQL_SYNCHRONOUS_COMMIT_MODE:建立同步提交的類型??捎眠x項有:on,remote_apply,remote_write,localandoff。默認值為on。POSTGRESQL_NUM_SYNCHRONOUS_REPLICAS:建立將啟用同步復制的副本數(shù)量。該數(shù)量不得超過您在集群中配置的從站數(shù)量。
使用 Docker Compose,可以按如下方式設置具有同步提交的主從復制:
version: '2'
services:
postgresql-master:
image: 'registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest'
ports:
- '5432'
volumes:
- 'postgresql_master_data:/bitnami/postgresql'
environment:
- POSTGRESQL_REPLICATION_MODE=master
- POSTGRESQL_REPLICATION_USER=repl_user
- POSTGRESQL_REPLICATION_PASSWORD=repl_password
- POSTGRESQL_USERNAME=my_user
- POSTGRESQL_PASSWORD=my_password
- POSTGRESQL_DATABASE=my_database
- POSTGRESQL_SYNCHRONOUS_COMMIT_MODE=on
- POSTGRESQL_NUM_SYNCHRONOUS_REPLICAS=1
volumes:
- '/path/to/postgresql-persistence:/bitnami/postgresql'
postgresql-slave:
image: 'registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest'
ports:
- '5432'
depends_on:
- postgresql-master
environment:
- POSTGRESQL_REPLICATION_MODE=slave
- POSTGRESQL_REPLICATION_USER=repl_user
- POSTGRESQL_REPLICATION_PASSWORD=repl_password
- POSTGRESQL_MASTER_HOST=postgresql-master
- POSTGRESQL_MASTER_PORT_NUMBER=5432
postgresql-slave2:
image: 'registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest'
ports:
- '5432'
depends_on:
- postgresql-master
environment:
- POSTGRESQL_REPLICATION_MODE=slave
- POSTGRESQL_REPLICATION_USER=repl_user
- POSTGRESQL_REPLICATION_PASSWORD=repl_password
- POSTGRESQL_MASTER_HOST=postgresql-master
- POSTGRESQL_MASTER_PORT_NUMBER=5432在上面的示例中,提交需要寫入主服務器和從服務器之一才能被接受。另一個從站將繼續(xù)使用異步復制。
使用以下 SQL 查詢檢查它:
postgres=# select application_name as server, state, postgres-# sync_priority as priority, sync_state postgres-# from pg_stat_replication; | server | state | priority | sync_state | |-------------|-----------|----------|------------| | walreceiver | streaming | 0 | sync | | walreceiver | streaming | 0 | async |
注意:對于更高級的設置,您可以application_name通過設置POSTGRESQL_CLUSTER_APP_NAME環(huán)境變量來使用參數(shù)定義不同的復制組。
LDAP認證
為了使用 LDAP 身份驗證,您需要將環(huán)境變量設置POSTGRESQL_ENABLE_LDAP為yes來啟用它。
有兩種設置 LDAP 配置的方法:
- 通過配置POSTGRESQL_LDAP_URL,您可以在其中配置URL中的所有關聯(lián)參數(shù)。
- 獨立設置參數(shù)POSTGRESQL_LDAP_xxxx。
LDAP相關參數(shù)有:
POSTGRESQL_LDAP_SERVER:要連接的 LDAP 服務器的 IP 地址或名稱。用空格分隔。POSTGRESQL_LDAP_PORT:LDAP 服務器上要連接的端口號POSTGRESQL_LDAP_SCHEME:設置為ldaps使用 LDAPS。默認為無。POSTGRESQL_LDAP_TLS:設置為1使用 TLS 加密。默認為無。POSTGRESQL_LDAP_PREFIX:形成要綁定的 DN 時要添加到用戶名前面的字符串。默認為無。POSTGRESQL_LDAP_SUFFIX:形成要綁定的 DN 時附加到用戶名的字符串。默認為無。POSTGRESQL_LDAP_BASE_DN:開始搜索用戶的根 DN。默認為無。POSTGRESQL_LDAP_BIND_DN:要綁定到 LDAP 的用戶的 DN。默認為無。POSTGRESQL_LDAP_BIND_PASSWORD:綁定LDAP的用戶密碼。默認為無。POSTGRESQL_LDAP_SEARCH_ATTR:與搜索中的用戶名匹配的屬性。默認為無。POSTGRESQL_LDAP_SEARCH_FILTER:進行搜索+綁定身份驗證時使用的搜索過濾器。默認為無。POSTGRESQL_LDAP_URL:要連接的 URL,格式為:ldap[s]??/host[:port]/basedn[?[attribute][?[scope][?[filter]]]]。
保護 PostgreSQL 流量
PostgreSQL 支持使用 SSL/TLS 協(xié)議對連接進行加密。如果您希望啟用此可選功能,您可以使用以下環(huán)境變量來配置應用程序:
POSTGRESQL_ENABLE_TLS:是否對流量啟用 TLS。默認為no.POSTGRESQL_TLS_CERT_FILE:包含 TLS 流量證書文件的文件。沒有默認值。POSTGRESQL_TLS_KEY_FILE:包含證書密鑰的文件。沒有默認值。POSTGRESQL_TLS_CA_FILE:包含證書 CA 的文件。如果提供,PostgreSQL 將通過請求證書來驗證 TLS/SSL 客戶端(請參閱ref)。沒有默認值。POSTGRESQL_TLS_CRL_FILE:包含證書吊銷列表的文件。沒有默認值。POSTGRESQL_TLS_PREFER_SERVER_CIPHERS:是否使用服務器的 TLS 密碼首選項而不是客戶端的。默認為yes.
啟用 TLS 時,PostgreSQL 默認情況下將支持標準流量和加密流量,但更喜歡后者。下面是一些有關如何快速設置 TLS 流量的示例:
使用docker run
```console
$ docker run \
-v /path/to/certs:/opt/bitnami/postgresql/certs \
-e ALLOW_EMPTY_PASSWORD=yes \
-e POSTGRESQL_ENABLE_TLS=yes \
-e POSTGRESQL_TLS_CERT_FILE=/opt/bitnami/postgresql/certs/postgres.crt \
-e POSTGRESQL_TLS_KEY_FILE=/opt/bitnami/postgresql/certs/postgres.key \
registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest
```修改docker-compose.yml文件:
```yaml
services:
postgresql:
...
environment:
...
- POSTGRESQL_ENABLE_TLS=yes
- POSTGRESQL_TLS_CERT_FILE=/opt/bitnami/postgresql/certs/postgres.crt
- POSTGRESQL_TLS_KEY_FILE=/opt/bitnami/postgresql/certs/postgres.key
...
volumes:
...
- /path/to/certs:/opt/bitnami/postgresql/certs
...
```或者,您也可以在自定義配置文件中提供此配置。
配置文件
該圖像在 中查找postgresql.conf文件/opt/bitnami/postgresql/conf/。
您可以在以下位置安裝卷/bitnami/postgresql/conf/并復制/編輯. 如果該目錄為空,則默認配置將被填充到該目錄中。
postgresql.conf/path/to/postgresql-persistence/conf/conf/
/path/to/postgresql-persistence/conf/ └── postgresql.conf 0 directories, 1 file
由于 PostgreSQL 映像是非 root 的,因此您需要為主機中的掛載目錄設置適當?shù)臋嘞蓿?/p>
sudo chown 1001:1001 /path/to/postgresql-persistence/conf/
第 1 步:運行 PostgreSQL 映像
運行 PostgreSQL 映像,從主機安裝目錄。
docker run --name postgresql \
-v /path/to/postgresql-persistence/conf/:/bitnami/postgresql/conf/ \
registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest或使用 Docker Compose:
version: '2'
services:
postgresql:
image: 'registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest'
ports:
- '5432:5432'
volumes:
- /path/to/postgresql-persistence/conf/:/bitnami/postgresql/conf/第 2 步:編輯配置
使用您喜歡的編輯器編輯主機上的配置。
vi /path/to/postgresql-persistence/conf/postgresql.conf
第三步:重啟PostgreSQL
更改配置后,重新啟動 PostgreSQL 容器以使更改生效。
docker restart postgresql
或使用 Docker Compose:
docker-compose restart postgresql
有關配置選項的完整列表,請參閱服務器配置手冊。
允許從默認文件以外的文件加載設置postgresql.conf
除了使用自定義之外postgresql.conf,您還可以包含.conf以conf.d目錄結尾的文件/bitnami/postgresql/conf/。為此,默認postgresql.conf包含以下部分:
##------------------------------------------------------------------------------ ## CONFIG FILE INCLUDES ##------------------------------------------------------------------------------ ## These options allow settings to be loaded from files other than the ## default postgresql.conf. include_dir = 'conf.d' # Include files ending in '.conf' from directory 'conf.d'
在您的主機中,您應該在目錄下創(chuàng)建擴展配置文件conf.d:
mkdir -p /path/to/postgresql-persistence/conf/conf.d/ vi /path/to/postgresql-persistence/conf/conf.d/extended.conf
如果您使用自定義的postgresql.conf,您應該在配置文件中創(chuàng)建(或取消注釋)上述部分,在這種情況下,/path/to/postgresql-persistence/conf/結構應該類似于
/path/to/postgresql-persistence/conf/ ├── conf.d │ └── extended.conf └── postgresql.conf 1 directory, 2 files
指定 initdb 參數(shù)
使用以下環(huán)境變量可以輕松指定額外的 initdb 參數(shù):
POSTGRESQL_INITDB_ARGS:指定 initdb 命令的額外參數(shù)。沒有默認值。POSTGRESQL_INITDB_WAL_DIR:定義事務日志的自定義位置。沒有默認值。
docker run --name postgresql \ -e POSTGRESQL_INITDB_ARGS="--data-checksums" \ -e POSTGRESQL_INITDB_WAL_DIR="/bitnami/waldir" \ registry.cn-hangzhou.aliyuncs.com/qingcloudtech/postgresql:latest
或者通過修改docker-compose.yml文件:
services:
postgresql:
...
environment:
- POSTGRESQL_INITDB_ARGS=--data-checksums
- POSTGRESQL_INITDB_WAL_DIR=/bitnami/waldir
...停止設置
您可以使用以下命令控制初始化過程中用于停止 postgresql 的參數(shù):
POSTGRESQL_PGCTLTIMEOUT這將設置命令的超時pg_ctl。POSTGRESQL_SHUTDOWN_MODE這將指示所使用的關閉模式。
安裝額外的語言環(huán)境
Dockerfile 提供了兩個參數(shù)來在構建時配置額外的區(qū)域設置:
WITH_ALL_LOCALES:啟用所有支持的區(qū)域設置。默認值:否EXTRA_LOCALES:要啟用的額外區(qū)域設置的逗號分隔列表。無默認值
例如,要構建支持區(qū)域設置的映像es_ES.UTF-8 UTF-8,您可以將以下參數(shù)添加到構建命令中:
docker build --build-arg EXTRA_LOCALES="es_ES.UTF-8 UTF-8" ...
環(huán)境變量別名
容器允許兩組不同的環(huán)境變量。請參閱下表中的環(huán)境變量別名列表:
| 環(huán)境變量 | 別名 |
|---|---|
| POSTGRESQL_USERNAME | POSTGRES_USER |
| POSTGRESQL_DATABASE | POSTGRES_DB |
| POSTGRESQL_PASSWORD | POSTGRES_PASSWORD |
| POSTGRESQL_PASSWORD_FILE | POSTGRES_PASSWORD_FILE |
| POSTGRESQL_POSTGRES_PASSWORD | POSTGRES_POSTGRES_PASSWORD |
| POSTGRESQL_POSTGRES_PASSWORD_FILE | POSTGRES_POSTGRES_PASSWORD_FILE |
| POSTGRESQL_PORT_NUMBER | POSTGRES_PORT_NUMBER |
| POSTGRESQL_INITDB_ARGS | POSTGRES_INITDB_ARGS |
| POSTGRESQL_INITDB_WAL_DIR | POSTGRES_INITDB_WAL_DIR |
| POSTGRESQL_DATA_DIR | PGDATA |
| POSTGRESQL_REPLICATION_USER | POSTGRES_REPLICATION_USER |
| POSTGRESQL_REPLICATION_MODE | POSTGRES_REPLICATION_MODE |
| POSTGRESQL_REPLICATION_PASSWORD | POSTGRES_REPLICATION_PASSWORD |
| POSTGRESQL_REPLICATION_PASSWORD_FILE | POSTGRES_REPLICATION_PASSWORD_FILE |
| POSTGRESQL_CLUSTER_APP_NAME | POSTGRES_CLUSTER_APP_NAME |
| POSTGRESQL_MASTER_HOST | POSTGRES_MASTER_HOST |
| POSTGRESQL_MASTER_PORT_NUMBER | POSTGRES_MASTER_PORT_NUMBER |
| POSTGRESQL_NUM_SYNCHRONOUS_REPLICAS | POSTGRES_NUM_SYNCHRONOUS_REPLICAS |
| POSTGRESQL_SYNCHRONOUS_COMMIT_MODE | POSTGRES_SYNCHRONOUS_COMMIT_MODE |
| POSTGRESQL_SHUTDOWN_MODE | POSTGRES_SHUTDOWN_MODE |
重要信息:
- 更改POSTGRES_USER不會更改數(shù)據(jù)庫的所有者,數(shù)據(jù)庫的所有者將繼續(xù)作為用戶postgres。
- 要更改數(shù)據(jù)庫所有者,請使用postgres用戶 ( $ psql -U postgres …) 訪問并執(zhí)行以下命令:
alter database POSTGRES_DATABASE owner to POSTGRES_USER;
可以更改 PostgreSQL 用于執(zhí)行 init 腳本的用戶。
為此,請使用以下環(huán)境變量:
| 環(huán)境變量 | 描述 |
|---|---|
| POSTGRESQL_INITSCRIPTS_USERNAME | 將用于執(zhí)行初始化腳本的用戶 |
| POSTGRESQL_INITSCRIPTS_PASSWORD | POSTGRESQL_INITSCRIPT_USERNAME 中指定的用戶的密碼 |
默認 toast 壓縮
默認的 toast 壓縮是pglz,但您可以通過將環(huán)境變量設置POSTGRES_DEFAULT_COMPRESSION為所需的值來修改它。
例如:POSTGRES_DEFAULT_COMPRESSION=‘lz4’。
日志
docker logs postgresql
或使用 Docker Compose:
docker-compose logs postgresql
你可以通過輕云UC部署工具直接安裝部署,也可以手動按如下文檔操作,該項目已經(jīng)全面開源,可以從如下環(huán)境獲取
開源地址: https://gitee.com/qingplus/qingcloud-platform
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
- docker快速部署postgresql的完整步驟記錄
- Docker 部署 PostgreSQL數(shù)據(jù)庫的兩種方式
- Docker部署PostgreSQL數(shù)據(jù)庫及操作方法詳解
- Docker Compose安裝部署PostgreSQL數(shù)據(jù)庫的實現(xiàn)步驟
- 在docker上部署postgreSQL主從的超詳細步驟
- PostgreSQL部署邏輯復制過程詳解
- 一步步教你用docker部署postgreSQL數(shù)據(jù)庫
- PostgreSQL數(shù)據(jù)庫遷移部署實戰(zhàn)教程
- postgresql 12版本搭建及主備部署操作
- postgresql數(shù)據(jù)庫安裝部署搭建主從節(jié)點的詳細過程(業(yè)務庫)
- RockyLinux9.5部署PostgreSQL的實現(xiàn)步驟
相關文章
基于Docker+K8S+GitLab/SVN+Jenkins+Harbor搭建持續(xù)集成交付環(huán)境的詳細教程
K8S全稱是Kubernetes,是一個全新的基于容器技術的分布式架構領先方案,這篇文章主要介紹了基于Docker+K8S+GitLab/SVN+Jenkins+Harbor搭建持續(xù)集成交付環(huán)境(環(huán)境搭建篇),對docker K8S持續(xù)集成交付環(huán)境相關知識感興趣的朋友一起看看吧2021-05-05
win7環(huán)境下Docker快速構建及阿里云容器加速配置詳解
這篇文章主要介紹了win7環(huán)境下Docker快速構建及阿里云容器加速配置詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-09-09
Windows Docker部署Jenkins的實現(xiàn)步驟
Jenkins是一款開源的持續(xù)集成工具,廣泛用于項目開發(fā),能提供自動構建測試部署等功能,本文主要介紹了Windows Docker部署Jenkins的實現(xiàn)步驟,感興趣的可以了解一下2024-03-03
docker部署elasticsearch和xpack密碼的詳細過程
本文主要介紹在docker環(huán)境下如何快速部署elasticsearch單機版本和集群版本,和增加xpack簡單用戶名密碼配置,文中有相關的代碼示例供大家參考,需要的朋友可以參考下2024-01-01

