Docker安装Postgres_16数据库

[复制链接]
发表于 2025-10-21 21:56:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
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数据库容器;
  1. docker run -d \
  2. --name postgres-16.6 \
  3. -c 2 -m 1G --memory-swap=1536m \
  4. -p 5432:5432 \
  5. -e POSTGRES_PASSWORD=123456 \
  6. -e POSTGRES_USER=root \
  7. -v /opt/docker/sysdata/postgre_data/16/data:/var/lib/postgresql/data \
  8. 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容器体系中,查察容器文件信息;
  1. [root@centos72 data]# docker exec -it 0e9ec34ba941 /bin/bash
  2. root@0e9ec34ba941:/# ls
  3. 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数据库中;
以下为数据库测试利用语句
  1. --查看所有库实例
  2. \l
  3. -- 创建新数据库,注意:psql中没有mysql中传统意义的"root"账户,此root只是单纯在数据库上已建用户而已
  4. CREATE DATABASE mydb OWNER root;
  5. -- 给用户授权,相关权限:https://www.runoob.com/postgresql/postgresql-privileges.html
  6. GRANT ALL PRIVILEGES ON DATABASE mydb TO root;
  7. -- 连接到数据库
  8. \c mydb
  9. -- 创建表
  10. CREATE TABLE users (
  11.     id SERIAL PRIMARY KEY,
  12.     username VARCHAR(50),
  13.     email VARCHAR(255)
  14. );
  15. -- 查询已建的表
  16. \dt
  17. -- 或
  18. SELECT * FROM pg_catalog.pg_tables WHERE schemaname='public';
  19. -- 插入数据
  20. INSERT INTO users (username, email) VALUES ('admin', '[email protected]');
  21. -- 查询数据
  22. SELECT * FROM users;
  23. -- 更新数据
  24. UPDATE users SET email = '[email protected]' WHERE username = 'admin';
  25. -- 删除数据
  26. DELETE FROM users WHERE username = 'admin';
  27. -- 退出命令行
  28. \q
复制代码
以下是数据库SQL语句实行日记
  1. root@0e7ec34ert42:/# psql
  2. psql (16.6 (Debian 16.6-1.pgdg120+1))
  3. Type "help" for help.
  4. root=# \l
  5.                                                    List of databases
  6.    Name    | Owner | Encoding | Locale Provider |  Collate   |   Ctype    | ICU Locale | ICU Rules | Access privileges
  7. -----------+-------+----------+-----------------+------------+------------+------------+-----------+-------------------
  8. postgres  | root  | UTF8     | libc            | en_US.utf8 | en_US.utf8 |            |           |
  9. root      | root  | UTF8     | libc            | en_US.utf8 | en_US.utf8 |            |           |
  10. template0 | root  | UTF8     | libc            | en_US.utf8 | en_US.utf8 |            |           | =c/root          +
  11.            |       |          |                 |            |            |            |           | root=CTc/root
  12. template1 | root  | UTF8     | libc            | en_US.utf8 | en_US.utf8 |            |           | =c/root          +
  13.            |       |          |                 |            |            |            |           | root=CTc/root
  14. (4 rows)
  15. root=# \dt
  16. Did not find any relations.
  17. root=# select version();
  18.                                                        version                                                      
  19. ---------------------------------------------------------------------------------------------------------------------
  20. 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
  21. (1 row)
  22. root=# CREATE DATABASE mydb OWNER root;
  23. CREATE DATABASE
  24. root=# GRANT ALL PRIVILEGES ON DATABASE mydb TO root;
  25. GRANT
  26. root=# \c mydb
  27. You are now connected to database "mydb" as user "root".
  28. mydb=# CREATE TABLE users (
  29.     id SERIAL PRIMARY KEY,
  30.     username VARCHAR(50),
  31.     email VARCHAR(255)
  32. );
  33. CREATE TABLE
  34. mydb=# \dt
  35.        List of relations
  36. Schema | Name  | Type  | Owner
  37. --------+-------+-------+-------
  38. public | users | table | root
  39. (1 row)
  40. mydb=# SELECT * FROM pg_catalog.pg_tables WHERE schemaname='public';
  41. schemaname | tablename | tableowner | tablespace | hasindexes | hasrules | hastriggers | rowsecurity
  42. ------------+-----------+------------+------------+------------+----------+-------------+-------------
  43. public     | users     | root       |            | t          | f        | f           | f
  44. (1 row)
  45. mydb=# INSERT INTO users (username, email) VALUES ('admin', '[email protected]');
  46. INSERT 0 1
  47. mydb=# SELECT * FROM users;
  48. id | username |       email      
  49. ----+----------+-------------------
  50.   1 | admin    | [email protected]
  51. (1 row)
  52. mydb=# UPDATE users SET email = '[email protected]' WHERE username = 'admin';
  53. UPDATE 1
  54. mydb=# select * from information_schema.table_privileges where table_name = 'users';
  55. grantor | grantee | table_catalog | table_schema | table_name | privilege_type | is_grantable | with_hierarchy
  56. ---------+---------+---------------+--------------+------------+----------------+--------------+----------------
  57. root    | root    | mydb          | public       | users      | INSERT         | YES          | NO
  58. root    | root    | mydb          | public       | users      | SELECT         | YES          | YES
  59. root    | root    | mydb          | public       | users      | UPDATE         | YES          | NO
  60. root    | root    | mydb          | public       | users      | DELETE         | YES          | NO
  61. root    | root    | mydb          | public       | users      | TRUNCATE       | YES          | NO
  62. root    | root    | mydb          | public       | users      | REFERENCES     | YES          | NO
  63. root    | root    | mydb          | public       | users      | TRIGGER        | YES          | NO
  64. (7 rows)
  65. mydb=# \q
复制代码
进入到docker容器体系的postgres数据库安装目次/var/lib/postgresql/data中,此时已天生数据库干系设置与文件;

通过DBeaver数据库客户端工具,远程乐成访问到Postgres数据库后,即可实行SQL操纵了;
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表