Docker安装Postgres_16数据库

news2025/3/4 12:01:23

PostgreSQL简介

PostgreSQL 是一个功能强大、开源的关系型数据库管理系统(RDBMS),以其可靠性、功能丰富性和可扩展性而闻名。它支持复杂的查询、事务完整性、并发控制以及多种数据类型和扩展功能,适用于各种规模的应用程序; 适用传统的IT服务系统关系型数据库开发与应用,也适用于互联网行业高并发、大数据量存储等数据需求;

Portainer拉取镜像

在Portainer平台Images界面Image的文本框中输入postgres:16.6,点击Pull the image即开始远程到(Docker Hub)中央仓库拉取image镜像文件,如果不确定可用的镜像版本有哪些,可以点击Search跳转到docker官方中央仓库平台,检索postgres相关资源与可用tags标签;
进入postgres镜像资源详情页,展示了所有可用版本tags标签以及官方提供的Dockerfile版本;根据我们的需要来选择,本文中选择的是16.6版本;
当在Portainer平台Images界面中成功拉取 postgres:16.6镜像后,我们就可以在Containers中快速创建postgres数据库的docker容器系统;

创建Docker容器

拉取Postgres镜像后,可直接在Portainer平台上创建docker容器运行应用服务;在左侧Containers页面点击Add container,进入创建容器配置页,在Image中输入: postgres:16.6,设置映射端口Port mapping: 5432》5432
在Volumes中配置docker服务主机与docker容器中映射的卷目录,其中container指docker容器内目录,host指docker服务主机物理目录,用于Postgresql运行产生的数据目录进行容器外维护,防止容器故障数据丢失;
注意:docker容器非常适合无状态服务,但对于具有产生数据的有状态服务,如:数据库、消息队列等,一定要创建dokcer容器映射卷目录,将数据同步到docker服务主机的物理目录中;
配置postgres服务运行参数,可通过添加docker容器内系统服务的环境变量来配置,如: POSTGRES_USER=root(数据库用户名), POSTGRES_PASSWORD=123456(数据库密码)
在Portainer平台上默认创建的docker容器没有CPU、内存等资源限制,当多个服务运行时,会存在资源占用过高与竞争,从而影响到所有Docker服务主机上容器与程序,因此我们需要在Runtime & resources中进行资源限制;
  • Memory reservation(MB):表示预留内存,应用运行过程中需要从内存中交换到磁盘的缓存空间,少于Memory limit即可;
  • Memory limit(MB):表示内存使用最大限制,需大于Memory reservation;
  • Maximum CPU usage:表示CPU使用量限制;
当然上述操作,也可以通过docker run命令行的方式,分配固定的资源空间,来创建postgres数据库容器;
docker run -d \
--name postgres-16.6 \
-c 2 -m 1G --memory-swap=1536m \
-p 5432:5432 \
-e POSTGRES_PASSWORD=123456 \
-e POSTGRES_USER=root \
-v /opt/docker/sysdata/postgre_data/16/data:/var/lib/postgresql/data \
postgres:16.6

通过docker run命令创建基于postgres:16.6镜像为基础的数据库容器;

其中通过-c和-m、--memory-swap限制运行可用的cpu数量、内存大小、可交换缓存大小;
通过-e来添加docker容器系统中的环境变量,表示创建数据库默认初始化用户,POSTGRES_USER=root(数据库用户名),POSTGRES_PASSWORD=123456(数据库密码);
因测试环境资源有限,此处只分配了2cpu、1g内存、总计1.5G最大内存交换空间(可缓存到磁盘的缓冲空间);
需注意的是:在PostgreSQL中,并没有传统意义上的“root”用户,这是与MySQL等其他数据库系统的一个显著差异。在 PostgreSQL 中,所有用户都是基于角色的,而这些角色被赋予不同的权限。
因此用户名虽为root,实际为普通账户,非超级管理员账户;
执行后,无报错并成功返回容器ID;
在Portainer中的Containers界面刷新后,即可看到我们创建的postgres-16.6容器正在运行中的,并且可以通过此界面功能管理postgres数据库运行、停止、重启、暂停等,以及查看docker容器详情、容器删除、容器状态监控等;

容器内sql测试

在docker服务主机上,通过 docker exec -it <容器ID> /bin/base,进入已安装Postgres数据库的docker容器系统中,查看容器文件信息;
[root@centos72 data]# docker exec -it 0e9ec34ba941 /bin/bash
root@0e9ec34ba941:/# ls
bin  boot  dev  docker-entrypoint-initdb.d  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

在当前容器系统中测试数据库SQL语句,执行psql,由于默认就是超级管理账户访问,因此无需用户名和密码就可以直接进入到postgres数据库中;

以下为数据库测试使用语句
--查看所有库实例
\l
-- 创建新数据库,注意:psql中没有mysql中传统意义的"root"账户,此root只是单纯在数据库上已建用户而已
CREATE DATABASE mydb OWNER root;
 
-- 给用户授权,相关权限:https://www.runoob.com/postgresql/postgresql-privileges.html
GRANT ALL PRIVILEGES ON DATABASE mydb TO root;
 
-- 连接到数据库
\c mydb
 
-- 创建表
CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    username VARCHAR(50),
    email VARCHAR(255)
);
 
-- 查询已建的表
\dt
-- 或
SELECT * FROM pg_catalog.pg_tables WHERE schemaname='public';
 
-- 插入数据
INSERT INTO users (username, email) VALUES ('admin', 'admin@example.com');
 
-- 查询数据
SELECT * FROM users;
 
-- 更新数据
UPDATE users SET email = 'newemail@example.com' WHERE username = 'admin';
 
-- 删除数据
DELETE FROM users WHERE username = 'admin';
 
-- 退出命令行
\q

以下是数据库SQL语句执行日志


root@0e7ec34ert42:/# psql
psql (16.6 (Debian 16.6-1.pgdg120+1))
Type "help" for help.

root=# \l
                                                   List of databases
   Name    | Owner | Encoding | Locale Provider |  Collate   |   Ctype    | ICU Locale | ICU Rules | Access privileges 
-----------+-------+----------+-----------------+------------+------------+------------+-----------+-------------------
 postgres  | root  | UTF8     | libc            | en_US.utf8 | en_US.utf8 |            |           | 
 root      | root  | UTF8     | libc            | en_US.utf8 | en_US.utf8 |            |           | 
 template0 | root  | UTF8     | libc            | en_US.utf8 | en_US.utf8 |            |           | =c/root          +
           |       |          |                 |            |            |            |           | root=CTc/root
 template1 | root  | UTF8     | libc            | en_US.utf8 | en_US.utf8 |            |           | =c/root          +
           |       |          |                 |            |            |            |           | root=CTc/root
(4 rows)

root=# \dt
Did not find any relations.
root=# select version();
                                                       version                                                       
---------------------------------------------------------------------------------------------------------------------
 PostgreSQL 16.6 (Debian 16.6-1.pgdg120+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14) 12.2.0, 64-bit
(1 row)

root=# CREATE DATABASE mydb OWNER root;
CREATE DATABASE
root=# GRANT ALL PRIVILEGES ON DATABASE mydb TO root;
GRANT
root=# \c mydb
You are now connected to database "mydb" as user "root".
mydb=# CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    username VARCHAR(50),
    email VARCHAR(255)
);
CREATE TABLE
mydb=# \dt
       List of relations
 Schema | Name  | Type  | Owner 
--------+-------+-------+-------
 public | users | table | root
(1 row)

mydb=# SELECT * FROM pg_catalog.pg_tables WHERE schemaname='public';
 schemaname | tablename | tableowner | tablespace | hasindexes | hasrules | hastriggers | rowsecurity 
------------+-----------+------------+------------+------------+----------+-------------+-------------
 public     | users     | root       |            | t          | f        | f           | f
(1 row)

mydb=# INSERT INTO users (username, email) VALUES ('admin', 'admin@example.com');
INSERT 0 1
mydb=# SELECT * FROM users;
 id | username |       email       
----+----------+-------------------
  1 | admin    | admin@example.com
(1 row)

mydb=# UPDATE users SET email = 'newemail@example.com' WHERE username = 'admin';
UPDATE 1
mydb=# select * from information_schema.table_privileges where table_name = 'users';
 grantor | grantee | table_catalog | table_schema | table_name | privilege_type | is_grantable | with_hierarchy 
---------+---------+---------------+--------------+------------+----------------+--------------+----------------
 root    | root    | mydb          | public       | users      | INSERT         | YES          | NO
 root    | root    | mydb          | public       | users      | SELECT         | YES          | YES
 root    | root    | mydb          | public       | users      | UPDATE         | YES          | NO
 root    | root    | mydb          | public       | users      | DELETE         | YES          | NO
 root    | root    | mydb          | public       | users      | TRUNCATE       | YES          | NO
 root    | root    | mydb          | public       | users      | REFERENCES     | YES          | NO
 root    | root    | mydb          | public       | users      | TRIGGER        | YES          | NO
(7 rows)

mydb=# \q

进入到docker容器系统的postgres数据库安装目录/var/lib/postgresql/data中,此时已生成数据库相关配置与文件;

输出exit退出docker容器系统,回到docker服务器主机系统中;
进入我们在创建postgres容器时指定的卷映射目录:/opt/docker/sysdata/postgre_data/16/data中,数据库配置与文件同步映射;

客户端连接Postgres

通过DBeaver数据库客户端工具,远程成功访问到Postgres数据库后,即可执行SQL操作了;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2309480.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VSCode 移除EmmyLua插件的红色波浪线提示

VSCode 中安装插件EmmyLua&#xff0c;然后打开lua文件的时候&#xff0c;如果lua代码引用了C#脚本的变量&#xff0c;经常出现 “undefined global variable: UnityEngineEmmyLua(undefined-global)” 的红色波浪线提示&#xff0c;这个提示看着比较烦人&#xff0c;我们可以通…

大模型巅峰对决:DeepSeek vs GPT-4/Claude/PaLM-2 全面对比与核心差异揭秘

文章目录 一、架构设计深度解剖1.1 核心架构对比图谱1.2 动态MoE架构实现架构差异分析表 二、训练策略全面对比2.1 训练数据工程对比2.2 分布式训练代码对比DeepSeek混合并行实现GPT-4 Megatron实现对比 2.3 关键训练参数对比 三、性能表现多维评测3.1 基准测试全景对比3.2 推理…

C语言基础知识02

格式化输入输出 函数名&#xff1a;printf&#xff08;&#xff09; 格式控制符&#xff1a;%c //把数据转换成字符型 cahr %d //把数据转换为有符号十进制整型 int short %ld // long %f //把数据转成单精度浮点型 flot %d //double %s …

Linux的进程观:简单性如何成就强大性(三)

1. 环境变量 1.1. 基本概念 环境变量(environment variables)⼀般是指在操作系统中⽤来指定操作系统运⾏环境的⼀些参数。 如&#xff1a;我们在编写C/C代码的时候&#xff0c;在链接的时候&#xff0c;从来不知道我们的所链接的动态静态库在哪⾥&#xff0c;但是照样可以链接…

element-ui infiniteScroll 组件源码分享

简单分享 infiniteScroll 组件源码&#xff0c;主要有以下四个方面&#xff1a; 1、infiniteScroll 页面结构。 2、infiniteScroll 组件属性。 3、组件内部的方法。 4、存在的问题。 一、infiniteScroll 页面结构&#xff1a; 二、页面属性。 2.1 infinite-scroll-disab…

vulnhub靶场之【digitalworld.local系列】的bravery靶机

前言 靶机&#xff1a;digitalworld.local-bravery&#xff0c;IP地址为192.168.10.8 攻击&#xff1a;kali&#xff0c;IP地址为192.168.10.6 kali采用VMware虚拟机&#xff0c;靶机采用virtualbox虚拟机&#xff0c;网卡都为桥接模式 这里官方给的有两种方式&#xff0c;…

SpringBoot 整合mongoDB并自定义连接池,实现多数据源配置

要想在同一个springboot项目中使用多个数据源&#xff0c;最主要是每个数据源都有自己的mongoTemplate和MongoDbFactory。mongoTemplate和MongoDbFactory是负责对数据源进行交互的并管理链接的。 spring提供了一个注解EnableMongoRepositories 用来注释在某些路径下的MongoRepo…

C++20 标准化有符号整数:迈向更可预测的整数运算

文章目录 一、背景&#xff1a;为什么需要标准化&#xff1f;二、2 的补码&#xff1a;原理与优势&#xff08;一&#xff09;2 的补码原理&#xff08;二&#xff09;2 的补码的优势 三、C20 的变化&#xff1a;明确 2 的补码四、如何利用这一特性优化代码&#xff08;一&…

npm ERR! code 128 npm ERR! An unknown git error occurred

【问题描述】 【问题解决】 管理员运行cmd&#xff08;右键window --> 选择终端管理员&#xff09; 执行命令 git config --global url.“https://”.insteadOf ssh://git cd 到项目目录 重新执行npm install 个人原因&#xff0c;这里执行npm install --registryhttps:…

泵吸式激光可燃气体监测仪:快速精准守护燃气管网安全

在城市化进程加速的今天&#xff0c;燃气泄漏、地下管网老化等问题时刻威胁着城市安全。如何实现精准、高效的可燃气体监测&#xff0c;守护“城市生命线”&#xff0c;成为新型基础设施建设的核心课题。泵吸式激光可燃气体监测仪&#xff0c;以创新科技赋能安全监测&#xff0…

Stiring-PDF:开源免费的PDF文件处理软件

Stiring-PDF是一款开源免费且比较好用的PDF文件处理工具。 Stiring-PDF官网网址为&#xff1a;https://www.stiringpdf.com/。Stiring-PDF是一款专业的PDF文件处理工具&#xff0c;支持Windows和macOS操作系统&#xff1b;提供丰富的PDF编辑和转换功能&#xff0c;适用于日常工…

Cherno C++ P60 为什么不用using namespace std

这篇文章我们讲一下之前写代码的时候的一个习惯&#xff0c;也就是不使用using namespace std。如果我们接触过最早的C教程&#xff0c;那么第一节课都会让我们写如下的代码&#xff1a; #include<iostream>using namespace std;int main() {cout << "Hello …

大模型微调实验记录(一)数据探索

文章目录 概要整体架构流程前期的技术探索技术构造技术细节小结 概要 根据之前博客使用的docker技术&#xff0c;如果换公司了&#xff0c;我可能就要重新搭建环境了&#xff0c;哎&#xff0c;公司没资源给我&#xff0c;给我一台带不走的电脑&#xff0c;哎&#xff0c;这可…

JavaWeb-社区版Idea安装配置

idea配置 一&#xff0c;下载idea社区版 百度搜索IntelliJ IDEA&#xff0c;点击下载链接。 二&#xff0c;全局配置 前提安装好jdk&#xff0c;这一步不再赘述。进入引导页&#xff0c;把可以配置的东西都先配置上&#xff0c;这个配置是全局的&#xff0c;省的之后&#…

商城系统单商户开源版源码

环境配置 1.软件安装 宝塔安装系统软件:Nginx、MySQL5.6、PHP( PHP用7.1-7.4版本)、phpMyAdmin(Web端MySQL管理工具)。 2.配置mysql 设置mysql&#xff0c;在已安装的软件里面找到 mysql点击进行设置 3.修改sql-mode 选择左侧配置修改&#xff0c;找到里面的sql-mode&…

Python PDF文件拆分-详解

目录 使用工具 将PDF按页数拆分 将PDF的每一页拆分为单独的文件 将PDF按指定页数拆分 根据页码范围拆分PDF 根据指定内容拆分PDF 将PDF的一页拆分为多页 在日常生活中&#xff0c;我们常常会遇到大型的PDF文件&#xff0c;这些文件可能难以发送、管理和查阅。将PDF拆分成…

ubuntu部署gitlab-ce及数据迁移

ubuntu部署gitlab-ce及数据迁移 进行前梳理: 在esxi7.0 Update 3 基础上使用 ubuntu22.04.5-server系统对 gitlab-ce 16.10进行部署,以及将gitlab-ee 16.9 数据进行迁移到gitlab-ce 16.10 进行后总结: 起初安装了极狐17.8.3-jh 版本(不支持全局中文,就没用了) …

Y3学习打卡

网络结构图 YOLOv5配置了4种不同大小的网络模型&#xff0c;分别是YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x&#xff0c;其中 YOLOv5s 是网络深度和宽度最小但检测速度最快的模型&#xff0c;其他3种模型都是在YOLOv5s的基础上不断加深、加宽网络使得网络规模扩大&#xff0c;在增强…

英码科技携昇腾DeepSeek大模型一体机亮相第三届北京人工智能产业创新发展大会

2025年2月28日&#xff0c;第三届北京人工智能产业创新发展大会在国家会议中心隆重开幕。本届大会以"好用、易用、愿用——以突破性创新加速AI赋能千行百业”为主题&#xff0c;重点展示人工智能技术创新成果与产业化应用实践。作为昇腾生态的APN伙伴&#xff0c;英码科技…

JS禁止web页面调试

前言 由于前端在页面渲染的过程中 会调用很多后端的接口&#xff0c;而有些接口是不希望别人看到的&#xff0c;所以前端调用后端接口的行为动作就需要做一个隐藏。 禁用右键菜单 document.oncontextmenu function() {console.log("禁用右键菜单");return false;…