使用Docker部署postgresql
使用Docker部署postgresql
postgresql数据库在Docker中的镜像的名称为postgres,可以从DockerHub中pull下来,如果pull不下来那么很大概率是网络问题导致的,这时候你可能需要在网上找一些能用的镜像源,以成功拉取postgres镜像。
有了postgres的镜像之后,你就可以在本地的Docker创建一个postgres的容器并运行。我们有两种方式来创建容器:
- 直接使用命令行来创建
postgres的容器并运行; - 使用
docker-compose来创建postgres的容器并运行;
这里先介绍使用命令行的方式来创建postgres容器的方式:
docker run -d
--name postgres-exprdb
-p 5432:5432
-e POSTGRES_PASSWORD=123456
-e POSTGRES_USER=aderversa
-e POSTGRES_DB=testdb
-v ~/postgresql/data:/var/lib/postgresql/data
postgres
-e是用来设置postgres容器中环境变量的值的,有些特殊的环境变量将会影响到启动后的postgresql的一些参数,比如postgresql数据库的密码、用户等等。具体一些环境变量的含义可以查看dockerhub中有关于环境变量的介绍,本文的最后也会介绍一些环境变量的含义。-p将PostgreSQL的5432端口暴露到宿主机的5432端口,方便我们在外部访问容器内的PostgreSQL服务。-v将容器内的/var/lib/postgresql/data文件夹挂载到宿主机的~/postgresql/data文件夹下,这样数据库中的数据就不会因为我们删除了容器而丢失。你需要自己定义好这个数据文件夹该挂载到自己主机的什么地方上,这里我给出的值仅做参考。--name postgres-exprdb指定创建的PostgreSQL容器的名字。-d表示该容器在后台运行,并打印创建容器的ID到控制台。postgres是我们所使用的镜像。
运行上述命令,使用docker ps查看容器状态:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b1f5d4521cd0 postgres "docker-entrypoint.s…" 8 seconds ago Up 7 seconds 0.0.0.0:5432->5432/tcp postgres-exprdb
可以看见,容器已经在后台运行了。之后,我们可以使用别的什么工具去访问已经创建好的testdb数据库,用定义好的特权用户aderversa,以及指定好的密码123456。
IP已知,端口已知,用户名和密码都有了,那么你就可以用你能想象到的方式去连接这个PostgreSQL数据库啦。
使用docker-compose来部署
相比于在命令行中写冗长的命令,我更喜欢将容器的配置写到docker-compose.yaml文件中,然后一行:
docker compose -f docker-compose.yaml -p package_name up -d
-f指定要要操作的文件。-p指定项目的名称。up是创建并启动容器的命令。-d表示容器在后台启动。
比如,我编写了一个docker-compose.yaml文件:
version: "3.8"services:database_expr:image: postgres:latestcontainer_name: postgres-exprrestart: on-failure:3ports:- 5432:5432volumes:- ./db:/var/lib/postgresql/datahealthcheck:test: [ "CMD", "pg_isready" ]interval: 10stimeout: 5sretries: 5environment:- POSTGRES_PASSWORD=123456- POSTGRES_USER=aderversa- POSTGRES_DB=testdb
直接对其进行操作就可以创建好容器并启动,用户不需要关心里面有什么配置。甚至如果你觉得使用docker compose的命令行来启动不够抽象,那么你可以将它编写入shell脚本中,用户直接运行脚本,只要用户安装了Docker环境,就可以安装PostgreSQL成功,他甚至不需要关心Docker命令应该如何使用。
进入postgres容器中执行SQL
使用命令:
docker ps
查找出刚才创建的PostgreSQL容器的ID:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dcf5e3c0ff7f postgres:latest "docker-entrypoint.s…" 13 hours ago Up 13 hours (healthy) 0.0.0.0:5432->5432/tcp postgres-expr
获得container_id = dcf5e3c0ff7f,接着我们使用以下命令进入容器的bash中,方便在操作容器:
docker exec -it dcf5e3c0ff7f /bin/bash
注意,如果是在Windows下执行这条命令的时候,使用
Git Bash来执行可能会因为终端的一些问题执行失败,此时需要更换一下执行命令的终端,比如:PowerShell。
进入到容器中是这个样子的:
> docker exec -it dcf5e3c0ff7f /bin/bash
root@dcf5e3c0ff7f:/#
第一行是在PowerShell中执行的,而第二行则是PostgreSQL容器中运行的bash进程。
接着我们就可以使用:
psql [OPTION]... [DBNAME [USERNAME]]
这里介绍连接数据库需要使用的OPTION选项,具体的你可以使用psql --help来查看:
-h指定PostgreSQL数据库的IP地址。-p指定PostgreSQL数据库的端口号。-U指定登录到数据库的用户名,不指定默认就是root。-w从不提示输入密码,字面意思,不需要输入密码来进行访问数据库,默认是不需要输入密码的。-W强制密码输入。
按照这个用法,我们可以用以下两种方式连接数据库:
# 这里由于我们在创建容器的时候指定的特权用户是aderversa,因此root被挤占掉了
# 用户名对于我这里来说是必须设置的。
psql -p 127.0.0.1 -p 5432 -U aderversa testdb
或者省事一点,直接使用:
psql testdb aderversa
执行成功后我们就能够进入psql的命令行:
psql (17.2 (Debian 17.2-1.pgdg120+1))
Type "help" for help.testdb=#
psql的使用
这里我们并不知道如何使用这个命令行,它提示我们可以使用help来获得帮助,那么就执行一波help,得到了以下信息:
You are using psql, the command-line interface to PostgreSQL.
Type: copyright for distribution termsh for help with SQL commands? for help with psql commandsg or terminate with semicolon to execute queryq to quit
这里它告诉我们:
-
copyright,可以PostgreSQL DDMS的一些条款,里面大概是说:不管你出于何种目的,该软件和其文档都是允许你使用、复制、修改和发布的,并且是不需要任何费用,不需要修改的同意…看起来是非常宽松的声明,毕竟PostgreSQL遵循的是BSD协议。 -
h显示SQL命令,比如CREATE TABLEALTER TABLE…。 -
?显示psql的命令,这里面还是非常多命令的,大多都是用来查看数据库的状态的,比如存在什么表、数据库、视图之类的。这里介绍一些常用的、简单的命令:l,列出所有数据库;c[onnect],连接到数据库某个数据库,如果先前有连接到某个数据库那么这个操作就是更换连接的数据库;dt,查看正在使用的数据库中存在哪些表(注意,默认创建的表似乎是不会列出来的);
-
g执行psql的上一个命令。 -
q退出psql。
以上就是psql的基本用法了,你可以按照自己的在上面执行SQL语句,比如:
create table user ( id int primary key );
注意SQL命令以;结尾就可以了。
创建完成后可以使用:
dt
来查看你是否创建成功。
接下来就是你发挥创造力的时候了,自己尝试着使用psql吧。
补充postgres容器的环境变量
POSTGRES_PASSWORD,必要的环境变量。这个环境变量将设置PostgreSQL容器中特权用户的密码。如果你要使用PostgreSQL镜像,让它以容器的形式的运行,那么这个环境变量就必须要设置,它一定不能够为空或者未定义。默认的特权用户将由POSTGRES_USER来定义。POSTGRES_USER,可选的环境变量。设置PostgreSQL容器中的特权用户名,需要与POSTGRES_PASSWORD一起使用,以此设置好特权用户的名字和密码。如果该环境变量未被指定,那么默认的特权用户名为postgres。POSTGRES_DB,可选的环境变量。定义容器首次运行创建的默认数据库的名字。如果该环境变量未被使用,那么该环境变量的值等于POSTGRES_USER的值。POSTGRES_INITDB_ARGS,可选的环境变量。大概最终是以这种方式被利用:postgres initdb ${POSTGRES_INITDB_ARGS}。POSTGRES_INITDB_WALDIR,可选的环境变量。定义PostgreSQL事务日志的位置。默认的事务日志的位置是PostgreSQL主数据文件夹(PGDATA指定)下的一个子文件夹。POSTGRES_HOST_AUTH_METHOD,可选的环境变量。(个人理解,似乎是与密码摘要相关的东西,这一般不需要我们关注,如果有兴趣可以去PostgreSQL: Documentation: 14: 21.5. Password Authentication了解一下)。PGDATA,可选的环境变量。定义PostgreSQL主数据文件夹的位置,默认是/var/lib/postgresql/data,如果有调整位置的需求那么可以按需求设置该变量的值。
相关文章:
使用Docker部署postgresql
使用Docker部署postgresql postgresql数据库在Docker中的镜像的名称为postgres,可以从DockerHub中pull下来,如果pull不下来那么很大概率是网络问题导致的,这时候你可能需要在网上找一些能用的镜像源,以成功拉取postgres镜像。 有…...
LabVIEW时域近场天线测试
随着通信技术的飞速发展,特别是在5G及未来通信技术中,天线性能的测试需求日益增加。对于短脉冲天线和宽带天线的时域特性测试,传统的频域测试方法已无法满足其需求。时域测试方法在这些应用中具有明显优势,可以提供更快速和精准的…...
LabVIEW桥接传感器数据采集与校准程序
该程序设计用于采集来自桥接传感器的数据,执行必要的设置(如桥接配置、信号采集参数、时间与触发设置),并进行适当的标定和偏移校正,最终通过图表呈现采集到的数据信息。程序包括多个模块,用于配置通道、触…...
菜品管理(day03)
公共字段自动填充 问题分析 业务表中的公共字段: 而针对于这些字段,我们的赋值方式为: 在新增数据时, 将createTime、updateTime 设置为当前时间, createUser、updateUser设置为当前登录用户ID。 在更新数据时, 将updateTime 设置为当前时间…...
深入理解 Android 混淆规则
在 Android 开发中,混淆(Obfuscation)是一种保护代码安全的重要手段,通常通过 ProGuard 或 R8 工具来实现。本文将详细介绍 Android 混淆规则的基本原理、配置方法以及最佳实践,帮助开发者更好地保护应用代码。 博主博…...
《Keras 3 在 TPU 上的肺炎分类》
Keras 3 在 TPU 上的肺炎分类 作者:Amy MiHyun Jang创建日期:2020/07/28最后修改时间:2024/02/12描述:TPU 上的医学图像分类。 (i) 此示例使用 Keras 3 在 Colab 中查看 GitHub 源 简介 设置 本教程将介…...
从 Android 进行永久删除照片恢复的 5 种方法
从 Android 设备中丢失珍贵的照片可能是一种毁灭性的经历。无论是由于意外删除、软件故障还是系统更新,如何从 Android 永久恢复已删除的照片是一个普遍的问题。 幸运的是,有一些解决方案可以帮助找回丢失的记忆。本指南将涵盖您需要了解的有关如何检索…...
SDL2:Android APP编译使用
SDL2:Android APP编译使用 3. SDL2:Android APP编译使用3.1 Android Studio环境准备:3.2 构建Android APP(1)方式一:快速构建APK工程(2)方式二:自定义APK工程(…...
linux systemd 服务连续启动失败,不会再重启分析
1. 问题现象 在Linux 系统中,将自已写的可执行文件放到 systemd 服务中做成service 服务,以支持开机自启和失败重启。但是发现服务在重启多次失败后再也起不来,服务状态是 failed,并且报 start request repeated too quickly. 2.…...
【云岚到家】-day03-门户缓存方案选择
【云岚到家】-day03-门户缓存方案选择 1.门户常用的技术方案 什么是门户 说到门户马上会想到门户网站,中国比较早的门户网站有新浪、网易、搜狐、腾讯等,门户网站为用户提供一个集中的、易于访问的平台,使他们能够方便地获取各种信息和服务…...
在IDEA中使用通义灵码插件:全面提升开发效率的智能助手
在IDEA中使用通义灵码插件:全面提升开发效率的智能助手 随着软件开发行业对效率和质量要求的不断提高,开发者们一直在寻找能够简化工作流程、提升代码质量的工具。阿里云推出的通义灵码插件正是这样一个旨在帮助开发者更高效地编写高质量代码的强大工具…...
【正则表达式】从0开始学习正则表达式
正则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE) 一、推荐学习网站 正则表达式 – 语法 | 菜鸟教程 正则表达式30分钟入门教程 | 菜鸟教程 编程胶囊-打造学习编程的最好系统 二、必知必记 2.1 元字符…...
PHP智慧小区物业管理小程序
🌟智慧小区物业管理小程序:重塑社区生活,开启便捷高效新篇章 🌟 智慧小区物业管理小程序是一款基于PHPUniApp精心雕琢的智慧小区物业管理小程序,它犹如一股清新的科技之风,吹进了现代智慧小区的每一个角落…...
Linux安装Docker教程(详解)
如果想要系统学习docker,建议进入官方文档中学习:docker官方文档 一. 基本概念 Docker Desktop 和 Docker Engine 有什么区别? Docker Desktop for Linux 提供用户友好的图形界面,可简化容器和服务的管理。它包括 Docker Engine,…...
开源AI微调指南:入门级简单训练,初探AI之路
112,如何让 113? 简单的微调你的 AI, 微调前的效果,怎么调教它都是 112. 要对其进行微调(比如训练113),可以按以下步骤进行。 确保你已经安装了以下工具和库: ollamallama3.2Pyt…...
Leetcode 91. 解码方法 动态规划
原题链接:Leetcode 91. 解码方法 自己写的代码: class Solution { public:int numDecodings(string s) {int ns.size();vector<int> dp(n,1);if(s[n-1]0) dp[n-1]0;for(int in-2;i>0;i--){if(s[i]!0){string ts.substr(i,2);int tmpatoi(t.c…...
ASP .NET Core 学习(.NET9)配置接口访问路由
新创建的 ASP .NET Core Web API项目中Controller进行请求时,是在地址:端口/Controller名称进行访问的,这个时候Controller的默认路由配置如下 访问接口时,是通过请求方法(GET、Post、Put、Delete)进行接口区分的&…...
将 AzureBlob 的日志通过 Azure Event Hubs 发给 Elasticsearch(2 换掉付费的Event Hubs)
前情回顾: 将 AzureBlob 的日志通过 Azure Event Hubs 发给 Elasticsearch(1)-CSDN博客 前边的方案是挺好的,但 Azure Event Hubs 是付费服务,我这里只是一个获取日志进行必要的分析,并且不要求实时性&am…...
idea 如何安装 github copilot
idea 如何安装 github copilot 要在 IntelliJ IDEA 中安装 GitHub Copilot,可以按照以下步骤操作: 打开 IntelliJ IDEA: 启动 IntelliJ IDEA。 打开插件管理器: 点击菜单栏中的 File。 选择 Settings(Windows/Linux)或 Prefere…...
1.17学习
crypto nssctf-[SWPUCTF 2021 新生赛]crypto8 不太认识这是什么编码,搜索一下发现是一个UUENCODE编码,用在线工具UUENCODE解码计算器—LZL在线工具解码就好 misc buuctf-文件中的秘密 下载附件打开后发现是一个图片,应该是一个图片隐写&…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...
