由ChatGPT和Dalle 3,
Docker 很棒,适合在各种环境中部署应用。这些容器轻巧、独立且便于部署!
这篇文章将介绍如何用Docker来运行Postgres。我们将重点讨论
- 使用 Docker 运行一个 Postgres 实例;
- 从主机机器或同一容器内访问数据库;
- 从另一台服务器或不同 Docker 容器中访问
要运行一个 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起来!