# Docker 部署

URL: https://caijiao.org/postgresql/extras/kubernetes/docker
Source: docs/postgresql/extras/kubernetes/docker.md
Description: 本章节介绍如何使用 Docker 部署 PostgreSQL，帮助用户在容器化环境中高效地部署和管理 PostgreSQL 数据库。

Docker 是一种轻量级的容器化技术，能够快速部署和管理应用程序和服务。在本章节中，我们将介绍如何使用 Docker 部署 PostgreSQL 数据库，并提供常见的操作和配置技巧。

## 1. 安装 Docker

### 1.1 在 Windows 上安装 Docker

1. 访问 [Docker 官网](https://www.docker.com/products/docker-desktop) 下载 Docker Desktop 安装包。
2. 运行安装程序并按照提示完成安装。
3. 安装完成后，启动 Docker Desktop。

### 1.2 在 macOS 上安装 Docker

1. 使用 Homebrew 安装 Docker：

```bash
brew install --cask docker
````

2. 或者从 [Docker 官网](https://www.docker.com/products/docker-desktop) 下载并安装 Docker Desktop。

### 1.3 在 Linux 上安装 Docker

对于 Ubuntu 系统，运行以下命令进行安装：

```bash
sudo apt update
sudo apt install docker.io
```

对于其他 Linux 发行版，请参考 [Docker 安装文档](https://docs.docker.com/engine/install/)。

## 2. 使用 Docker 部署 PostgreSQL

### 2.1 获取 PostgreSQL 镜像

1. 打开终端并拉取 PostgreSQL 官方镜像：

```bash
docker pull postgres
```

2. 镜像下载完成后，您可以使用 `docker images` 命令查看已下载的镜像列表。

### 2.2 运行 PostgreSQL 容器

使用以下命令启动一个 PostgreSQL 容器：

```bash
docker run --name postgres-container -e POSTGRES_PASSWORD=mysecretpassword -d postgres
```

解释：

* `--name postgres-container`：为容器指定一个名称。
* `-e POSTGRES_PASSWORD=mysecretpassword`：设置 PostgreSQL 的超级用户密码。
* `-d`：让容器在后台运行。
* `postgres`：指定使用的镜像。

### 2.3 访问 PostgreSQL 容器

要进入正在运行的 PostgreSQL 容器并执行 SQL 查询，可以使用以下命令：

```bash
docker exec -it postgres-container psql -U postgres
```

这会将您带到 PostgreSQL 的命令行界面。

### 2.4 数据持久化

为了确保数据持久化，您需要将 PostgreSQL 容器的数据目录挂载到主机上。使用以下命令启动容器并挂载数据卷：

```bash
docker run --name postgres-container -e POSTGRES_PASSWORD=mysecretpassword -v /path/to/host/directory:/var/lib/postgresql/data -d postgres
```

这样，容器中的数据将保存在 `/path/to/host/directory` 目录下，即使容器停止或删除，数据也会保留。

## 3. 配置 PostgreSQL 容器

### 3.1 设置端口映射

您可以将 PostgreSQL 容器的端口映射到主机上的指定端口。例如，使用以下命令将容器的 `5432` 端口映射到主机的 `5432` 端口：

```bash
docker run --name postgres-container -e POSTGRES_PASSWORD=mysecretpassword -p 5432:5432 -d postgres
```

这样，您可以通过主机的 `localhost:5432` 访问 PostgreSQL 数据库。

### 3.2 设置自定义数据库

在启动容器时，您可以通过 `-e POSTGRES_DB` 参数创建自定义数据库：

```bash
docker run --name postgres-container -e POSTGRES_PASSWORD=mysecretpassword -e POSTGRES_DB=mydatabase -d postgres
```

这样，在容器启动时，会自动创建名为 `mydatabase` 的数据库。

## 4. 管理 PostgreSQL 容器

### 4.1 停止容器

要停止 PostgreSQL 容器，可以运行以下命令：

```bash
docker stop postgres-container
```

### 4.2 启动容器

要重新启动停止的容器，可以使用以下命令：

```bash
docker start postgres-container
```

### 4.3 删除容器

如果您不再需要容器，可以使用以下命令删除容器：

```bash
docker rm postgres-container
```

### 4.4 删除镜像

如果您想删除不再需要的 PostgreSQL 镜像，可以使用以下命令：

```bash
docker rmi postgres
```

## 5. 使用 Docker Compose 部署 PostgreSQL

Docker Compose 允许您定义和运行多容器 Docker 应用程序。以下是使用 Docker Compose 部署 PostgreSQL 的步骤。

### 5.1 创建 `docker-compose.yml` 文件

在项目目录下创建一个 `docker-compose.yml` 文件，内容如下：

```yaml
version: '3'
services:
  postgres:
    image: postgres
    environment:
      POSTGRES_PASSWORD: mysecretpassword
      POSTGRES_DB: mydatabase
    ports:
      - "5432:5432"
    volumes:
      - ./data:/var/lib/postgresql/data
```

### 5.2 启动服务

在同一目录下运行以下命令启动 PostgreSQL 服务：

```bash
docker-compose up -d
```

### 5.3 停止服务

如果需要停止服务，可以运行：

```bash
docker-compose down
```

## 6. 总结

使用 Docker 部署 PostgreSQL 数据库具有许多优点，如快速部署、易于管理和配置。无论是使用 `docker run` 命令直接部署，还是使用 Docker Compose 来管理多个服务，都能大大简化 PostgreSQL 的部署和运维工作。通过这些方法，您可以轻松地在本地开发环境或生产环境中运行 PostgreSQL。
