继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

用Docker运行和访问PostgreSQL数据库指南

月关宝盒
关注TA
已关注
手记 420
粉丝 105
获赞 673

由ChatGPT和Dalle 3,

Docker 很棒,适合在各种环境中部署应用。这些容器轻巧、独立且便于部署!

这篇文章将介绍如何用Docker来运行Postgres。我们将重点讨论

  • 使用 Docker 运行一个 Postgres 实例;
  • 从主机机器或同一容器内访问数据库;
  • 从另一台服务器或不同 Docker 容器中访问
在Docker中:运行PostgreSQL:

要运行一个 postgres Docker 容器,我们只需运行如下命令。

使用Docker运行名为postgres_demo_container的容器,并以分离模式(-d)运行,将容器的5432端口映射到主机的5432端口,设置环境变量以指定用户名、数据库名和密码。命令如下:

docker run --name postgres_demo_container -d -p 5432:5432 \
-e POSTGRES_USER=postgres \
-e POSTGRES_DB=demo_db \
-e POSTGRES_PASSWORD="postgres" \
postgres:16-alpine3.19

这将使用 postgres:16-alpine3.19 Docker 镜像创建一个 Postgres 实例(实例中),用户名和密码都是 postgres,数据库名称为 demo_db

这会下载官方的 Docker 镜像(如果你还没有的话,),但你也可以选择使用Amazon ECR Public提供的镜像中的一个。

Microsoft Access
从主机 / 在同一容器中

我把这两个情况放在一起,因为这样做可以很容易地从主机机器对Docker容器运行命令。

    docker exec -it  <container-name> <命令或命令>
请将 `<container-name>` 和 `<命令>` 替换为实际的容器名称和命令。

我们将要运行的命令显然是 psql

要从主机运行这个,我们用如下格式来进行操作。

docker exec -it  <container-name> psql -U <dataBaseUserName> <dataBaseName> # 在指定的容器中执行psql命令,连接到指定的数据库

按照我们的例子,就是这样。

    docker exec -it postgres_demo_container psql -U postgres demo_db

在PostgreSQL容器中运行psql命令以连接到demo_db数据库。

运行这个命令,我们先来创建一个简单的表,然后添加一些数据进行测试吧。

    demo_db=# CREATE TABLE user_table (  
      id integer,   
      name varchar(10)  
    );  

    INSERT INTO user_table values (1, 'Itsuki');  

    SELECT * FROM user_table;

我们将得到的就是这个结果。

    id |  name    
    ----+--------  
      1 | Itsuki  
    (1 行记录)
从另一个 Docker 容器或远程服务器拿数据

首先,让我们用一个不同的Docker容器启动一个服务器。(如果没有的话。)

    docker run --name server_container -d -p 80:80 \  
      -e POSTGRES_USER=postgres \  
      -e POSTGRES_DB=postgres \  
      -e POSTGRES_PASSWORD="postgres" \  
      postgres:16-alpine3.19
# 启动一个名为server_container的容器,映射80端口,并设置Postgres的用户、数据库和密码

我们使用上述相同的Docker镜像,这样就可以包含内置的psql

现在,要使用 psql 工具连接到另一个远程主机上的数据库,我们可以在其后使用如下命令。

# 使用psql连接到远程数据库的命令
psql -h (远程主机名) -p (远程端口号) -U (数据库用户名) (数据库名)

你可以通过几种不同的方式来获取 Docker 容器的 IP 地址。

例如,我们可以在启动了 docker 的主机上运行如下命令。

    docker exec -it postgres_demo_container /sbin/ip route|awk '/default/ { print $3 }'

我们可以使用这条命令来找到容器 postgres_demo_container 的默认网关地址。

在 Docker 镜像中简单地做以下事情。

/sbin/ip route|awk '/default/ { print $3 }'

如果你用 Mac,也可以用 ifconfig 查看本机 IP 地址。

    ifconfig | grep "inet " | grep -Fv 127.0.0.1 | awk '{print $2}'

该命令用于显示除127.0.0.1之外的所有IP地址。

上面的命令会显示不同的地址,但任何一个都有效。

现在,我们可以使用我们获取的主机来在我们的服务器容器上执行 psql 命令,在这种情况下,就是在我们的 server_container 容器中执行 psql 命令。

    docker exec -it server_container psql -h host_ip -p 5432 -U postgres demo_db

说明:该命令用于在名为 server_container 的 Docker 容器中,通过 PostgreSQL 命令行工具 psql 连接到指定 IP 和端口的数据库服务器,并以 postgres 用户身份访问名为 demo_db 的数据库。

记得将 host_ip 替换为你上面获得的值!

既然我们要连接到远程主机,可能会被要求输入数据库密码,请输入密码以连接数据库(如果你使用的是相同的命令,如我上面提到的,密码将是 postgres)。

先确认一下我们已经成功连接了,让我们快速运行一下 select 命令来看看我们的 user_table 吧。

    demo_db=# select * from user_table;  
     ID | 姓名    
    ----+--------  
      1 | Itsuki  
    (1 条记录)

我们得到了和上面一样的表格,当然!

谢谢大家的阅读!

今天就到这里啦!

玩得开心,Docker起来!

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP