ArchSummit深圳站7折本周截止,点击立减2640元>> 了解详情
写点什么

Docker 与 PostgreSQL 11.5 系列文章(二):PostgreSQL 11.5 安装

  • 2019 年 8 月 29 日
  • 本文字数:5141 字

    阅读完需:约 17 分钟

Docker 与 PostgreSQL 11.5系列文章(二):PostgreSQL 11.5安装

上篇介绍容器相关的基本概念,介绍如何安装 docker。如果不熟悉 docker 的安装,可回到系列文章的第一部分《Docker与PostgreSQL 11.5系列文章(一)Docker的安装》,第二部分主要介绍 PostgreSQL11 在容器中的安装和使用。


下载镜像

这里下载的 postgreSQL 11.5 版本的镜像


[root@tar1 yum.repos.d]# docker pull postgres:11.511.5: Pulling from library/postgres9fc222b64b0a: Pull complete 38296355136d: Pull complete 2809e135bbdb: Pull complete 77907400401d: Pull complete 1f8ceea7d21e: Pull complete 1ede1f2cb1b8: Pull complete dcfbc2751885: Pull complete 8379f81b7622: Pull complete 08034f3aaedc: Pull complete cb6db97b313d: Pull complete 7a41d1ed6f3b: Pull complete 15f5a1254505: Pull complete 5a9451e12286: Pull complete 55bb5e2d55ba: Pull complete Digest: sha256:f766d03bb49c7dd16fe32c1eb2645d13cb315adc029557cd1e4a0a9c094933d5Status: Downloaded newer image for postgres:11.5
复制代码


下载要花费一定的时间。


查看镜像

[root@tar1 yum.repos.d]# docker images |grep postpostgres            11.5                c3fe76fef0a6        9 days ago          312MB[root@tar1 yum.repos.d]#
复制代码


下载成功以后,可以查看镜像的信息(包括大小)。


创建和运行容器

[root@tar1 yum.repos.d]# docker run --name dockerPG11 -e POSTGRES_PASSWORD=Xzzp2008 -p 54322:5432 -d postgres:11.5ccb3d0bb1a303e081fac20622c0b821b71720308280a8d1a55b906e792fe6452
复制代码


  1. run 创建并运行一个容器(实例);

  2. –name 指定创建的容器的名字;

  3. -e POSTGRES_PASSWORD= Xzzp2008 设置环境变量,指定数据库的登录口令为 Xzzp2008;

  4. -p 54322:5432 端口映射将容器的 5432 端口映射到外部机器的 54322 端口,从外部访问就使用这个端口;

  5. -d postgres:11.5 镜像的名字是 postgres:11.5,镜像的名字是查询出来的,不是由用户随意定的。


查看实例

[root@tar1 yum.repos.d]# docker psCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                NAMESccb3d0bb1a30        postgres:11.5       "docker-entrypoint..."   37 seconds ago      Up 36 seconds       5432/tcp, 0.0.0.0:54322->54333/tcp   dockerPG11
复制代码


可以看到实例运行的时间,ID 号等信息。


多了参数-a ,是不一样的输出


[root@tar1 yum.repos.d]# docker ps -aCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                         PORTS                                NAMESccb3d0bb1a30        postgres:11.5       "docker-entrypoint..."   14 minutes ago      Up 14 minutes                  5432/tcp, 0.0.0.0:54322->54333/tcp   dockerPG113b8d602037b4        hello-world         "/hello"                 About an hour ago   Exited (0) About an hour ago                                        jolly_wrightc5cdfc83f7bd        hello-world         "/hello"                 About an hour ago   Exited (0) About an hour ago                                        elegant_edison
复制代码


查看日志

[root@tar1yum.repos.d]# docker logs ccb3d0bb1a303e081fac20622c0b821b71720308280a8d1a55b906e792fe6452The files belonging to this database system will be owned by user "postgres".This user must also own the server process.
The database cluster will be initialized with locale "en_US.utf8".The default database encoding has accordingly been set to "UTF8".The default text search configuration will be set to "english".
Data page checksums are disabled.
fixing permissions on existing directory /var/lib/postgresql/data ... okcreating subdirectories ... okselecting default max_connections ... 100selecting default shared_buffers ... 128MBselecting default timezone ... Etc/UTCselecting dynamic shared memory implementation ... posixcreating configuration files ... okrunning bootstrap script ... okperforming post-bootstrap initialization ... oksyncing data to disk ... ok
Success. You can now start the database server using:
pg_ctl -D /var/lib/postgresql/data -l logfile start

WARNING: enabling "trust" authentication for local connectionsYou can change this by editing pg_hba.conf or using the option -A, or--auth-local and --auth-host, the next time you run initdb.waiting for server to start....2019-08-23 09:48:02.765 UTC [39] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"2019-08-23 09:48:02.791 UTC [40] LOG: database system was shut down at 2019-08-23 09:48:01 UTC2019-08-23 09:48:02.797 UTC [39] LOG: database system is ready to accept connections doneserver started
/usr/local/bin/docker-entrypoint.sh: ignoring /docker-entrypoint-initdb.d/*
waiting for server to shut down....2019-08-23 09:48:02.846 UTC [39] LOG: received fast shutdown request2019-08-23 09:48:02.849 UTC [39] LOG: aborting any active transactions2019-08-23 09:48:02.852 UTC [39] LOG: background worker "logical replication launcher" (PID 46) exited with exit code 12019-08-23 09:48:02.852 UTC [41] LOG: shutting down2019-08-23 09:48:02.881 UTC [39] LOG: database system is shut down doneserver stopped
PostgreSQL init process complete; ready for start up.
2019-08-23 09:48:02.967 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 54322019-08-23 09:48:02.967 UTC [1] LOG: listening on IPv6 address "::", port 54322019-08-23 09:48:02.973 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"2019-08-23 09:48:02.989 UTC [48] LOG: database system was shut down at 2019-08-23 09:48:02 UTC2019-08-23 09:48:02.996 UTC [1] LOG: database system is ready to accept connections
复制代码


进入容器里面(进入容器内部)

运行中的容器其实是一个功能完备的 Linux 操作系统,所以我们可以像常规的系统一样登录并访问容器。


[root@tar1 yum.repos.d]# docker exec -it dockerPG11 bashroot@ccb3d0bb1a30:/#
复制代码


dockerPG11 是容器的名字。


ccb3d0bb1a30 是容器的 ID 号。


查看 PG 进程(在容器里)

root@ccb3d0bb1a30:/# ps -ef |grep postpostgres     1     0  0 09:47 ?        00:00:00 postgrespostgres    49     1  0 09:48 ?        00:00:00 postgres: checkpointer  postgres    50     1  0 09:48 ?        00:00:00 postgres: background writer  postgres    51     1  0 09:48 ?        00:00:00 postgres: walwriter  postgres    52     1  0 09:48 ?        00:00:00 postgres: autovacuum launcher  postgres    53     1  0 09:48 ?        00:00:00 postgres: stats collector  postgres    54     1  0 09:48 ?        00:00:00 postgres: logical replication launcher  root        69    55  0 10:10 ?        00:00:00 grep post
复制代码


注意:看到 ID 号 ccb3d0bb1a30,你就知道,当前在容器内部。


切换到 OS 用户 postgres(在容器里)

root@ccb3d0bb1a30:/# su - postgrespostgres@ccb3d0bb1a30:~$ postgres@ccb3d0bb1a30:~$
复制代码


登录数据库(在容器里)

postgres@ccb3d0bb1a30:~$ psql -d postgrespsql (11.5 (Debian 11.5-1.pgdg90+1))Type "help" for help.
postgres=#
复制代码


查看映射到 docker 外的端口

[root@tar1 ~]# netstat -ntlActive Internet connections (only servers)Proto Recv-Q Send-Q Local Address           Foreign Address         State      tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN     tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN     tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN     tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN     tcp6       0      0 ::1:25                  :::*                    LISTEN     tcp6       0      0 :::111                  :::*                    LISTEN     tcp6       0      0 :::54322                :::*                    LISTEN     tcp6       0      0 :::22                   :::*                    LISTEN     tcp6       0      0 ::1:631
复制代码


54321 就是访问容器内 postgres 数据库的端口号。


登录数据库(从容器外部)

从宿主机登录容器数据库


-bash-4.2$ psql -U postgres -h localhost -p 54322用户 postgres 的口令:psql (11.5)输入 "help" 来获取帮助信息.
postgres=#
复制代码


查看版本号


postgres=# select version();                                                             version                                                              ---------------------------------------------------------------------------------- PostgreSQL 11.5 (Debian 11.5-1.pgdg90+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516, 64-bit(1 行记录)
postgres=#
复制代码


54322 是映射以后的密码,


DML 测试

创建表,插入数据,查询数据等一系列实验:


postgres=# CREATE TABLE weather (postgres(# city varchar(80),postgres(# temp_lo int, -- low temperaturepostgres(# temp_hi int, -- high temperaturepostgres(# prcp real, -- precipitationpostgres(# date datepostgres(# );CREATE TABLEpostgres=# INSERT INTO weather VALUES ('San Francisco',46,50,0.25, '1994-11-27');INSERT 0 1postgres=# INSERT INTO weather (city, temp_lo, temp_hi, prcp, date) VALUES ('San Francisco', 43, 57, 0.0, '1994-11-29');INSERT 0 1postgres=# INSERT INTO weather (date, city, temp_hi, temp_lo) VALUES ('1994-11-29', 'Hayward', 54, 37);INSERT 0 1postgres=# SELECT * FROM weather;     city      | temp_lo | temp_hi | prcp |    date    ---------------+---------+---------+------+------------ San Francisco |      46 |      50 | 0.25 | 1994-11-27 San Francisco |      43 |      57 |    0 | 1994-11-29 Hayward       |      37 |      54 |      | 1994-11-29(3 行记录)
postgres=#
postgres=# \dt 关联列表 架构模式 | 名称 | 类型 | 拥有者 ----------+---------+--------+---------- public | weather | 数据表 | postgres(1 行记录)
复制代码


停止实例(容器)

docker stop ccb3d0bb1a30ccb3d0bb1a30是实例(容器)的ID或者(dockerPG11是容器的名字)docker stop dockerPG11

复制代码


其实也是停止 PG11.5。


删除容器

[root@tar1 ~]# docker rm dockerPG11dockerPG11
复制代码


dockerPG11 是容器的名字


删除容器以后,可以把容器所引用的卷给删除


[root@tar1 ~]# ll /var/lib/docker/volumes/总用量 32drwxr-xr-x. 3 root root    19 8月  23 23:46 cf103a7ead15ff3e25f42e83703f06544cfbf018fe469d577002dff9f692bb6f-rw-------. 1 root root 65536 8月  25 12:13 metadata.db[root@tar1 ~]# docker volume rm cf103a7ead15ff3e25f42e83703f06544cfbf018fe469d577002dff9f692bb6fcf103a7ead15ff3e25f42e83703f06544cfbf018fe469d577002dff9f692bb6f[root@tar1 ~]#  ll /var/lib/docker/volumes/总用量 32-rw-------. 1 root root 65536 8月  25 12:32 metadata.db[root@tar1 ~]#
复制代码


总结

在这篇文章的学习中,需注意端口是如何映射的,还要特别注意在容器里面和容器外面看到的情况。同时注意: 如何从容器外登录数据库?如何从容器里登录数据库?停止 docker 服务和停止 docker 的区别。


作者介绍:


赵振平,PostgreSQL 中文社区主席、计算机畅销书作家、贵州省省管专家、太阳塔科技 CTO、国家首批大数据高级职称、腾讯最具价值专家(TVP)、电子工业出版社签约作家、出版了技术专著《Oracle 数据库精讲与疑难解析》、出版了技术专著《成功之路:Oracle 11g 学习笔记》、出版了技术专著《IT 架构实录》。


2019 年 8 月 29 日 14:1511132

评论

发布
暂无评论
发现更多内容

架构师训练营第 2 周 _ 学习总结

方舟勇士

课程总结

面向对象编程

wei

架构师训练营第二周总结

养乐多

架构师训练营第二周总结

平淡人生

总结 极客大学架构师训练营 作业

第2周 课后总结

Coder

《架构训练营》week2 作业

任鑫

架构

【第二周】架构师训练营总结

星星

面向对象与面向对象的设计原则SOLID

imicode

设计

Week2-总结

龙7

第二周作业课后作业

iHai

极客大学架构师训练营

架构师训练营第二次作业

+╮(╯▽╰)╭/>……

第二周 学习总结

Safufu

架构师训练营 -week2- 作业

Geek_5a6ca3

总结

chenzt

架构师训练营第二周总结

allen

架构师课程第二周总结

PQY

系统架构师第二周命题作业

吴建中

极客大学架构师训练营

Week2 命题作业 — 架构师训练营

小叶

极客大学架构师训练营

架构课第二周作业

嘻哈

架构师训练营第二周学习心得

潜默闻雨

Week2 课后作业

Geek_165f3d

依赖倒置

练习 2-1

闷骚程序员

《架构师》第二周总结

架构师训练营 -第二周作业

Benjamin

极客大学架构师训练营

框架设计示例

imicode

设计

软件设计原则

Kun

极客大学架构师训练营

架构师训练营 Week2 - 软件设计原则

伊利是个圈

极客大学架构师训练营

依赖倒置原则与Cache类设计

走过路过飞过

学习总结 - W2

Kun

极客大学架构师训练营

架构师训练营作业 第二周

iLeGeND

架构师训练营 week2-学习总结

devfan

头号云话题:进击的开源操作系统

头号云话题:进击的开源操作系统

Docker 与 PostgreSQL 11.5系列文章(二):PostgreSQL 11.5安装_语言 & 开发_赵振平_InfoQ精选文章