您的位置:

dockerpgsql: 将PostgreSQL数据库运行在Docker容器内

一、使用dockerpgsql的好处

1、便于管理和部署:通过使用dockerpgsql,管理员可以很方便地管理和部署PostgreSQL数据库,无需考虑在操作系统上进行安装和配置的问题。

2、可靠性和安全性:通过容器化PostgreSQL数据库,它们可以隔离在容器内,避免不同数据所带来的安全隐患。同时,每个容器都有独立的文件系统,可以防止容器之间的数据干扰和相互影响。

3、易于扩展:使用dockerpgsql,管理员可以很容易地为正在运行的PostgreSQL容器添加新的资源。这样可以实现动态的资源分配,在高峰时段自动扩展容器来满足请求。

二、在dockerpgsql容器中运行PostgreSQL数据库

要在dockerpgsql容器中运行PostgreSQL,需要进行以下步骤:

1、创建dockerpgsql镜像:

FROM postgres:11.2
RUN mkdir -p /etc/postgresql \
    && mkdir -p /var/run/postgresql \
    && chown -R postgres:postgres /etc/postgresql /var/run/postgresql
COPY postgresql.conf /etc/postgresql/
COPY pg_hba.conf /etc/postgresql/
EXPOSE 5432
CMD ["postgres", "-c", "config_file=/etc/postgresql/postgresql.conf"]

2、创建docker-compose.yml文件:

version: '3'
services:
  db:
    image: my-postgres
    environment:
      POSTGRES_PASSWORD: mysecretpassword
  pgadmin:
    image: dpage/pgadmin4
    environment:
      PGADMIN_DEFAULT_EMAIL: pgadmin4@pgadmin.org
      PGADMIN_DEFAULT_PASSWORD: admin

3、运行docker-compose命令:

docker-compose up

三、数据的挂载和备份

在PostgreSQL容器中,数据是存储在容器内的。要将数据挂载到宿主机上,需要进行以下步骤:

1、创建一个磁盘卷:

docker volume create pgdata

2、在docker-compose.yml文件中指定挂载路径:

version: '3'
services:
  db:
    image: my-postgres
    environment:
      POSTGRES_PASSWORD: mysecretpassword
    volumes:
      - pgdata:/var/lib/postgresql/data/pgdata
  pgadmin:
    image: dpage/pgadmin4
    environment:
      PGADMIN_DEFAULT_EMAIL: pgadmin4@pgadmin.org
      PGADMIN_DEFAULT_PASSWORD: admin
volumes:
  pgdata:

3、使用pg_dump进行备份:

pg_dump -U postgres -F c my_db > my_db.dump

四、网络配置和端口映射

在默认情况下,PostgreSQL容器运行在自己的网络命名空间中,并且只能通过容器的IP地址访问。要通过其他主机访问容器运行的PostgreSQL数据库,需要进行以下步骤:

1、指定容器中PostgreSQL数据库使用的端口(默认5432):

version: '3'
services:
  db:
    image: my-postgres
    environment:
      POSTGRES_PASSWORD: mysecretpassword
    ports:
      - "5432:5432"

2、使用宿主机网络:

version: '3'
services:
  db:
    image: my-postgres
    environment:
      POSTGRES_PASSWORD: mysecretpassword
    network_mode: host

五、Docker Compose的使用技巧

1、使用Docker网络进行容器之间的通信:

在一个Docker Compose项目中,可以创建多个容器。如果这些容器需要相互通信,可以使用Docker网络进行连接。在docker-compose.yml文件的顶部指定网络名称:

version: '3'
services:
  db:
    image: my-postgres
    environment:
      POSTGRES_PASSWORD: mysecretpassword
    networks:
      - mynetwork
  pgadmin:
    image: dpage/pgadmin4
    environment:
      PGADMIN_DEFAULT_EMAIL: pgadmin4@pgadmin.org
      PGADMIN_DEFAULT_PASSWORD: admin
    networks:
      - mynetwork
networks:
  mynetwork:

2、使用环境变量:

在docker-compose.yml文件中,可以使用环境变量来设置服务配置。这样可以避免在修改配置时对docker-compose.yml文件进行频繁的修改。例如:

version: '3'
services:
  db:
    image: my-postgres
    environment:
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}

在运行时,可以通过设置环境变量来传递值:

export POSTGRES_PASSWORD=123456
docker-compose up