Docker部署PostgreSQL+PostGIS服务的实现
<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">引言</a></li><li><a href="#_label1">拉取镜像</a></li><li><a href="#_label2">运行容器</a></li><ul class="second_class_ul"><li><a href="#_lab2_2_0">方法1:docker直接运行</a></li><li><a href="#_lab2_2_1">方法2:docker-compose</a></li></ul><li><a href="#_label3">安装PostGIS模块</a></li><ul class="second_class_ul"></ul><li><a href="#_label4">直接部署PostGIS容器</a></li><ul class="second_class_ul"></ul><li><a href="#_label5">总结</a></li><ul class="second_class_ul"></ul></ul></div><p class="maodian"><a name="_label0"></a></p><h2>引言</h2><p>在进行空间数据开发、GIS 数据处理或数据科学任务时,PostgreSQL 是一款非常受欢迎的开源数据库,而其扩展模块 PostGIS 更是为其带来了强大的地理空间支持。<br />本文将介绍如何使用 Docker 快速部署 PostgreSQL,并手动安装 PostGIS 模块,实现一个可持久化的空间数据库服务。</p>
<p>为什么选择 Docker 部署 PostgreSQL?<br />Docker 可以让我们以容器化方式快速启动数据库服务,避免繁琐的环境配置过程,具有如下优点:</p>
<ul><li>快速启动、重启和销毁数据库服务</li><li>容器与宿主环境隔离,配置安全清晰</li><li>配置持久化,支持挂载宿主机目录保存数据</li><li>易于迁移、复制和多平台部署</li></ul>
<p>接下来我们就一步步完成部署!</p>
<p class="maodian"><a name="_label1"></a></p><h2>拉取镜像</h2>
<p>使用 docker pull 命令从 Docker Hub 拉取 PostgreSQL 官方镜像,这里我们以最新的 16 版本为例:</p>
<div class="jb51code"><pre class="brush:bash;">docker pull postgres:16.2
</pre></div>
<p class="maodian"><a name="_label2"></a></p><h2>运行容器</h2>
<p class="maodian"><a name="_lab2_2_0"></a></p><h3>方法1:docker直接运行</h3>
<p>通过以下命令运行 PostgreSQL 容器,并进行以下设置:</p>
<ul><li>设置容器名称为 postgres</li><li>配置数据库密码为 123456</li><li>将宿主机目录 /opt/postgres/data 挂载到容器内部的数据库目录,实现数据持久化</li><li>映射主机的 5432 端口</li></ul>
<div class="jb51code"><pre class="brush:bash;">docker run -d \
--name postgres \
-e POSTGRES_PASSWORD=123456 \
-v /opt/postgres/data:/var/lib/postgresql/data \
-p 5432:5432 \
postgres:16.2
</pre></div>
<p>⚠️ 注意事项:</p>
<ul><li>请确保宿主机 /opt/postgres/data 目录存在,并具有适当权限</li><li>如果已有其他服务占用 5432 端口,请修改映射端口</li></ul>
<p class="maodian"><a name="_lab2_2_1"></a></p><h3>方法2:docker-compose</h3>
<ul><li>编写docker-compose.yml文件:</li></ul>
<div class="jb51code"><pre class="brush:yaml;">services:
postgres:
image: postgres:16.2
container_name: postgres
restart: unless-stopped
ports:
- "5432:5432"
volumes:
- /opt/postgres/data:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD: 123456
</pre></div>
<ul><li>启动容器<br />在docker-compose.yml文件所在的目录下,打开终端或命令行界面,运行以下命令:</li></ul>
<div class="jb51code"><pre class="brush:bash;">docker-compose up -d
</pre></div>
<p class="maodian"><a name="_label3"></a></p><h2>安装PostGIS模块</h2>
<p>PostGIS 并不默认包含在 PostgreSQL 镜像中,因此需要我们手动进入容器并安装。</p>
<ol><li>进入容器:</li></ol>
<div class="jb51code"><pre class="brush:bash;">docker exec -it postgres /bin/bash
</pre></div>
<ol start="2"><li>更新 apt 包索引:</li></ol>
<div class="jb51code"><pre class="brush:bash;">apt-get update
</pre></div>
<p>这里如果用国内源会速度快些</p>
<div class="jb51code"><pre class="brush:bash;">tee /etc/apt/sources.list.d/debian.sources >/dev/null <<'EOF'
Types: deb
URIs: http://mirrors.aliyun.com/debian
Suites: bookworm bookworm-updates
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
Types: deb
URIs: http://mirrors.aliyun.com/debian-security
Suites: bookworm-security
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
EOF
</pre></div>
<ol start="3"><li>安装 PostGIS 模块:</li></ol>
<div class="jb51code"><pre class="brush:bash;">apt-get install -y postgis postgresql-16-postgis-3
</pre></div>
<p>postgresql-16-postgis-3 是对应 PostgreSQL 16 的 PostGIS 模块名称<br />如果你使用其他版本,请根据版本号调整命令</p>
<ol start="4"><li>验证PostGIS是否成功安装:</li></ol>
<ul><li>进入PostgreSQL数据库</li></ul>
<div class="jb51code"><pre class="brush:bash;">psql -U postgres
</pre></div>
<ul><li>默认进入的是 postgres 数据库,你也可以在后面指定目标数据库:</li></ul>
<div class="jb51code"><pre class="brush:bash;">psql -U postgres -d your_database
</pre></div>
<ul><li>执行创建扩展</li></ul>
<div class="jb51code"><pre class="brush:bash;">CREATE EXTENSION postgis;
</pre></div>
<ul><li>查看扩展版本</li></ul>
<div class="jb51code"><pre class="brush:bash;">SELECT PostGIS_Version();
</pre></div>
<ul><li>正确会输出类似以下信息:</li></ul>
<div class="jb51code"><pre class="brush:bash;">postgis_version
-------------------
3.4 USE_GEOS=1 USE_PROJ=1 USE_STATS=1
</pre></div>
<p class="maodian"><a name="_label4"></a></p><h2>直接部署PostGIS容器</h2>
<p>当然,我们也可以采用dockerhub上的PostGIS镜像来进行部署。</p>
<div class="jb51code"><pre class="brush:bash;">docker pull postgis/postgis:11-3.3
</pre></div>
<div class="jb51code"><pre class="brush:bash;">docker run --restart=always -d --name postgis \
-p 5432:5432 \
-v /mnt/data/docker/volumes/postgis/data/:/var/lib/postgresql/data/ \
-e POSTGRES_PASSWORD=123456 postgis/postgis:11-3.3
</pre></div>
<p class="maodian"><a name="_label5"></a></p><h2>总结</h2>
<p>通过本文,我们已经完成了使用Docker快速部署PostgreSQL16,并且实现数据持久化挂载,同时安装并验证PostGIS模块。<br />后续我们可以:<br />使用 pgAdmin 可视化管理工具连接容器数据库,并进行一系列的数据库操作啦。<br />如果在安装过程中遇到任何问题,欢迎留言交流。</p>
<p>到此这篇关于Docker部署PostgreSQL+PostGIS服务的实现的文章就介绍到这了,更多相关Docker部署PostgreSQL+PostGIS服务内容请搜索琼殿技术社区以前的文章或继续浏览下面的相关文章希望大家以后多多支持琼殿技术社区!</p>
頁:
[1]