使用Docker部署postgresql
使用Docker部署postgresqlpostgresql数据库在Docker中的镜像的名称为postgres,可以从DockerHub中pull下来,假如pull不下来那么很大概率是网络问题导致的,这时候你可能必要在网上找一些能用的镜像源,以成功拉取postgres镜像。
有了postgres的镜像之后,你就可以在本地的Docker创建一个postgres的容器并运行。我们有两种方式来创建容器:
[*]直接使用命令行来创建postgres的容器并运行;
[*]使用docker-compose来创建postgres的容器并运行;
这里先先容使用命令行的方式来创建postgres容器的方式:
docker run -d \
--name postgres-exprdb \
-p 5432:5432 \
-e POSTGRES_PASSWORD=123456 \
-e POSTGRES_USER=aderversa \
-e POSTGRES_DB=testdb \
-v ~/postgresql/data:/var/lib/postgresql/data \
postgres
[*]-e是用来设置postgres容器中环境变量的值的,有些特别的环境变量将会影响到启动后的postgresql的一些参数,比如postgresql数据库的暗码、用户等等。详细一些环境变量的寄义可以检察dockerhub中有关于环境变量的先容,本文的最后也会先容一些环境变量的寄义。
[*]-p将PostgreSQL的5432端口暴露到宿主机的5432端口,方便我们在外部访问容器内的PostgreSQL服务。
[*]-v将容器内的/var/lib/postgresql/data文件夹挂载到宿主机的~/postgresql/data文件夹下,这样数据库中的数据就不会由于我们删除了容器而丢失。你必要本身界说好这个数据文件夹该挂载到本身主机的什么地方上,这里我给出的值仅做参考。
[*]--name postgres-exprdb指定创建的PostgreSQL容器的名字。
[*]-d表现该容器在背景运行,并打印创建容器的ID到控制台。
[*]postgres是我们所使用的镜像。
运行上述命令,使用docker ps
检察容器状态:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b1f5d4521cd0 postgres "docker-entrypoint.s…" 8 seconds ago Up 7 seconds 0.0.0.0:5432->5432/tcp postgres-exprdb
可以看见,容器已经在背景运行了。之后,我们可以使用别的什么工具去访问已经创建好的testdb数据库,用界说好的特权用户aderversa,以及指定好的暗码123456。
IP已知,端口已知,用户名和暗码都有了,那么你就可以用你能想象到的方式去连接这个PostgreSQL数据库啦。
使用docker-compose来部署
相比于在命令行中写冗长的命令,我更喜好将容器的配置写到docker-compose.yaml文件中,然后一行:
docker compose -f docker-compose.yaml -p package_name up -d
[*]-f指定要要操纵的文件。
[*]-p指定项目的名称。
[*]up是创建并启动容器的命令。
[*]-d表现容器在背景启动。
比如,我编写了一个docker-compose.yaml文件:
version: "3.8"
services:
database_expr:
image: postgres:latest
container_name: postgres-expr
restart: on-failure:3
ports:
- 5432:5432
volumes:
- ./db:/var/lib/postgresql/data
healthcheck:
test: [ "CMD", "pg_isready" ]
interval: 10s
timeout: 5s
retries: 5
environment:
- POSTGRES_PASSWORD=123456
- POSTGRES_USER=aderversa
- POSTGRES_DB=testdb
直接对其进行操纵就可以创建好容器并启动,用户不必要关心里面有什么配置。以致假如你觉得使用docker compose的命令行来启动不够抽象,那么你可以将它编写入shell脚本中,用户直接运行脚本,只要用户安装了Docker环境,就可以安装PostgreSQL成功,他以致不必要关心Docker命令应该如何使用。
进入postgres容器中执行SQL
使用命令:
docker ps
查找出刚才创建的PostgreSQL容器的ID:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dcf5e3c0ff7f postgres:latest "docker-entrypoint.s…" 13 hours ago Up 13 hours (healthy) 0.0.0.0:5432->5432/tcp postgres-expr
得到container_id = dcf5e3c0ff7f,接着我们使用以下命令进入容器的bash中,方便在操纵容器:
docker exec -it dcf5e3c0ff7f /bin/bash
注意,假如是在Windows下执行这条命令的时候,使用Git Bash来执行可能会由于终端的一些问题执行失败,此时必要更换一下执行命令的终端,比如:PowerShell。
进入到容器中是这个样子的:
> docker exec -it dcf5e3c0ff7f /bin/bash
root@dcf5e3c0ff7f:/# 第一行是在PowerShell中执行的,而第二行则是PostgreSQL容器中运行的bash历程。
接着我们就可以使用:
psql ... ]
这里先容连接数据库必要使用的OPTION选项,详细的你可以使用psql --help来检察:
[*]-h指定PostgreSQL数据库的IP地点。
[*]-p指定PostgreSQL数据库的端口号。
[*]-U指定登录到数据库的用户名,不指定默认就是root。
[*]-w从不提示输入暗码,字面意思,不必要输入暗码来进行访问数据库,默认是不必要输入暗码的。
[*]-W强制暗码输入。
按照这个用法,我们可以用以下两种方式连接数据库:
# 这里由于我们在创建容器的时候指定的特权用户是aderversa,因此root被挤占掉了
# 用户名对于我这里来说是必须设置的。
psql -p 127.0.0.1 -p 5432 -U aderversa testdb
大概省事一点,直接使用:
psql testdb aderversa
执行成功后我们就可以大概进入psql的命令行:
psql (17.2 (Debian 17.2-1.pgdg120+1))
Type "help" for help.
testdb=#
psql的使用
这里我们并不知道如何使用这个命令行,它提示我们可以使用help来得到帮助,那么就执行一波help,得到了以下信息:
You are using psql, the command-line interface to PostgreSQL.
Type:\copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit
这里它告诉我们:
[*] \copyright,可以PostgreSQL DDMS的一些条款,里面大概是说:不管你出于何种目的,该软件和其文档都是允许你使用、复制、修改和发布的,并且是不必要任何费用,不必要修改的同意…看起来是非常宽松的声明,究竟PostgreSQL遵照的是BSD协议。
[*] \h显示SQL命令,比如CREATE TABLE ALTER TABLE…。
[*] \?显示psql的命令,这里面还是非常多命令的,大多都是用来检察数据库的状态的,比如存在什么表、数据库、视图之类的。这里先容一些常用的、简朴的命令:
[*]\l,列出所有数据库;
[*]\c,连接到数据库某个数据库,假如先前有连接到某个数据库那么这个操纵就是更换连接的数据库;
[*]\dt
,检察正在使用的数据库中存在哪些表(注意,默认创建的表好像是不会列出来的);
[*] \g执行psql的上一个命令。
[*] \q退出psql。
以上就是psql的基本用法了,你可以按照本身的在上面执行SQL语句,比如:
create table user ( id int primary key );
注意SQL命令以;末了就可以了。
创建完成后可以使用:
\dt
来检察你是否创建成功。
接下来就是你发挥创造力的时候了,本身实验着使用psql吧。
增补postgres容器的环境变量
[*]POSTGRES_PASSWORD,必要的环境变量。这个环境变量将设置PostgreSQL容器中特权用户的暗码。假如你要使用PostgreSQL镜像,让它以容器的情势的运行,那么这个环境变量就必须要设置,它一定不可以大概为空大概未界说。默认的特权用户将由POSTGRES_USER来界说。
[*]POSTGRES_USER,可选的环境变量。设置PostgreSQL容器中的特权用户名,必要与POSTGRES_PASSWORD一起使用,以此设置好特权用户的名字和暗码。假如该环境变量未被指定,那么默认的特权用户名为postgres。
[*]POSTGRES_DB,可选的环境变量。界说容器首次运行创建的默认数据库的名字。假如该环境变量未被使用,那么该环境变量的值等于POSTGRES_USER的值。
[*]POSTGRES_INITDB_ARGS,可选的环境变量。大概最终是以这种方式被使用:postgres initdb ${POSTGRES_INITDB_ARGS}。
[*]POSTGRES_INITDB_WALDIR,可选的环境变量。界说PostgreSQL事务日志的位置。默认的事务日志的位置是PostgreSQL主数据文件夹(PGDATA指定)下的一个子文件夹。
[*]POSTGRES_HOST_AUTH_METHOD,可选的环境变量。(个人明白,好像是与暗码择要相关的东西,这一样寻常不必要我们关注,假如有爱好可以去PostgreSQL: Documentation: 14: 21.5. Password Authentication了解一下)。
[*]PGDATA,可选的环境变量。界说PostgreSQL主数据文件夹的位置,默认是/var/lib/postgresql/data,假如有调整位置的需求那么可以按需求设置该变量的值。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]