一哥力、實(shí)驗(yàn)環(huán)境
操作系統(tǒng): CentOS7.5 Mininmal
IP: 192.168.1.104
docker版本:18.06.0-ce
posgres鏡像版本:9.6
二唇敞、安裝docker
關(guān)閉selinux
# setenforce 0
# sed? -i? 's/^SELINUX=.*/SELINUX=permissive/g'? /etc/selinux/config
下載docker二進(jìn)制安裝包
# yum? -y install? ?wget?
# wget? ?https://download.docker.com/linux/static/stable/x86_64/docker-18.06.0-ce.tgz
#? tar -zxf? ?docker-18.06.0-ce.tgz
#? ll? ?./docker
# cp ./docker/docker*? ?/usr/bin
?創(chuàng)建docker服務(wù)的unit文件
# vim ?/etc/systemd/system/docker.service
##############################################################
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
##############################################
啟動(dòng)docker服務(wù),設(shè)置開(kāi)機(jī)自啟
# systemctl daemon-reload
# systemctl start docker
# systemctl ?status docker
# systemctl enable docker
# docker ?info
# docker ?version
設(shè)置鏡像加速
#? curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
#? systemctl restart docker
三零远、初始化Postgres
拉取postgre 9.6 版本鏡像
# docker pull postgres:9.6
# docker images
# docker run -it --rm?postgres:9.6? cat /etc/issue
# docker run -it --rm postgres:9.6 cat /etc/passwd
創(chuàng)建postgres數(shù)據(jù)存儲(chǔ)目錄
#? mkdir? ?-p? ?/var/lib/postgresql/data
創(chuàng)建postgres容器
#?docker run -it \
? --name postgres \
-e??POSTGRES_USER="postgres" \
-e?POSTGRES_DB="postgres" \
? -e POSTGRES_PASSWORD="Postgres@123"? \
? -v /var/lib/postgresql/data:/var/lib/postgresql/data \
? -p 5432:5432 \
? postgres:9.6
此處容器創(chuàng)建我們用到了幾個(gè)環(huán)境變量:
-e??POSTGRES_USER="postgres"?
-e?POSTGRES_DB="postgres"?
?-e POSTGRES_PASSWORD="Postgres@123"
表示創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)管理員用戶(hù) postgres,初始庫(kù)為postgres厌蔽,密碼設(shè)置為Postgres@123
更多環(huán)境變量參考官方文檔:https://docs.docker.com/samples/library/postgres
# docker ps -a
# ss? -tan? | grep? 5432
開(kāi)放相關(guān)端口
#? firewall-cmd --zone=public? --add-port=5432/tcp --permanent
#? firewall-cmd --reload
命令行登錄數(shù)據(jù)庫(kù)
# docker exec -it -u postgres? ?postgres? ?bash
$ id
$ psql
postgres=# \l
創(chuàng)建的數(shù)據(jù)庫(kù)牵辣,默認(rèn)開(kāi)放的用戶(hù)的遠(yuǎn)程登錄
查看初始化的生成的數(shù)據(jù)庫(kù)目錄下數(shù)據(jù)
# ll /var/lib/postgresql/
# ll /var/lib/postgresql/data/
可以看出,我們創(chuàng)建的postgres的生成的持久化存儲(chǔ)的文件中包括了postgres的配置文件:
/var/lib/postgresql/data/postgresql.conf
/var/lib/postgresql/data/pg_hba.conf
/var/lib/postgresql/data/pg_ident.conf
如果需做相關(guān)配置變更奴饮,更改相應(yīng)的文件纬向,重啟服務(wù)生效择浊。
四、將postgres服務(wù)注冊(cè)成系統(tǒng)服務(wù)
刪掉初始化容器
# docker stop postgres
# docker rm postgres
創(chuàng)建postgres的systemd Unit文件
# vim /etc/systemd/system/postgres.service
#######################################################
[Unit]
Description=Postgres Server
After=network-online.target docker.service
Requires=docker.service
[Service]
ExecStartPre=-/usr/bin/docker rm -f postgres
ExecStart=/usr/bin/docker run \
? --name postgres \
? -p 5432:5432 \
? -v /var/lib/postgresql/data:/var/lib/postgresql/data \
? postgres:9.6
ExecStop=/usr/bin/docker stop postgres
LimitNOFILE=65535
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
########################################################
你應(yīng)該注意到了逾条,Unit文件中琢岩,docker run的參數(shù)中并不需要初始化那會(huì)的環(huán)境變量了
因?yàn)槌跏蓟瘯r(shí)已持久化存儲(chǔ)在數(shù)據(jù)庫(kù)目錄中了,啟動(dòng)時(shí)會(huì)去讀取膳帕,不用再以明文形式寫(xiě)入文件粘捎,增強(qiáng)了安全性!
重新啟動(dòng)服務(wù)
#?systemctl daemon-reload
#?systemctl start postgres
#?systemctl status postgres
#?systemctl enable postgres
五危彩、網(wǎng)頁(yè)版postgreSQL數(shù)據(jù)庫(kù)管理工具
pgAdmin?是一個(gè)非常流行攒磨、功能強(qiáng)大并且開(kāi)源的 PostgreSQL 管理與開(kāi)發(fā)平臺(tái)。
pgAdmin 支持 Linux汤徽、Unix娩缰、Mac OS X 以及 Windows 操作系統(tǒng),可以管理 PostgreSQL 9.2 以及更高版本谒府。
pgAdmin 4 (Windows)
https://www.pgadmin.org/download/pgadmin-4-windows
http://127.0.0.1:59484/browser/#
pgAdmin 支持多語(yǔ)言界面拼坎,默認(rèn)為英語(yǔ)。
我們將其改為中文界面完疫,點(diǎn)擊“File”下拉菜單泰鸡,選擇“Preferences”,找到左側(cè)列表中的“miscellaneous” -> “User language”壳鹤,然后在右側(cè)下拉列表中選項(xiàng)“Chinese (Simplified)”盛龄。
最后點(diǎn)擊“Save”保存設(shè)置,需要重新打開(kāi)或者刷新瀏覽器才能生效
六芳誓、參考
postgres
https://docs.docker.com/samples/library/postgres
【Docker】CentOS7.x上docker的安裝方式
http://www.reibang.com/p/d1a07a13a76f
【Docker&MySQL】CentOS7.x上容器部署MySQL
http://www.reibang.com/p/c74b1d2d8ad4
Dockerfile to build a PostgreSQL container image which can be linked to other containers
https://github.com/sameersbn/docker-postgresql
命令行方式登錄PostgreSQL
https://www.cnblogs.com/xxfcz/p/6483892.html
PostgreSQL 管理工具之 pgAdmin
https://blog.csdn.net/horses/article/details/90665711
PostgreSQL pg_hba.conf 文件簡(jiǎn)析
https://www.cnblogs.com/hiloves/archive/2011/08/20/2147043.html
PostgreSQL pg_ident.conf 文件簡(jiǎn)析
https://www.cnblogs.com/hiloves/archive/2011/08/24/2152144.html