1. Обзор
В этом руководстве мы научимся устанавливать PostgreSQL с помощью Docker . Как правило, мы запускаем контейнер Docker, используя общедоступный образ Docker. Точно так же мы можем получить предварительно настроенные образы Docker сервера базы данных PostgreSQL из Docker Hub. Здесь мы также покажем, как можно установить, настроить и запустить PostgreSQL в Docker.
Во-первых, мы запустим контейнер Docker с базой данных PostgreSQL, используя общедоступный образ PostgreSQL . Позже мы создадим настроенный файл Dockerfile для установки сервера PostgreSQL в контейнере Docker. Мы также научимся создавать резервные копии и восстанавливать базу данных с помощью контейнера Docker.
Давайте углубимся в запуск контейнера Docker с базой данных PostgreSQL.
2. Понимание базы данных PostgreSQL
Прежде чем мы перейдем к запуску контейнера Docker базы данных PostgreSQL, давайте сначала разберемся с базой данных PostgreSQL. PostgreSQL — это RDMS с открытым исходным кодом, похожая на MySQL. Это объектно-ориентированная база данных, но мы можем обрабатывать как структурированные, так и неструктурированные данные.
Механизм базы данных PostgreSQL работает на различных платформах, включая Windows, Mac OS X и Linux. Он также предоставляет расширенные типы данных и функции оптимизации производительности для хранения и масштабирования сложных рабочих нагрузок баз данных.
3. Настройте PostgreSQL, используя общедоступный образ
Чтобы запустить PostgreSQL с помощью Docker, нам сначала нужно получить общедоступный образ postgres , доступный в
Docker Hub :
$ docker pull postgres
Using default tag: latest
latest: Pulling from library/postgres
1fe172e4850f: Pull complete
...
c08147da7b54: Pull complete
Digest: sha256:ab0be6280ada8549f45e6662ab4f00b7f601886fcd55c5976565d4636d87c8b2
Status: Downloaded newer image for postgres:latest
docker.io/library/postgres:latest
В приведенной выше команде мы вытащили последний стабильный образ postgres .
Мы также можем получить конкретную версию образа postgres
, используя следующую команду:
$ docker pull postgres:14.2
14.2: Pulling from library/postgres
Digest: sha256:e3d8179786b8f16d066b313f381484a92efb175d1ce8355dc180fee1d5fa70ec
Status: Downloaded newer image for postgres:14.2
docker.io/library/postgres:14.2
Теперь мы запустим контейнер Docker, используя изображение postgres:latest
, используя следующую команду:
$ docker run -itd -e POSTGRES_USER=foreach -e POSTGRES_PASSWORD=foreach -p 5432:5432 -v /data:/var/lib/postgresql/data --name postgresql postgres
5aeda2b20a708296d22db4451d0ca57e8d23acbfe337be0dc9b526a33b302cf5
Приведенная выше команда использует переменные среды POSTGRES_USER
и POSTGRES_PASSWORD
для установки имени пользователя
и пароля
для базы данных PostgreSQL. По умолчанию база данных PostgreSQL работает на порту 5432 .
Мы открыли порт 5432
на хосте, используя «-p 5432:5432»
в команде запуска docker
.
Для резервного копирования данных мы также смонтировали каталог /var/lib/postgresql/data
в каталог /data
хост-компьютера контейнера postgres .
psql
— это утилита командной строки, используемая для интерактивного доступа к базам данных PostgreSQL. Давайте теперь воспользуемся psql
для подключения к базе данных:
$ PGPASSWORD=foreach psql -U foreach
Чтобы получить список всех баз данных, мы будем использовать команду \l
:
$ PGPASSWORD=foreach psql -U foreach -c '\l'
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
------------+------------+----------+------------+------------+---------------------------
foreach | foreach | UTF8 | en_US.utf8 | en_US.utf8 |
postgres | foreach | UTF8 | en_US.utf8 | en_US.utf8 |
template0 | foreach | UTF8 | en_US.utf8 | en_US.utf8 | =c/foreach +
| | | | | foreach=CTc/foreach
template1 | foreach | UTF8 | en_US.utf8 | en_US.utf8 | =c/foreach +
| | | | | foreach=CTc/foreach
(4 rows)
В приведенном выше выводе мы можем получить подробную информацию обо всех базах данных, присутствующих на сервере PostgreSQL.
4. Настройте PostgreSQL с помощью настроенного файла Dockerfile.
Мы также можем настроить сервер базы данных PostgreSQL, создав собственный файл Dockerfile. Здесь мы создадим Dockerfile, который будет содержать все необходимые команды для установки Postgres
с использованием CentOS в качестве базового образа:
FROM centos:7
COPY startUpScript.sh /
RUN yum install -y epel-release maven wget \
&& yum clean all \
&& yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm \
&& yum install -y postgresql11-server postgresql11-contrib \
&& chown root /startUpScript.sh \
&& chgrp root /startUpScript.sh \
&& chmod 777 /startUpScript.sh
CMD ["/bin/bash","-c","/startUpScript.sh && tail -f /dev/null"]
В приведенном выше файле Docker мы использовали startUpScript.sh
для запуска сервера базы данных PostgreSQL после успешной установки. Заглянем в файл startUpScript.sh
:
#!/bin/bash
su -l postgres -c /usr/pgsql-11/bin/initdb
su -l postgres -c "/usr/pgsql-11/bin/pg_ctl -D /var/lib/pgsql/11/data -l /tmp/pg_logfile start"
createdb -U postgres foreach
В startUpScript.sh
мы сначала инициализировали базу данных PostgreSQL, а затем создали фиктивную базу данных foreach
.
5. Установите pgAdmin
в Docker
Пока что сервер PostgreSQL активен и работает на порту 5432 .
Теперь мы установим pgAdmin , инструмент пользовательского веб-интерфейса, используемый для управления базами данных и службами PostgreSQL. pgAdmin можно использовать для выполнения SQL-запросов к базам данных PostgreSQL .
Чтобы выполнить все запросы из пользовательского интерфейса, мы можем использовать pgAdmin, и для этого нам нужно вытащить образ pgAdmin с помощью следующей команды:
$ docker pull dpage/pgadmin4:latest
latest: Pulling from dpage/pgadmin4
40e059520d19: Pull complete
...
6d23acfae6ef: Pull complete
Digest: sha256:f820e5579857a7210599f998c818777a2f6f39172b50fbeb2faaa1a70413e9ac
Status: Downloaded newer image for dpage/pgadmin4:latest
docker.io/dpage/pgadmin4:latest
Чтобы продемонстрировать, давайте запустим контейнер с помощью следующей команды:
$ docker run --name pgadmin-foreach -p 5051:80 -e "PGADMIN_DEFAULT_EMAIL=user@foreach.com" -e "PGADMIN_DEFAULT_PASSWORD=foreach" -d dpage/pgadmin4
В приведенной выше команде мы предоставили PGADMIN_DEFAULT_EMAIL
и PGADMIN_DEFAULT_PASSWORD
в качестве переменной среды для контейнера pgadmin-foreach
:
Мы можем легко получить доступ к базам данных PostgreSQL с помощью графического интерфейса pgAdmin. Чтобы получить доступ к базе данных, мы должны установить соединение с сервером Postgres с помощью pgAdmin. Мы можем сделать это, войдя в pgAdmin.
6. Резервное копирование и восстановление данных
В этом разделе мы научимся создавать резервные копии и восстанавливать данные в PostgreSQL с помощью команд Docker.
Во-первых, для резервного копирования данных давайте создадим фиктивную базу данных foreach
и таблицу foreachauthor.
$ createdb -h localhost -p 5432 -U foreach foreach
Команда для создания таблицы выглядит следующим образом:
CREATE TABLE foreachauthor (
AUTHOR_ID INT PRIMARY KEY NOT NULL,
AUTHOR_NAME TEXT NOT NULL,
AUTHOR_AGE INT NOT NULL,
AUTHOR_LEVEL INT NOT NULL
);
Перечислим созданную таблицу в базе данных:
psql -U foreach -d foreach -c "\d"
List of relations
Schema | Name | Type | Owner
--------+----------------+-------+------------
public | baedlungauthor | table | foreach
(1 row)
Теперь используйте приведенную ниже команду, чтобы получить сведения о схеме таблицы foreachauthor
:
psql -U foreach -d foreach -c "\d baedlungauthor"
Table "public.baedlungauthor"
Column | Type | Collation | Nullable | Default
--------------+---------+-----------+----------+---------
author_id | integer | | not null |
author_name | text | | not null |
author_age | integer | | not null |
author_level | integer | | not null |
Indexes:
"baedlungauthor_pkey" PRIMARY KEY, btree (author_id)
На данный момент мы создали базу данных и таблицу. Давайте рассмотрим команду для резервного копирования базы данных для контейнера Docker:
$ docker exec -t postgresql pg_dumpall -c -U foreach > dump.sql
Здесь, в приведенной выше команде, мы использовали pg_dumpall
для резервного копирования базы данных foreach
. Это стандартный инструмент PostgreSQL для резервного копирования базы данных. В команде мы указали имя пользователя сервера БД для доступа к привилегиям.
Теперь давайте проверим команду для восстановления базы данных:
$ cat dump.sql | docker exec -i postgresql psql -U foreach
Вот, вкратце, мы восстановили все таблицы базы данных foreach
с помощью команды psql
.
7. Заключение
В этой статье мы научились устанавливать базу данных PostgreSQL с помощью контейнера Docker. Мы изучили каждый шаг, чтобы получить, настроить и запустить Docker-контейнер Postgres. Кроме того, мы изучили оба способа доступа к серверу базы данных PostgreSQL. Сначала мы изучили pgAdmin для доступа к серверу базы данных PostgreSQL, работающему в контейнере Docker. Позже мы использовали psql
для выполнения запросов к базам данных в PostgreSQL.
Подводя итог, мы запустили контейнер Docker с базой данных PostgreSQL, используя общедоступный образ Postgres, представленный в Docker Hub. Мы также создали наш настроенный файл Dockerfile для установки сервера PostgreSQL в контейнере Docker.
Наконец, мы рассмотрели резервное копирование и восстановление данных в базе данных PostgreSQL с помощью контейнера Docker.