由于最新版本的postgreqsl数据库的镜像大小好几百兆。今天就来构建自己的postgresql基础镜像让低配服务器或者电脑可以稳定并且低资源的运行一个postgresql数据库。
基础镜像
官方镜像提供多种操作系统版本的镜像,要想包小首选Alpine版本。
另外最新版本的功能都比较多,这边建议选用10版本,大小79M。
配置
- 资源限制 :通过
--cpus="1"
和--memory="512m"
限制 CPU 和内存的使用,使该容器适合低资源环境。 - 交换内存使用 :
--memory-swappiness="10"
选项确保交换内存的使用较少,优先使用物理内存。 - Postgres 配置 :通过环境变量
PGOPTIONS
设置共享内存缓冲区为 64 MB(--shared_buffers=64MB
),并禁用日志收集(--logging_collector=off
),以减少资源占用。 - 数据持久化 :通过卷映射
-v /home/mini_postgresql_data:/var/lib/postgresql/data
,确保数据库数据持久化到本地文件系统。 - 网络设置 :端口映射
-p 5432:5432
允许外部通过 5432 端口连接到 PostgreSQL 实例。
这个配置可以帮助你在资源有限的 Docker 环境中高效运行 PostgreSQL。
Docker命令
docker 命令直接启动自己数据库容器,命令如下:
docker run -d \
--name xyx-postgres \
--cpus="1" \
--memory="512m" \
--memory-swap="1g" \
--memory-swappiness="10" \
-e PGOPTIONS="--shared_buffers=64MB --logging_collector=off" \
-e POSTGRES_USER=<username> \
-e POSTGRES_PASSWORD=<password>\
-e POSTGRES_DB=<dbname> \
-v /home/mini_postgresql_data:/var/lib/postgresql/data \
-p 5432:5432 \
docker.io/postgres:10-alpine
制作Dockerfile
# Use the official PostgreSQL 10 Alpine image as the base
FROM postgres:10-alpine
# Set environment variables for PostgreSQL configuration
ENV POSTGRES_USER=<username> \
POSTGRES_PASSWORD=<password> \
POSTGRES_DB=<db_name> \
PGOPTIONS="--shared_buffers=64MB --logging_collector=off"
# Expose PostgreSQL port
EXPOSE 5432
# Optional: Copy any additional configuration or initialization files
# COPY init.sql /docker-entrypoint-initdb.d/
# Default command to start the PostgreSQL server
CMD ["postgres"]
Build and Run the Image
-
Buid
docker build -t xyx-postgres:custom .
-
Run
docker run -d
--name xyx-postgres
--cpus="1"
--memory="512m"
--memory-swap="1g"
--memory-swappiness="10"
-v /home/mini_postgresql_data:/var/lib/postgresql/data
-p 5432:5432
xyx-postgres:custom
解释:
- 基础镜像: Dockerfile 从官方的 PostgreSQL 10 Alpine 镜像开始,这是一个轻量级的镜像。
- 环境变量: 通过环境变量设置
POSTGRES_USER
、POSTGRES_PASSWORD
和POSTGRES_DB
。 - PostgreSQL 选项: 通过
PGOPTIONS
环境变量设置 PostgreSQL 的共享缓存大小,并禁用日志收集器。 - 数据卷: 在
docker run
命令中,将数据目录挂载到主机的/home/mini_postgresql_data
路径上。 - 资源限制: 限制容器的 CPU 和内存使用。
- 暴露端口: PostgreSQL 运行在
5432
端口,并将其暴露,方便从主机访问。
你可以根据需要进一步修改 Dockerfile,添加特定的配置或初始化脚本(例如,自定义 SQL 文件)。