(一张简洁明了的架构图,展示 Docker Compose 管理的 PostgreSQL 容器与宿主 AlmaLinux 的关系,以及 DataGrip 连接容器的路径。类似 的微服务架构图风格,但简化到只有 Docker Engine, PostgreSQL Container, AlmaLinux Host, DataGrip Client 这几个核心元素,用箭头标明连接关系:DataGrip -> Docker Port -> PostgreSQL Container。图片标注:PostgreSQL Docker 部署简易架构)
咸鱼为啥选 Docker Compose?
想象一下,以前装数据库,要下载安装包、配环境变量、改配置文件、设权限...一套下来,咸鱼都累成咸鱼干了!Docker Compose 就是咱咸鱼的救星!它让你用一个简单的 YAML 配置文件 (docker-compose.yml
),就能定义并启动整个服务(比如数据库)。好处贼多:
docker-compose.yml
文件里,清晰明了,方便版本管理和重现。准备工作:给你的 AlmaLinux 装好 Docker 和 Docker Compose
更新系统 (在 AlmaLinux 终端执行):
sudo dnf update -y
安装 Docker (在 AlmaLinux 终端执行):
sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
sudo dnf install docker-ce docker-ce-cli containerd.io -y
sudo systemctl start docker
sudo systemctl enabledocker
# 验证安装,看到版本号就OK
docker --version
安装 Docker Compose (在 AlmaLinux 终端执行):
# 下载最新稳定版 (替换 VERSION 为实际版本号,如 v2.27.0)
sudocurl-L"https://github.com/docker/compose/releases/download/VERSION/docker-compose-$(uname-s)-$(uname-m)"-o /usr/local/bin/docker-compose
# 赋予执行权限
sudochmod +x /usr/local/bin/docker-compose
# 验证安装
docker-compose --version
核心步骤:编写我们的“数据库说明书” (docker-compose.yml)
在你的 AlmaLinux 上找个顺眼的地方,比如 ~/postgres-demo
,创建这个目录并进入:
mkdir ~/postgres-demo &&cd ~/postgres-demo
创建我们的“圣经”文件 docker-compose.yml
:
nano docker-compose.yml # 或者用 vim
把下面这段“咸鱼定制版”配置 一字不差地贴进去,我一行一行给你解释(注意缩进是2个空格或4个空格,保持一致!YAML 很在意这个!):
version:'3.8'# 指定 Compose 文件版本,3.8 是比较新且稳定的
services:# 定义我们要运行的服务列表
postgres:# 服务名,就叫 postgres 吧,好记!
image: postgres:latest # 使用官方最新的 PostgreSQL 镜像。咸鱼提示:latest 标签会拉取最新稳定版,生产环境建议指定具体版本号如 16
container_name: pg-container # 给容器起个名字,方便管理
environment:# 设置环境变量,非常重要!用来初始化数据库
- POSTGRES_USER=postgresuser # 设置超级用户名,咸鱼你改个自己喜欢的!
- POSTGRES_PASSWORD=YourStrongPassw0rd!# 设置超级用户密码,一定要够强!咸鱼别偷懒!
- POSTGRES_DB=postgresdb # 初始化时创建的默认数据库名
volumes:# 数据持久化关键!把容器里的数据目录映射到主机目录,这样重启容器数据还在!
- ./pgdata:/var/lib/postgresql/data # 把当前目录下的 pgdata 目录映射到容器里的数据库数据目录
ports:# 端口映射,把容器里的 5432 端口映射到宿主机的 5432 端口。咸鱼注意:主机端口可以改(比如 5433:5432),但容器内端口一般是 5432
-"5432:5432"
restart: unless-stopped # 容器策略:除非手动停止,否则退出就重启(比如服务器重启后)
healthcheck:# (可选但推荐)健康检查,确保数据库真的启动好了
test:["CMD-SHELL","pg_isready -U postgresuser -d postgresdb"]
interval: 10s
timeout: 5s
retries:5
咸鱼白话解释关键点:*image: postgres:latest
: 告诉 Docker 去拉取 (pull) 官方的 PostgreSQL 镜像。latest
是最新版,省心。想用特定版本?换成postgres:16
就行。 *environment
: 数据库的“出生证明”! *POSTGRES_USER
: 数据库的超级管理员用户名,记牢它! *POSTGRES_PASSWORD
: 超级管理员的密码!咸鱼警告:这个密码别用简单的,也别泄露!*POSTGRES_DB
: 容器启动时自动创建的这个名字的数据库。 *volumes: - ./pgdata:/var/lib/postgresql/data
:数据不丢的秘诀!把容器内 PostgreSQL 存放数据的核心目录 (/var/lib/postgresql/data
) 映射到你主机当前目录下的pgdata
文件夹。这样,即使你删了容器,只要pgdata
文件夹还在,数据就还在!下次启动映射回去,数据就回来了。./
表示当前目录 (~/postgres-demo
)。 *ports: - "5432:5432"
:连接数据库的门!左边5432
是你 AlmaLinux 主机的端口号(外面访问用),右边5432
是 PostgreSQL 容器内部监听的端口(固定是这个)。用 DataGrip 连接时,就填你 AlmaLinux 的 IP 和这个左边的主机端口 (5432)。想换主机端口?比如"65432:5432"
,那 DataGrip 就填主机端口 65432。 *healthcheck
: 让 Docker Compose 知道数据库是不是真准备好了。pg_isready
是 PostgreSQL 自带的检查工具。-U
和-d
参数要和你上面设置的用户名、数据库名一致。
Ctrl+O
回车保存,再按 Ctrl+X
退出)。启动你的咸鱼数据库!
确保你在 ~/postgres-demo
目录下 (里面有 docker-compose.yml
文件)。
运行 咸鱼起飞命令:
docker-compose up -d
up
: 创建并启动服务。-d
: detached
模式,后台运行。不加这个参数,你会看到日志输出在前台。见证奇迹时刻:
pull
) PostgreSQL 镜像,需要点时间(看网速)。Creating pg-container ... done
类似的信息就表示启动成功了!检查一下状态 (可选但推荐):
docker-composeps
你会看到类似这样的输出,State
显示 Up
并且 (healthy)
(如果你配置了健康检查) 就完美了!Name Command State Ports --------------------------------------------------------------------------------------- pg-container docker-entrypoint.sh postgres Up (healthy) 0.0.0.0:5432->5432/tcp
~/postgres-demo
目录下,会多出一个 pgdata
文件夹。这里面就是 PostgreSQL 存储所有数据的真实地方!咸鱼切记:别乱删这个文件夹,它就是你的数据库!(图片2:一张截图,展示在 AlmaLinux 终端中执行 docker-compose up -d
命令成功后的输出,以及执行 docker-compose ps
命令显示容器状态为 Up (healthy)
的结果。同时终端窗口左侧显示 ls
命令能看到 docker-compose.yml
和 pgdata
目录。图片标注:Docker Compose 启动 PostgreSQL 成功及目录结构)
咸鱼连接利器:用 DataGrip 摸到你的数据库!
PostgreSQL 在容器里跑欢了,咸鱼总不能老在命令行里敲吧?咱们用强大的 DataGrip(JetBrains 家的数据库管理神器) 连上去,图形化操作才爽!
Host
: 填你的 AlmaLinux 服务器的 IP 地址!(如果是本地虚拟机或本机,可能是 localhost
或 127.0.0.1
)。Port
: 填你在 docker-compose.yml
里 ports
映射的 左边的主机端口(默认是 5432
,如果你改了比如 65432
,这里就填 65432
)。User
: 填你在 environment
里设置的 POSTGRES_USER
(默认是 postgresuser
)。Password
: 填你在 environment
里设置的 POSTGRES_PASSWORD
(那个强密码!)。Database
: 填你在 environment
里设置的 POSTGRES_DB
(默认是 postgresdb
),或者填 postgres
(这是 PostgreSQL 默认的系统数据库,通常也能连)。+
-> Data Source
-> PostgreSQL
。Test Connection
测试连接。如果看到 Successful
,咸鱼就可以偷着乐了!OK
保存连接。现在,你就能在 DataGrip 里看到你的 PostgreSQL 实例,可以查看数据库、表,执行 SQL 查询,为所欲为了!(当然,是在你的权限内)。咸鱼收尾工作 (想停想删看这里)
优雅停止并移除容器 (但保留 pgdata 数据):
cd ~/postgres-demo # 确保在项目目录
docker-compose down
下次 docker-compose up -d
又会起来,数据还在 pgdata
里。
想彻底删除 (容器+数据卷)?小心!
cd ~/postgres-demo
docker-compose down -v# -v 表示同时删除在 docker-compose.yml 里定义的匿名卷 (但我们用的是命名卷 ./pgdata, 所以这个命令不会删除你的 pgdata 文件夹!)
咸鱼重要提示:docker-compose down -v
不会删除你主机上映射的目录 ./pgdata
!里面的数据文件还在!真正要删除数据,你需要手动去删掉 ~/postgres-demo/pgdata
这个文件夹!删之前三思啊咸鱼!
咸鱼总结一下今天的航程:
docker-compose.yml
,定义 PostgreSQL 服务,设置用户名密码数据库, 关键:映射端口(连接门)和卷(数据保险箱)。docker-compose up -d
一键启动。docker-compose down(保留数据) / docker-compose down -v(不删数据目录) +
手动删 pgdata
(真的想销毁数据时)。
搞定!现在你的“IT咸鱼”AlmaLinux 服务器上,已经稳稳地跑着一个通过 Docker Compose 管理的 PostgreSQL 数据库了,还能用 DataGrip 愉快地玩耍。是不是感觉咸鱼也能拥有强大的数据库力量了?这仅仅是起航的第一步,后面还有更多数据库的咸鱼秘籍等着你!敬请关注“IT咸鱼”!觉得有用?赶紧收藏转发,让更多咸鱼兄弟上岸!