写点什么

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

  • 2019-08-27
  • 本文字数:5726 字

    阅读完需:约 19 分钟

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

Docker 前几年席卷了整个互联网,Docker 在互联网很多业务场景都有使用。最近一两年,一些传统行业也在尝试使用,并且看到不少案例。另外,我们一直担心,容器影响数据库的性能,根据近些年的亲身实践,容器对数据库性能的影响很小,也不会影响数据库的并行性。因此,想写一系列文章,简单介绍 PostgreSQL 在容器中的实践。

Docker 基本概念

什么是 Docker

Docker 是一个软件平台,让您可以快速构建、测试和部署应用程序。Docker 将软件打包成名为容器的标准化单元,这些单元具有运行软件所需的所有功能,包括库、系统工具、代码和运行时。使用 Docker,您可以将应用程序快速部署和扩展到任何环境中,并且知道您的代码将运行。

Docker 镜像

Docker 镜像是定义容器的只读模板。该镜像包含将运行的代码,包括这些代码需要的任何库和依赖关系的所有定义。

Docker 容器

Docker 镜像一旦实例化,就变成了容器。容器是正在运行的。

Docker 和虚拟机的区别


两者的区别主要是下面两点:


  1. 多个 Docker 可以共享操作系统内核,而虚拟机不行。

  2. 虚拟机更加耗费资源

内核要求

Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看 CentOS 版本是否支持。


[root@tar1 ~]# uname -r3.10.0-957.el7.x86_64
[root@tar1 ~]# cat /etc/centos-releaseCentOS Linux release 7.6.1810 (Core)
复制代码

更新软件包

[root@tar1 ~]# yum -y updateDetermining fastest mirrors * base: mirrors.aliyun.com * extras: mirrors.aliyun.com * updates: mirrors.aliyun.combase                                                                                                  | 3.6 kB  00:00:00     ---> 软件包 kernel-devel.x86_64.0.3.10.0-957.27.2.el7 将被 安装---> 软件包 kernel-headers.x86_64.0.3.10.0-957.el7 将被 升级---> 软件包 kernel-headers.x86_64.0.3.10.0-957.27.2.el7 将被 更新---> 软件包 kernel-tools.x86_64.0.3.10.0-957.el7 将被 升级---> 软件包 kernel-tools.x86_64.0.3.10.0-957.27.2.el7 将被 更新---> 软件包 kernel-tools-libs.x86_64.0.3.10.0-957.el7 将被 升级---> 软件包 kernel-tools-libs.x86_64.0.3.10.0-957.27.2.el7 将被 更新---> 软件包 kexec-tools.x86_64.0.2.0.15-21.el7 将被 升级---> 软件包 kexec-tools.x86_64.0.2.0.15-21.el7_6.4 将被 更新---> 软件包 krb5-devel.x86_64.0.1.15.1-34.el7 将被 升级---> 软件包 krb5-devel.x86_64.0.1.15.1-37.el7_6 将被 更新---> 软件包 krb5-libs.x86_64.0.1.15.1-34.el7 将被 升级---> 软件包 krb5-libs.x86_64.0.1.15.1-37.el7_6 将被 更新---> 软件包 krb5-workstation.x86_64.0.1.15.1-34.el7 将被 升级---> 软件包 krb5-workstation.x86_64.0.1.15.1-37.el7_6 将被 更新---> 软件包 libatomic.x86_64.0.4.8.5-36.el7 将被 升级---> 软件包 libatomic.x86_64.0.4.8.5-36.el7_6.2 将被 更新    
复制代码

创建仓库

[root@tar1 ~]# cat /etc/yum.repos.d/docker.repo[dockerrepo]name=Docker Repositorybaseurl=https://yum.dockerproject.org/repo/main/centos/7enabled=1gpgcheck=1gpgkey=https://yum.dockerproject.org/gpg[root@tar1 ~]# 
复制代码

清理 yum 缓存

[root@tar1 ~]# yum clean all已加载插件:fastestmirror, langpacks正在清理软件源: base dockerrepo extras pgdg10 pgdg11 pgdg94 pgdg95 pgdg96 updatesCleaning up list of fastest mirrors[root@tar1 ~]# 
复制代码

缓存 yum 仓库

[root@tar1 ~]# yum makecache已加载插件:fastestmirror, langpacksDetermining fastest mirrors * base: mirrors.tuna.tsinghua.edu.cn * extras: mirrors.huaweicloud.com * updates: mirrors.huaweicloud.combase                                                                                                  | 3.6 kB  00:00:00     dockerrepo                  | 2.9 kB  00:00:00     extras                      | 3.4 kB  00:00:00     pgdg10                     | 3.6 kB  00:00:00     pgdg11                     | 3.6 kB  00:00:00  
复制代码

安装 Docker 包

[root@tar1 ~]# yum install -y docker-engine已加载插件:fastestmirror, langpacksLoading mirror speeds from cached hostfile * base: mirrors.tuna.tsinghua.edu.cn * extras: mirrors.huaweicloud.com * updates: mirrors.huaweicloud.com正在解决依赖关系--> 正在检查事务---> 软件包 docker-engine.x86_64.0.17.05.0.ce-1.el7.centos 将被 安装--> 正在处理依赖关系 docker-engine-selinux >= 17.05.0.ce-1.el7.centos,它被软件包 docker-engine-17.05.0.ce-1.el7.centos.x86_64 需要--> 正在检查事务---> 软件包 docker-engine-selinux.noarch.0.17.05.0.ce-1.el7.centos 将被 安装--> 解决依赖关系完成
依赖关系解决
==================================================================== Package 架构 版本 源 大小====================================================================正在安装: docker-engine x86_64 17.05.0.ce-1.el7.centos dockerrepo 19 M为依赖而安装: docker-engine-selinux noarch 17.05.0.ce-1.el7.centos dockerrepo 28 k
事务概要====================================================================安装 1 软件包 (+1 依赖软件包)
总下载量:20 M安装大小:70 MDownloading packages:警告:/var/cache/yum/x86_64/7/dockerrepo/packages/docker-engine-selinux-17.05.0.ce-1.el7.centos.noarch.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID 2c52609d: NOKEYdocker-engine-selinux-17.05.0.ce-1.el7.centos.noarch.rpm 的公钥尚未安装(1/2): docker-engine-selinux-17.05.0.ce-1.el7.centos.noarch.rpm | 28 kB 00:00:01 (2/2): docker-engine-17.05.0.ce-1.el7.centos.x86_64.rpm | 19 MB 00:00:09 --------------------------------------------------------------------总计 2.0 MB/s | 20 MB 00:00:10 从 https://yum.dockerproject.org/gpg 检索密钥导入 GPG key 0x2C52609D: 用户ID : "Docker Release Tool (releasedocker) <docker@docker.com>" 指纹 : 5811 8e89 f3a9 1289 7c07 0adb f762 2157 2c52 609d 来自 : https://yum.dockerproject.org/gpgRunning transaction checkRunning transaction testTransaction test succeededRunning transaction 正在安装 : docker-engine-selinux-17.05.0.ce-1.el7.centos.noarch 1/2 Re-declaration of type docker_tFailed to create nodeBad type declaration at /etc/selinux/targeted/tmp/modules/400/docker/cil:1/usr/sbin/semodule: Failed!restorecon: lstat(/var/lib/docker) failed: No such file or directorywarning: %post(docker-engine-selinux-17.05.0.ce-1.el7.centos.noarch) scriptlet failed, exit status 255Non-fatal POSTIN scriptlet failure in rpm package docker-engine-selinux-17.05.0.ce-1.el7.centos.noarch 正在安装 : docker-engine-17.05.0.ce-1.el7.centos.x86_64 2/2 验证中 : docker-engine-17.05.0.ce-1.el7.centos.x86_64 1/2 验证中 : docker-engine-selinux-17.05.0.ce-1.el7.centos.noarch 2/2
已安装: docker-engine.x86_64 0:17.05.0.ce-1.el7.centos
作为依赖被安装: docker-engine-selinux.noarch 0:17.05.0.ce-1.el7.centos
复制代码

启动 Docker 服务

启动 Docker 服务


[root@tar1 ~]# systemctl start docker.service
复制代码


验证 Docker 是否已经启动


[root@tar1 ~]# systemctl status docker.service● docker.service - Docker Application Container Engine   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)   Active: active (running) since 三 2019-08-21 11:31:44 CST; 1min 5s ago     Docs: https://docs.docker.com Main PID: 21109 (dockerd)    Tasks: 17   Memory: 58.9M   CGroup: /system.slice/docker.service           ├─21109 /usr/bin/dockerd           └─21116 docker-containerd -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --metrics-interval=0 -...
8月 21 11:31:43 tar1 dockerd[21109]: time="2019-08-21T11:31:43.985321498+08:00" level=info msg="Loading containers: start."8月 21 11:31:44 tar1 dockerd[21109]: time="2019-08-21T11:31:44.299547028+08:00" level=info msg="Default bridge (doc...dress"8月 21 11:31:44 tar1 dockerd[21109]: time="2019-08-21T11:31:44.536150388+08:00" level=info msg="Loading containers: done."8月 21 11:31:44 tar1 dockerd[21109]: time="2019-08-21T11:31:44.611884624+08:00" level=info msg="Daemon has complete...ation"8月 21 11:31:44 tar1 dockerd[21109]: time="2019-08-21T11:31:44.611917359+08:00" level=info msg="Docker daemon" comm...5.0-ce8月 21 11:31:44 tar1 dockerd[21109]: time="2019-08-21T11:31:44.626618666+08:00" level=info msg="API listen on /var/....sock"8月 21 11:31:44 tar1 systemd[1]: Started Docker Application Container Engine.8月 21 11:32:34 tar1 dockerd[21109]: time="2019-08-21T11:32:34.826419224+08:00" level=warning msg="Error getting v2...ders)"8月 21 11:32:34 tar1 dockerd[21109]: time="2019-08-21T11:32:34.827115930+08:00" level=info msg="Attempting next end...ders)"8月 21 11:32:34 tar1 dockerd[21109]: time="2019-08-21T11:32:34.827176510+08:00" level=error msg="Handler for POST /...ders)"Hint: Some lines were ellipsized, use -l to show in full.
复制代码


看到“running”字样,表示启动成功。

验证 docker 是否成功安装

[root@tar1 yum.repos.d]# docker run hello-worldWARNING: IPv4 forwarding is disabled. Networking will not work.
Hello from Docker!This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal.
To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/
For more examples and ideas, visit: https://docs.docker.com/get-started/
复制代码

查看 docker 其他基本信息

查看版本信息


[root@tar1 ~]# docker versionClient: Version:      17.05.0-ce API version:  1.29 Go version:   go1.7.5 Git commit:   89658be Built:        Thu May  4 22:06:25 2017 OS/Arch:      linux/amd64
Server: Version: 17.05.0-ce API version: 1.29 (minimum version 1.12) Go version: go1.7.5 Git commit: 89658be Built: Thu May 4 22:06:25 2017 OS/Arch: linux/amd64 Experimental: false
复制代码


查看其他信息


[root@tar1 ~]# docker infoContainers: 0 Running: 0 Paused: 0 Stopped: 0Images: 0Server Version: 17.05.0-ceStorage Driver: overlay Backing Filesystem: xfs Supports d_type: trueLogging Driver: json-fileCgroup Driver: cgroupfsPlugins:  Volume: local Network: bridge host macvlan null overlaySwarm: inactiveRuntimes: runcDefault Runtime: runcInit Binary: docker-initcontainerd version: 9048e5e50717ea4497b757314bad98ea3763c145runc version: 9c2d8d184e5da67c95d601382adf14862e4f2228init version: 949e6faSecurity Options: seccomp  Profile: defaultKernel Version: 3.10.0-957.el7.x86_64Operating System: CentOS Linux 7 (Core)OSType: linuxArchitecture: x86_64CPUs: 1Total Memory: 991.2MiBName: tar1ID: BBHS:KT7X:XGDO:ZRYJ:O6CH:GVW5:DLQR:TLRJ:JOCV:2XXH:Y5K7:MTBODocker Root Dir: /var/lib/dockerDebug Mode (client): falseDebug Mode (server): falseRegistry: https://index.docker.io/v1/Experimental: falseInsecure Registries: 127.0.0.0/8Live Restore Enabled: false
复制代码

Docker 的启动和关闭

docker stop pg11docker start pg11
复制代码


pg11 是 docker 的名字。

总结

一开始可能很难理解容器化相关概念,您只需尝试安装使用,概念便逐渐清楚了。


作者介绍:


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


2019-08-27 09:467159

评论

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

RocketMQ Compaction Topic的设计与实现

Apache RocketMQ

RocketMQ 消息队列

从react源码看hooks的原理

flyzz177

React

前端面试指南之JS面试题总结

loveX001

JavaScript

寻找中国云原生实践先锋的前1%!CNBPA 2022云原生最佳实践评选结果揭晓

云原生技术社区

云原生

2023年保障企业数据安全几大措施看这里!

行云管家

数据安全 堡垒机 企业数据

能将三次握手讲到这个程度,不给你offer给谁

华为云开发者联盟

面试 后端 开发 华为云 企业号 1 月 PK 榜

react的useState源码分析

flyzz177

React

转转测试环境治理高效能实践

转转技术团队

架构 测试 后端 灰度发布 全链路灰度

英特尔携手钉钉推动智能协作创新,引领数字时代新未来

科技之家

一文读懂机器学习常用算法的基本概念和适用场景

九章云极DataCanvas

机器学习 机器学习算法

Getaverse 2022/12 月报 | 测试网成功上线

Geek_Web3

#区块链# 元宇宙 web3 元宇宙系统开发

为什么说IO密集型业务,线程数是CPU数的2倍?

小小怪下士

Java 线程 io

这样回答前端面试题才能拿到offer

loveX001

JavaScript

RocketMQ 5.0 多语言客户端的设计与实现

Apache RocketMQ

RocketMQ 消息

react源码分析:组件的创建和更新

flyzz177

React

和HHOGene主创谈GPods设计理念:用耳机“播放”光

B Impact

2023年成都等级测评机构名单新排名看这里!

行云管家

成都 等保测评 等保测评机构

工赋开发者社区 | 《工业元宇宙五大应用场景——案例集汇编》发布

工赋开发者社区

机器学习10大经典算法详解

九章云极DataCanvas

机器学习

机器学习的4种经典模型总结

九章云极DataCanvas

机器学习 机器学习模型

寻找中国应用现代化先锋的前1%!CNBPA 2022应用现代化系列评选结果揭晓

云原生技术社区

云原生 应用现代化

开源工作流引擎如何支撑企业级 Serverless 架构?

阿里巴巴云原生

阿里云 Serverless 云原生 KubeVela

前端工程师leetcode算法面试必备-简单的二叉树

js2030code

JavaScript LeetCode

大厂前端面试考什么?

loveX001

JavaScript

小游戏开发引擎选型建议指南

Onegun

小程序游戏 小游戏引擎

IOS技术分享| IOS快对讲调度场景实现

anyRTC开发者

音视频 呼叫邀请 快对讲 语音对讲 视频对讲

从“少林寺”毕业后,我当上了开源社区“区长”

Alluxio

采访 开源社区 分布式, Alluxio 大数据 开源

JavaScript刷LeetCode心得

js2030code

JavaScript LeetCode

用javascript分类刷leetcode22.字典树(图文视频讲解)

js2030code

JavaScript LeetCode

百万并发场景中倒排索引与位图计算的实践

京东科技开发者

倒排索引 索引 位图 系统 企业号 1 月 PK 榜

AI科普 | 语音识别准不准?——ASR 效果评测原理与实践

牵着蜗牛去散步

腾讯云 腾讯 最佳实践 语音识别 人工智能’

Docker 与 PostgreSQL 11.5系列文章(一):Docker 的安装_数据库_赵振平_InfoQ精选文章