Docker环境安装Postgresql数据库Posrgresql 15.6

news/2024/7/9 23:09:13 标签: 数据库, docker, postgresql

宿主机是ubuntu 22.04版本

ubuntu宿主机上安装docker,参见官方文档https://docs.docker.com/engine/install/ubuntu/, docker-ce是社区版 docker-ee是企业版
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、设置 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环境安装postgresql 15.6
步骤1:下载postgresql 15.6的docker镜像,首先看有没有postgresqldocker镜像,再看有没有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,一些参数可能需要修改到本机的信息比如变量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表示容器内部的端口,一定要把容器内部的端口映射到宿主机上,否则只是容器内部通信,我们连宿主机就无法连上
不映射的情况下,看到结果如下。当然如果如果把-p 5432:5432改成的话–network=host,这样也行,不过就是宿主机和容器公共网络,也就不再需要做端口映射了

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

映射的情况下,看到结果如下

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 来绑定宿主机和容器内部的目录,这个/pgdata就是自定义的docker里面的postgresql的PGDATA环境变量值,而没有使用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这个目录,详情见下面的实验结果
如果宿主机目录是/pgdata/data,docker image中PGDATA变量是/var/lib/postgresql/data,我们只是想把宿主机目录/pgdata/data绑定到docker目录/var/lib/postgresql/data而不想更换docker image中PGDATA变量值/var/lib/postgresql/data的话,那么直接执行如下就行

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:**发现这个dockerpostgresql的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表示容器里面的目录

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:/#主机名,只不过~变成了/

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:/#

http://www.niftyadmin.cn/n/5464510.html

相关文章

12、Lua 迭代器

Lua 迭代器 Lua 迭代器泛型 for 迭代器无状态的迭代器多状态的迭代器 Lua 迭代器 迭代器(iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中的确定的地址 在Lua中迭代器是一种支持指…

spring boot自动配置原理-怎样回答这个问题

首先我们说一下自动配置的概念。 自动配置:遵循约定大约配置的原则,在boot程序启动后,起步依赖中的一些bean对象会自动注入到ioc容器 例子 程序引入spring-boot-starter-web 起步依赖,启动后,会自动往ioc容器中注入…

vue实现文件分割与合并

上传文件到蓝奏云&#xff0c;但文件大于100兆&#xff0c;又不想充钱&#xff0c;另辟蹊径。 想着把文件按指定大小进行分割&#xff0c;这里用vue实现。 一、文件分割页面 分割.html <!DOCTYPE html> <html lang"en"><head><meta charset&…

内网穿透的应用-如何在Android Termux上部署MySQL数据库并实现无公网IP远程访问

文章目录 前言1.安装MariaDB2.安装cpolar内网穿透工具3. 创建安全隧道映射mysql4. 公网远程连接5. 固定远程连接地址 前言 Android作为移动设备&#xff0c;尽管最初并非设计为服务器&#xff0c;但是随着技术的进步我们可以将Android配置为生产力工具&#xff0c;变成一个随身…

配置Nexus(Maven私服)不生效问题

问题: 指定maven镜像之后&#xff0c;导包还是爆红。后面改了下一些依赖的版本&#xff0c;发现是从阿里拉的包&#xff08;图中url是非阿里的镜像&#xff09; 解决: 后面发现是自己默认的maven资源改了配置&#xff0c;当时我改过maven镜像  只要把这个配置里的删掉&…

蓝桥杯刷题day13——乘飞机【算法赛】

一、问题描述 等待登机的你看着眼前有老有小长长的队伍十分无聊&#xff0c;你突然想要知道&#xff0c;是否存在两个年龄相仿的乘客。每个乘客的年龄用一个 0 到 36500 的整数表示&#xff0c;两个乘客的年龄相差 365 以内就认为是相仿的。 具体来说&#xff0c;你有一个长度…

搜维尔科技:Manus Prime 3 Mocap数据手套,体验极致的每指触觉!

完全适用于VR虚拟现实场景 特斯拉也在使用的量子数据 Tesla 目前正在使用 MANUS Quantum Metagloves创建一个数据集&#xff0c;帮助他们训练 Tesla 机器人。 量子数据训练QUANTUM AI 我们以类似的方式使用 Quantum Metagloves 来生成一流的手指跟踪数据集&#xff0c;并将其…

SeLinux安全上下文文件

在SeLinux 框架中&#xff0c;需要为每个主体和客体设置好安全上下文。在Android中&#xff0c;常见的安全上下文文件有file_contexts、genfs_contexts、service_contexts、mac_permissions.xml和seapp_contexts file_contexts 根系统中所有文件的安全上下文&#xff0c; 如/…