配置 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 是一个免费的开源 RDBMS(关系数据库管理系统)。
本文,我们将使用 Docker 容器化平台来配置 PostgreSQL 和 pgAdmin Docker 容器。
配置 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 容器。