宿主機是ubuntu 22.04版本
ubuntu宿主機上安裝docker,參見官方文檔https://docs.docker.com/engine/install/ubuntu/, docker-ce是社區(qū)版 docker-ee是企業(yè)版
1、檢查Docker是否安裝
root@ODS1SPGOFSDEV:~# docker
Command 'docker' not found, but can be installed with:
snap install docker # version 24.0.5, or
apt install docker.io # version 24.0.5-0ubuntu1~22.04.1
apt install podman-docker # version 3.4.4+ds1-1ubuntu1.22.04.2
See 'snap info docker' for additional versions.
root@ODS1SPGOFSDEV:~#
2、查看Docker各個版本,也可以參見https://download.docker.com/linux/ubuntu/dists/jammy/pool/stable/amd64/
root@ODS1SPGOFSDEV:~# snap info docker
...
channels:
latest/stable: 24.0.5 2024-02-01 (2915) 136MB -
latest/candidate: 24.0.5 2024-02-01 (2915) 136MB -
latest/beta: 24.0.5 2023-10-30 (2915) 136MB -
latest/edge: 24.0.5 2024-01-26 (2920) 136MB -
core18/stable: 20.10.17 2023-03-13 (2746) 146MB -
core18/candidate: ↑
core18/beta: ↑
core18/edge: ↑
root@ODS1SPGOFSDEV:~#
3、設(shè)置 Docker的apt倉庫
# Add Docker's official GPG key:
apt-get update
apt-get install ca-certificates curl
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get update
4、安裝docker20版本
# List the available versions:
apt-cache madison docker-ce | awk '{ print $3 }'
# Select the desired version and install:
VERSION_STRING=5:20.10.24~3-0~ubuntu-jammy
apt-get install docker-ce=$VERSION_STRING docker-ce-cli=$VERSION_STRING containerd.io docker-buildx-plugin docker-compose-plugin
#Verify that the Docker Engine installation is successful by running the hello-world image.
docker run hello-world
docker rmi -f hello-world
#Verify that the Docker is enable to startup while OS Startup
systemctl is-enabled docker
Docker環(huán)境安裝postgresql 15.6
步驟1:下載postgresql 15.6的docker鏡像,首先看有沒有postgresql的docker鏡像,再看有沒有postgresql 15.6的docker鏡像,可以到https://hub.docker.com/_/postgres/tags頁面查找
root@ODS1SPGOFSDEV:~# docker search postgresql --no-trunc --filter is-official=true
root@ODS1SPGOFSDEV:~# docker pull postgres:15.6
步驟2:查看postgresql 15.6的docker鏡像是否下載到了本機
root@ODS1SPGOFSDEV:~# docker images
步驟3:查看postgresql 15.6的docker鏡像信息,比如端口port和變量PGDATA的信息,比如查到"ExposedPorts": {“5432/tcp”: {}}和"PGDATA=/var/lib/postgresql/data"
root@ODS1SPGOFSDEV:~# docker inspect postgres:15.6
步驟4:使用postgresql 15.6的docker鏡像運行docker,一些參數(shù)可能需要修改到本機的信息比如變量PGDATA的信息,運行命令可以參考https://hub.docker.com/_/postgres
root@ODS1SPGOFSDEV:~# docker run -d --name postgresql15.6 --restart=always -e POSTGRES_PASSWORD=Dai2013! -e PGDATA=/pgdata -p 5432:5432 -v /var/lib/docker/volumes/pg_wal/_data:/pgdata postgres:15.6
**備注1:**必須要加-p 5432:5432,前一個5432表示宿主機(本機)的端口,后一個5432表示容器內(nèi)部的端口,一定要把容器內(nèi)部的端口映射到宿主機上,否則只是容器內(nèi)部通信,我們連宿主機就無法連上
不映射的情況下,看到結(jié)果如下。當(dāng)然如果如果把-p 5432:5432改成的話–network=host,這樣也行,不過就是宿主機和容器公共網(wǎng)絡(luò),也就不再需要做端口映射了
root@ODS1SPGOFSDEV:/# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6b1285cdf987 postgres:15.6 "docker-entrypoint.s…" 2 hours ago Up 40 minutes 5432/tcp postgresql15.6
映射的情況下,看到結(jié)果如下
root@ODS1SPGOFSDEV:/# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d3842f39b5f9 postgres:15.6 "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:5432->5432/tcp, :::5432->5432/tcp postgresql15.6
**備注2:**加上-v 來綁定宿主機和容器內(nèi)部的目錄,這個/pgdata就是自定義的docker里面的postgresql的PGDATA環(huán)境變量值,而沒有使用docker里面默認的PGDATA變量值PGDATA=/var/lib/postgresql/data,這個/var/lib/docker/volumes/pg_wal/_data就是我宿主機(本機)掛載的卷,這樣我在宿主機(本機)的目錄/var/lib/docker/volumes/pg_wal/_data就是docker容器里面的目錄/pgdata1,宿主機沒有/pgdata1這個目錄,容器里面也沒有/var/lib/docker/volumes/pg_wal/_data這個目錄,詳情見下面的實驗結(jié)果
如果宿主機目錄是/pgdata/data,docker image中PGDATA變量是/var/lib/postgresql/data,我們只是想把宿主機目錄/pgdata/data綁定到docker目錄/var/lib/postgresql/data而不想更換docker image中PGDATA變量值/var/lib/postgresql/data的話,那么直接執(zhí)行如下就行
root@ODS1SPGOFSDEV:~# docker run -d --name postgresql15.6 --restart=always -e POSTGRES_PASSWORD=Dai2013! -p 5432:5432 -v /pgdata/data:/var/lib/postgresql/data postgres:15.6
**備注3:**發(fā)現(xiàn)這個docker的postgresql的pg_hba.conf文件最后面有一行host all all all scram-sha-256這條信息,所以不再需要額外加host all all 0.0.0.0/0 md5這種信息,外部的程序還是可以連接postgresql不會報錯connection failed: FATAL: no pg_hba.conf entry for host “IP Address”, user “XX”, database “postgres”, SSL off。
步驟5:查看剛剛運行的docker的日志
root@ODS1SPGOFSDEV:~# docker logs postgresql15.6
docker logs 后面可以是docker名稱postgresql15.6(docker run -d --name postgresql15.6 …),也可以是docker id,但是不能是docker image名稱postgres:15.6
docker run -v /var/lib/docker/volumes/pg_wal/_data:/pgdata1時,/var/lib/docker/volumes/pg_wal/_data表示宿主機的目錄,/pgdata1表示容器里面的目錄文章來源:http://www.zghlxwxcb.cn/news/detail-854131.html
root@ODS1SPGOFSDEV:/var/lib/docker/volumes/pg_wal/_data# docker exec -it 6b1285cdf987 /bin/bash
root@6b1285cdf987:/# df -h
Filesystem Size Used Avail Use% Mounted on
overlay 18G 13G 4.1G 76% /
tmpfs 64M 0 64M 0% /dev
shm 64M 1.1M 63M 2% /dev/shm
/dev/mapper/pg_wal_vg-pg_wal 10G 145M 9.9G 2% /pgdata1
/dev/mapper/pg_syslog_vg-pg_syslog 5.0G 68M 5.0G 2% /etc/hosts
tmpfs 7.8G 0 7.8G 0% /proc/acpi
tmpfs 7.8G 0 7.8G 0% /proc/scsi
tmpfs 7.8G 0 7.8G 0% /sys/firmware
root@6b1285cdf987:/#
root@6b1285cdf987:/# ls /pgdata1
base pg_commit_ts pg_hba.conf pg_logical pg_notify pg_serial pg_stat pg_subtrans pg_twophase pg_wal postgresql.auto.conf postmaster.opts
global pg_dynshmem pg_ident.conf pg_multixact pg_replslot pg_snapshots pg_stat_tmp pg_tblspc PG_VERSION pg_xact postgresql.conf postmaster.pid
root@6b1285cdf987:/#
root@6b1285cdf987:/# ls /var/lib/docker/volumes/pg_wal/_data
ls: cannot access '/var/lib/docker/volumes/pg_wal/_data': No such file or directory
root@6b1285cdf987:/#
root@6b1285cdf987:/# exit
exit
root@ODS1SPGOFSDEV:~# ll /pgdata1
ls: cannot access '/pgdata1': No such file or directory
root@ODS1SPGOFSDEV:~#
root@ODS1SPGOFSDEV:~# df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 1.6G 1.7M 1.6G 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 18G 13G 4.1G 76% /
tmpfs 7.8G 0 7.8G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sda2 2.0G 374M 1.5G 21% /boot
/dev/mapper/pg_syslog_vg-pg_syslog 5.0G 68M 5.0G 2% /var/lib/docker/containers
tmpfs 1.6G 0 1.6G 0% /run/user/0
/dev/mapper/pg_wal_vg-pg_wal 10G 143M 9.9G 2% /var/lib/docker/volumes/pg_wal/_data
root@ODS1SPGOFSDEV:~#
root@ODS1SPGOFSDEV:~# ls /var/lib/docker/volumes/pg_wal/_data
base pg_commit_ts pg_hba.conf pg_logical pg_notify pg_serial pg_stat pg_subtrans pg_twophase pg_wal postgresql.auto.conf postmaster.opts
global pg_dynshmem pg_ident.conf pg_multixact pg_replslot pg_snapshots pg_stat_tmp pg_tblspc PG_VERSION pg_xact postgresql.conf postmaster.pid
docker run --network=host是,PORTS一列沒有信息,且docker exec -it dockerid /bin/bash進入容器時,不再像root@d3842f39b5f9這樣顯示容器名,而是直接變成了root@ODS1SPGOFSDEV:/#主機名,只不過~變成了/文章來源地址http://www.zghlxwxcb.cn/news/detail-854131.html
root@ODS1SPGOFSDEV:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c1d3f8f35e27 postgres:15.6 "docker-entrypoint.s…" About an hour ago Up About an hour postgresql15.6
root@ODS1SPGOFSDEV:~#
root@ODS1SPGOFSDEV:~# docker exec -it c1d3f8f35e27 /bin/bash
root@ODS1SPGOFSDEV:/#
到了這里,關(guān)于Docker環(huán)境安裝Postgresql數(shù)據(jù)庫Posrgresql 15.6的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!