配置 PostgreSQL Docker 容器

使用 PuTTY 等 ssh 工具以特权用户身份连接 docker-01.onitroad.com。

创建一个目录来存储与 PostgreSQL Docker 容器相关的配置和数据文件。

jackli@docker-01:~$ mkdir ~/postgres-01
jackli@docker-01:~$ cd postgres-01

为 PostgreSQL 数据文件创建一个目录。

jackli@docker-01:~/postgres-01$ mkdir postgres_data

创建一个 docker-compose.yml 文件。

jackli@docker-01:~/postgres-01$ vi docker-compose.yml

并其中定义 postgres 服务。

version: "3.1"
services:
  db:
    image: "postgres:11"
    container_name: "postgres-01.onitroad.com"
    ports:
      - "5432:5432"
 environment:
      POSTGRES_PASSWORD: "123"
    volumes:
      - ./postgres_data:/var/lib/postgresql/data
 links:
   - "pgadmin"

从 Docker Hub 拉取所需的 postgres 镜像。

jackli@docker-01:~/postgres-01$ sudo docker image pull postgres:11
11: Pulling from library/postgres
6d28e14ab8c8: Pull complete
84378331cde0: Pull complete
e4b51862ee73: Pull complete
ef2d3c443e8e: Pull complete
Digest: sha256:bd4aafe95150214ecb2388f6b16eb2e89ebe18f10831ff9d2fc810821fc481c5
Status: Downloaded newer image for postgres:11

使用我们的 docker-compose.yml 文件启动 postgres 容器。

jackli@docker-01:~/postgres-01$ sudo docker-compose up
[sudo] password for jackli:
Creating postgres-01.onitroad.com ... done
Attaching to postgres-01.onitroad.com
postgres-01.onitroad.com | The files belonging to this database system will be owned by user "postgres".
postgres-01.onitroad.com | This user must also own the server process.
postgres-01.onitroad.com |
postgres-01.onitroad.com | The database cluster will be initialized with locale "en_US.utf8".
postgres-01.onitroad.com | The default database encoding has accordingly been set to "UTF8".
postgres-01.onitroad.com | The default text search configuration will be set to "english".
postgres-01.onitroad.com |
postgres-01.onitroad.com | Data page checksums are disabled.
postgres-01.onitroad.com |
postgres-01.onitroad.com | fixing permissions on existing directory /var/lib/postgresql/data ... ok
postgres-01.onitroad.com | creating subdirectories ... ok
postgres-01.onitroad.com | selecting default max_connections ... 100
postgres-01.onitroad.com | selecting default shared_buffers ... 128MB
postgres-01.onitroad.com | selecting default timezone ... Etc/UTC
postgres-01.onitroad.com | selecting dynamic shared memory implementation ... posix
postgres-01.onitroad.com | creating configuration files ... ok
postgres-01.onitroad.com | running bootstrap script ... ok
postgres-01.onitroad.com | performing post-bootstrap initialization ... ok
postgres-01.onitroad.com | syncing data to disk ... ok
postgres-01.onitroad.com |
postgres-01.onitroad.com | Success. You can now start the database server using:
postgres-01.onitroad.com |
postgres-01.onitroad.com |
postgres-01.onitroad.com | WARNING: enabling "trust" authentication for local connections
postgres-01.onitroad.com | You can change this by editing pg_hba.conf or using the option -A, or
postgres-01.onitroad.com | --auth-local and --auth-host, the next time you run initdb.
postgres-01.onitroad.com |     pg_ctl -D /var/lib/postgresql/data -l logfile start
postgres-01.onitroad.com |
postgres-01.onitroad.com | waiting for server to start....2020-03-04 18:48:31.011 UTC [46] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
postgres-01.onitroad.com | 2020-03-04 18:48:31.054 UTC [47] LOG:  database system was shut down at 2020-03-04 18:48:30 UTC
postgres-01.onitroad.com | 2020-03-04 18:48:31.098 UTC [46] LOG:  database system is ready to accept connections
postgres-01.onitroad.com |  done
postgres-01.onitroad.com | server started
postgres-01.onitroad.com |
postgres-01.onitroad.com | /usr/local/bin/docker-entrypoint.sh: ignoring /docker-entrypoint-initdb.d/*
postgres-01.onitroad.com |
postgres-01.onitroad.com | waiting for server to shut down...2020-03-04 18:48:31.181 UTC [46] LOG:  received fast shutdown request
postgres-01.onitroad.com | .2020-03-04 18:48:31.183 UTC [46] LOG:  aborting any active transactions
postgres-01.onitroad.com | 2020-03-04 18:48:31.186 UTC [46] LOG:  background worker "logical replication launcher" (PID 53) exited with exit code 1
postgres-01.onitroad.com | 2020-03-04 18:48:31.188 UTC [48] LOG:  shutting down
postgres-01.onitroad.com | 2020-03-04 18:48:31.236 UTC [46] LOG:  database system is shut down
postgres-01.onitroad.com |  done
postgres-01.onitroad.com | server stopped
postgres-01.onitroad.com |
postgres-01.onitroad.com | PostgreSQL init process complete; ready for start up.
postgres-01.onitroad.com |
postgres-01.onitroad.com | 2020-03-04 18:48:31.296 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
postgres-01.onitroad.com | 2020-03-04 18:48:31.296 UTC [1] LOG:  listening on IPv6 address "::", port 5432
postgres-01.onitroad.com | 2020-03-04 18:48:31.314 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
postgres-01.onitroad.com | 2020-03-04 18:48:31.343 UTC [55] LOG:  database system was shut down at 2020-03-04 18:48:31 UTC
postgres-01.onitroad.com | 2020-03-04 18:48:31.371 UTC [1] LOG:  database system is ready to accept connections

打开一个新的 ssh 会话并连接 postgres 容器。

jackli@docker-01:~$ sudo docker exec -it postgres-01.onitroad.com bash
root@7bb0d4f1e4a6:/# su - postgres
postgres@7bb0d4f1e4a6:~$ psql
psql (11.7 (Debian 11.7-2.pgdg90+1))
Type "help" for help.
postgres=# exit
postgres@7bb0d4f1e4a6:~$ exit
logout
root@7bb0d4f1e4a6:/# exit
exit

PostgreSQL docker 容器配置成功。

配置 PostgreSQL 和 pgAdmin Docker 容器

PostgreSQL 是一个免费的开源 RDBMS(关系数据库管理系统)。

本文,我们将使用 Docker 容器化平台来配置 PostgreSQL 和 pgAdmin Docker 容器。

欢迎来到之路教程(on itroad-com)

配置 pgAdmin4 Docker 容器

从 Docker Hub 拉取 pgAdmin4 镜像。

jackli@docker-01:~/postgres-01$ sudo docker pull dpage/pgadmin4
Using default tag: latest
latest: Pulling from dpage/pgadmin4
89d9c30c1d48: Pull complete
910c49c00810: Pull complete
...
b19cea40abf6: Pull complete
76e3d6803955: Pull complete
Digest: sha256:1141073018353f91953c1523f170821e139dbd1c2d7808d3804962b2ba7e89e3
Status: Downloaded newer image for dpage/pgadmin4:latest

编辑 docker-compose.yml 文件并添加 pgadmin 服务。

jackli@docker-01:~/postgres-01$ vi docker-compose.yml

现在在 services 部分下定义 pgadmin 服务。

pgadmin:
    image: "dpage/pgadmin4"
    container_name: "pgadmin4.onitroad.com"
    ports:
      - "5050:80"
    environment:
      PGADMIN_DEFAULT_EMAIL: "jackli@onitroad.com"
      PGADMIN_DEFAULT_PASSWORD: "123"

在 Docker 主机上的 Ubuntu 防火墙中允许 pgAdmin 服务端口。

jackli@docker-01:~/postgres-01$ sudo ufw allow 5050/tcp
[sudo] password for jackli:
Rule added
Rule added (v6)

使用 docker-compose 命令启动 PostgreSQL 和 pgAdmin4 Docker 容器。

jackli@docker-01:~/postgres-01$ sudo docker-compose up
Starting pgadmin4.onitroad.com ... done
Starting postgres-01.onitroad.com ... done
Attaching to pgadmin4.onitroad.com, postgres-01.onitroad.com
postgres-01.onitroad.com |
postgres-01.onitroad.com | PostgreSQL Database directory appears to contain a database; Skipping initialization
postgres-01.onitroad.com |
postgres-01.onitroad.com | 2020-03-05 14:56:19.547 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
postgres-01.onitroad.com | 2020-03-05 14:56:19.547 UTC [1] LOG:  listening on IPv6 address "::", port 5432
postgres-01.onitroad.com | 2020-03-05 14:56:19.566 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
postgres-01.onitroad.com | 2020-03-05 14:56:19.600 UTC [24] LOG:  database system was shut down at 2020-03-05 14:49:21 UTC
postgres-01.onitroad.com | 2020-03-05 14:56:19.622 UTC [1] LOG:  database system is ready to accept connections
pgadmin4.onitroad.com | [2020-03-05 14:56:19 +0000] [1] [INFO] Starting gunicorn 19.9.0
pgadmin4.onitroad.com | [2020-03-05 14:56:19 +0000] [1] [INFO] Listening at: http://[::]:80 (1)
pgadmin4.onitroad.com | [2020-03-05 14:56:19 +0000] [1] [INFO] Using worker: threads
pgadmin4.onitroad.com | [2020-03-05 14:56:19 +0000] [81] [INFO] Booting worker with pid: 81

测试 PostgreSQL 和 pgAdmin Docker 容器

在 Web 浏览器中打开 URL http://docker-01.onitroad.com:5050。

登录为

  • 用户:jackli@onitroad.com
  • 密码:123

单击添加新服务器以添加 PostgreSQL 数据库服务器。

提供我们上面提供的连接设置,然后单击保存。

我们的 PostgreSQL 数据库服务器已添加到 pgAdmin 4 docker 容器中。

我们已经成功配置并启动了 PostgreSQL 和 pgAdmin Docker 容器。

日期:2020-09-17 00:12:23 来源:oir作者:oir