PostgreSQL镜像包
时间: 2024-12-31 13:33:38 浏览: 4
### 创建自定义 PostgreSQL 镜像
为了创建一个自定义的 PostgreSQL Docker 镜像,可以基于官方镜像并添加特定需求的功能。下面是一个完整的流程来构建这样的镜像。
#### 准备工作
确保本地环境中已安装 Docker 并能够正常运行命令。接着,在项目根目录下建立必要的文件结构:
```plaintext
E:\document\PostgreSQL
├── Dockerfile
└── pgdata (空文件夹,用于存放数据文件)
```
`pgdata` 文件夹对于持久化存储至关重要[^5]。它允许将数据库的数据保存在这个位置而不是默认临时卷内,从而防止每次重启容器时丢失数据。
#### 编写 `Dockerfile`
编写一个名为 `Dockerfile` 的文本文件,其内容如下所示:
```dockerfile
FROM postgres:15-alpine
# 设置环境变量以便于后续操作
ENV POSTGRES_USER=myuser \
POSTGRES_PASSWORD=mypassword \
POSTGRES_DB=mydatabase
# 将当前目录下的 sql 脚本拷贝至指定路径供初始化使用
COPY ./init-scripts /docker-entrypoint-initdb.d/
VOLUME ["pgdata"]
EXPOSE 5432/tcp
```
这段脚本指定了基础镜像是最新发布的 Alpine 版本的 PostgreSQL 15,并设置了几个重要的环境变量用来配置初始用户、密码以及要创建的第一个数据库名称。另外还设置了一个挂载点 `/var/lib/postgresql/data` 到宿主机上的 `pgdata` 目录以实现持久化的功能。
#### 初始化 SQL 脚本
在项目的同一级创建一个新的子文件夹叫做 `init-scripts` ,并将任何想要执行一次性的 SQL 命令放入其中。这些脚本会在首次启动容器时自动被执行,因此非常适合用来预加载模式或测试数据[^3]。
例如可以在该文件夹里放置一个简单的 `.sql` 文件来进行基本设定:
```sql
CREATE TABLE IF NOT EXISTS example (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO example (name) VALUES ('First Entry');
```
#### 构建与推送镜像
当所有的准备工作完成后就可以利用 docker build 来打包成新的镜像了。假设现在位于包含上述所有文件的工作区,则可以通过以下指令完成这一步骤:
```bash
docker build -t my-postgres-image .
```
如果希望分享这个自制好的镜像给其他人的话还可以将其推送到 Docker Hub 或者其他私有的仓库中去。
---
阅读全文