# Docker安装PostgresSQL指南
## 前言

本文将介绍如何在Docker中安装PostgreSQL数据库。

## Docker安装步骤

### 1. 拉取PostgreSQL镜像

> 注意下方命令拉取的是最新版本的PostgreSQL镜像，如果你需要指定版本，请使用
>
> ```sh
> docker pull postgres:指定版本号
> ```
>
> 命令

```
docker pull postgres
```
> 执行结果
>
> ![image-20250420104553777](assets/Docker_PostgreSQL/image-20250420104553777.png)
> 
### 2. 启动PostgreSQL容器

```sh
docker run --name my-postgres \
  -e POSTGRES_PASSWORD=mysecretpassword \
  -p 5432:5432 \
  -v /var/service/postgresql/my-postgres/data:/var/lib/postgresql/data \
  --restart unless-stopped \
  -d postgres
```

参数说明：

- `--name`：为容器指定名称

- `-e POSTGRES_PASSWORD`：设置postgres用户的密码(必须)

- `-v`参数将容器内的数据目录映射到主机目录。

  - 对于-v /var/service/postgresql/my-postgres/data:/var/lib/postgresql/data，前者路径是主机路径，后者为容器中路径

- `--restart unless-stopped` 表示：

  >1. 当Docker守护进程启动时，自动启动这个容器
  >2. 如果容器正常退出(手动停止)，则不会自动重启
  >3. 如果容器异常退出(崩溃)，会自动重启
  >4. 当然你可以使用其它策略，或者不选择策略
  >
  >### 其他可选的restart策略：
  >
  >- `--restart no`：不自动重启(默认值)
  >- `--restart on-failure[:max-retries]`：只在非正常退出时重启，可指定最大重试次数
  >- `--restart always`：总是重启，无论退出状态如何(包括手动停止后)

- `-p 5432:5432`：将容器端口映射到主机端口

- `-d`：后台运行容器

**注：如果不想当你删除容器时数据丢失，请将容器内的数据目录挂载到主机目录中**

> 执行结果
>
> ![image-20250420111459451](assets/Docker_PostgreSQL/image-20250420111459451.png)
>
> 验证容器是否启动，请执行`docker ps`命令
>
> ![image-20250420111643192](assets/Docker_PostgreSQL/image-20250420111643192.png)
> 

### 3. 连接到PostgreSQL容器

```
docker exec -it postgres psql -U postgres
```

- `-it`：交互式运行
- `-U postgres`：指定用户名为postgres

### 4. 创建数据库

```
CREATE DATABASE mydatabase;
```

### 5. 退出PostgreSQL容器

```
\q
```

## Docker Compose安装步骤

> 这个可以允许你不预先安装镜像，文件执行时会自动帮你下载，因此更建议使用此种方式

### 1. 创建`docker-compose.yml`文件

```yaml
services:
  postgres:
    image: postgres:latest
    container_name: my-postgres
    environment:
      POSTGRES_PASSWORD: mysecretpassword # 必填，数据库访问密码
      POSTGRES_USER: myuser  # 可选，自定义用户名
      POSTGRES_DB: mydb      # 可选，自定义初始数据库
    ports:
      - "5432:5432"
    volumes:
      - postgres_data:/var/lib/postgresql/data # 声明挂载的数据卷所映射的目录
volumes:
  postgres_data: # 声明所使用的数据卷
```

> 示例步骤
>
> 首先我们找到一个合适的目录，比如/var/service/postgresql/my-postgres
> 直接 ```cd /var/service/postgresql/my-postgres```
> 然后执行 ```nano docker-compose.yml```
> 将上面的内容复制进去，然后按Ctrl+X，再按Y，再按Enter保存文件
>
> ![image-20250420112228948](assets/Docker_PostgreSQL/image-20250420112228948.png)
> 

### 2. 启动服务

> 一般建议在你所使用的工作平台创建并编辑好Docker-Compose文件再上传到你的Linux服务器中(你执行命令的目录下必须有这个文件)

```sh
# 执行下方命令
docker-compose up -d
```

> 注意：
>
> 也许你执行上方命令会提示
>
> ![image-20250420112323250](assets/Docker_PostgreSQL/image-20250420112323250.png)
> 
> 这是因为你的Docker Compose版本已经不支持这种方式了，请使用下方命令
>
> ```sh
> docker compose up -d
> ```
>
> ![image-20250420112546002](assets/Docker_PostgreSQL/image-20250420112546002.png)
>
> 怎么样？是不是更方便

## 总结

本文介绍了如何在Docker中安装PostgreSQL数据库.
