使用Docker部署postgresql

打印 上一主题 下一主题

主题 1002|帖子 1002|积分 3006

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
使用Docker部署postgresql

postgresql数据库在Docker中的镜像的名称为postgres,可以从DockerHub中pull下来,假如pull不下来那么很大概率是网络问题导致的,这时候你可能必要在网上找一些能用的镜像源,以成功拉取postgres镜像。
有了postgres的镜像之后,你就可以在本地的Docker创建一个postgres的容器并运行。我们有两种方式来创建容器:


  • 直接使用命令行来创建postgres的容器并运行;
  • 使用docker-compose来创建postgres的容器并运行;
这里先先容使用命令行的方式来创建postgres容器的方式:
  1. docker run -d \
  2. --name postgres-exprdb \
  3. -p 5432:5432 \
  4. -e POSTGRES_PASSWORD=123456 \
  5. -e POSTGRES_USER=aderversa \
  6. -e POSTGRES_DB=testdb \
  7. -v ~/postgresql/data:/var/lib/postgresql/data \
  8. 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
检察容器状态:
  1. CONTAINER ID   IMAGE      COMMAND                   CREATED         STATUS         PORTS                    NAMES
  2. 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文件中,然后一行:
  1. docker compose -f docker-compose.yaml -p package_name up -d
复制代码


  • -f指定要要操纵的文件。
  • -p指定项目的名称。
  • up是创建并启动容器的命令。
  • -d表现容器在背景启动。
比如,我编写了一个docker-compose.yaml文件:
  1. version: "3.8"
  2. services:
  3.   database_expr:
  4.     image: postgres:latest
  5.     container_name: postgres-expr
  6.     restart: on-failure:3
  7.     ports:
  8.       - 5432:5432
  9.     volumes:
  10.       - ./db:/var/lib/postgresql/data
  11.     healthcheck:
  12.       test: [ "CMD", "pg_isready" ]
  13.       interval: 10s
  14.       timeout: 5s
  15.       retries: 5
  16.     environment:
  17.       - POSTGRES_PASSWORD=123456
  18.       - POSTGRES_USER=aderversa
  19.       - POSTGRES_DB=testdb
复制代码
直接对其进行操纵就可以创建好容器并启动,用户不必要关心里面有什么配置。以致假如你觉得使用docker compose的命令行来启动不够抽象,那么你可以将它编写入shell脚本中,用户直接运行脚本,只要用户安装了Docker环境,就可以安装PostgreSQL成功,他以致不必要关心Docker命令应该如何使用。
进入postgres容器中执行SQL

使用命令:
  1. docker ps
复制代码
查找出刚才创建的PostgreSQL容器的ID:
  1. CONTAINER ID   IMAGE             COMMAND                   CREATED        STATUS                  PORTS                    NAMES
  2. 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中,方便在操纵容器:
  1. docker exec -it dcf5e3c0ff7f /bin/bash
复制代码
  注意,假如是在Windows下执行这条命令的时候,使用Git Bash来执行可能会由于终端的一些问题执行失败,此时必要更换一下执行命令的终端,比如:PowerShell。
  进入到容器中是这个样子的:
  1. > docker exec -it dcf5e3c0ff7f /bin/bash
  2. root@dcf5e3c0ff7f:/#
复制代码
第一行是在PowerShell中执行的,而第二行则是PostgreSQL容器中运行的bash历程。
接着我们就可以使用:
  1. psql [OPTION]... [DBNAME [USERNAME]]
复制代码
这里先容连接数据库必要使用的OPTION选项,详细的你可以使用psql --help来检察:


  • -h指定PostgreSQL数据库的IP地点。
  • -p指定PostgreSQL数据库的端口号。
  • -U指定登录到数据库的用户名,不指定默认就是root。
  • -w从不提示输入暗码,字面意思,不必要输入暗码来进行访问数据库,默认是不必要输入暗码的。
  • -W强制暗码输入。
按照这个用法,我们可以用以下两种方式连接数据库:
  1. # 这里由于我们在创建容器的时候指定的特权用户是aderversa,因此root被挤占掉了
  2. # 用户名对于我这里来说是必须设置的。
  3. psql -p 127.0.0.1 -p 5432 -U aderversa testdb
复制代码
大概省事一点,直接使用:
  1. psql testdb aderversa
复制代码
执行成功后我们就可以大概进入psql的命令行:
  1. psql (17.2 (Debian 17.2-1.pgdg120+1))
  2. Type "help" for help.
  3. testdb=#
复制代码
psql的使用

这里我们并不知道如何使用这个命令行,它提示我们可以使用help来得到帮助,那么就执行一波help,得到了以下信息:
  1. You are using psql, the command-line interface to PostgreSQL.
  2. Type:  \copyright for distribution terms
  3.        \h for help with SQL commands
  4.        \? for help with psql commands
  5.        \g or terminate with semicolon to execute query
  6.        \q to quit
复制代码
这里它告诉我们:


  • \copyright,可以PostgreSQL DDMS的一些条款,里面大概是说:不管你出于何种目的,该软件和其文档都是允许你使用、复制、修改和发布的,并且是不必要任何费用,不必要修改的同意…看起来是非常宽松的声明,究竟PostgreSQL遵照的是BSD协议。
  • \h显示SQL命令,比如CREATE TABLE ALTER TABLE…。
  • \?显示psql的命令,这里面还是非常多命令的,大多都是用来检察数据库的状态的,比如存在什么表、数据库、视图之类的。这里先容一些常用的、简朴的命令:

    • \l,列出所有数据库;
    • \c[onnect],连接到数据库某个数据库,假如先前有连接到某个数据库那么这个操纵就是更换连接的数据库;
    • \dt
      ,检察正在使用的数据库中存在哪些表(注意,默认创建的表好像是不会列出来的);

  • \g执行psql的上一个命令。
  • \q退出psql。
以上就是psql的基本用法了,你可以按照本身的在上面执行SQL语句,比如:
  1. create table user ( id int primary key );
复制代码
注意SQL命令以;末了就可以了。
创建完成后可以使用:
  1. \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企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

惊落一身雪

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表