一、使用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