资讯专栏INFORMATION COLUMN

使用docker部署PostgreSQL数据库

Loong_T / 1802人阅读

摘要:解决了服务器应用快速部署的问题。解决方案是自己装一个第二点,确保镜像服务器跑起来。你需要将真机的端口和虚拟机端口进行绑定,这样可以通过访问镜像服务器在真机上的端口,访问到数据库端口,进入镜像之中。

关于Docker的基本原理

原理上, 深入浅出Docker 一文讲的语言会更科学,我只捡不一定准确但直观而符合表面理解的一些讲一下。

Docker提供了基于操作系统级和应用级虚拟化的应用部署解决方案。它的出现让在服务器上部署应用免去了操作系统,支持系统等一系列的搭建,而把它们简化为镜像,容器,实现快速部署。

Docker将应用所需要的底层系统支持,操作系统支持,数据库支持,应用本身和应用的数据分离开来,可以从任意层级上在一个拥有docker技术的电脑上对应用进行部署。每一层被抽象成了镜像(image),而镜像跑在服务器上便成了容器(container),相当于虚拟机。跑起一个应用级别的容器,会自动获取它所需要的向下级别的镜像。这些都可以通过云端大量现成的资源和几行脚本命令实现。

Docker解决了服务器应用快速部署的问题。仅需要一个dockerfile或是一两行命令,便可以将一个应用部署到服务器上并立刻投入使用。存在的问题也有一些,比如数据层迁移的命令蹩脚,容器启动后不能重新端口绑定,目前只能跑在linux上等。还有许多有待我这个刚入手没多久的小白还要探索的问题。

安装docker

在正题之前,你需要:

安装docker

确定docker镜像服务器已经跑在你的服务器上

两点其实是一点,但是两者各有侧重。笔者在mac上安装docker时,下载了官网提供的docker toolbox。安装了docker服务器本身,快速启动命令以及Virtualbox来管理虚拟机。在安装Virtualbox的时候安装程序挂了。至今不知为何。解决方案是自己装一个

brew install Caskroom/cask/virtualbox

第二点,确保docker镜像服务器跑起来。在mac下需要运行quickstart,你会注意到它其实就是启动一个脚本,让linux虚拟机的服务器可以通过虚拟网络被mac访问到。如果直接打开命令行,会提示

Cannot connect to the Docker daemon. Is the docker daemon running on this host?

在linux上,docker指令必须sudo。否则也会提示找不到。

在mac上或者windows上尤其注意一点。docker服务器跑在linux虚拟机上。所以后续牵扯到目录挂载的时候最好可以直接进入虚拟机写指令。

如何快速部署数据库

在docker上快速部署Postgresql数据库,其实可以直接参考https://hub.docker.com/_/postgres/,这里提供了docker-postgres的官方解决方案。
其实核心只有一句话。

docker run --name yourappname -e POSTGRES_PASSWORD=mysecretpassword -e POSTGRES_USER=xxx -d -p xxxx:5432 postgres

其中的-p 的意思是端口绑定。这是docker里很重要的概念。docker可以理解为虚拟机。你需要将真机的端口和虚拟机端口进行绑定,这样可以通过访问docker镜像服务器在真机上的端口,访问到psql数据库端口5432,进入docker镜像之中。如果不指定-p,外界是无法访问docker内部,无法对数据库增删改查。

这时服务器会新建一个卷目录用来存放真正的数据库内容。换句话说,这个卷是只读的,通过容器备份提交什么的根本无法保留数据库数据,甚至是表的结构。这个时候就需要介绍一个docker的新概念:数据卷。类似于linux挂载的概念。

具体可以参考https://github.com/widuu/chinese_docker/blob/master/userguide/dockervolumes.md

这里只说怎么快速部署。

第一步:在任意机子上建立一个镜像,指定数据卷位置,并将其挂载到虚拟机上

docker run --name yourappname -e POSTGRES_PASSWORD=xxx -e POSTGRES_USER=xxx
    -v ./data:/var/lib/postgresql/data/pgdata -d -p xxxx:5432 postgres

多的这一句

-v ./data:/var/lib/postgresql/data/pgdata

意思是:讲本机当前目录下新建一个data目录,与虚拟机里的数据库目录对应起来。注意这里必须是linux下的目录。如果在mac或者windows上操作务必注意。如果你把mac/windows目录映射到了“虚拟机的虚拟机”里,会因为访问权限不足而让docker崩掉。

第二步:按照你指定的端口访问数据库,做数据初始化。包括建表和插入初始数据。

第三步:备份数据卷。也就是上面的./data目录。

第四步,将这个数据卷放到你的服务器上

第五步和第一步一样。但是此时,你的数据卷里面已经有之前保存的内容了。

让我来通俗地阐释一下这个过程。其实相当于你在家里电脑插个空U盘,放点歌在里面,然后带到单位去就可以听了。家里的电脑和单位的电脑都是WindowsXP的系统,都装了什么音乐播放器,但是歌曲一定是放在优盘里,因为电脑是只读的。

类似。docker也经常被设计成只读的,作为应用程序的初始状态。其实这么复制挺麻烦的,还需要新建一个数据卷。向上面那个例子里,“家里的电脑”其实没用。教程里甚至提供了即时创建并删除容器的命令只为保存一个数据卷和容器名称的对应关系,日后挂载方便。

docker的最佳实践

dockerfile最佳实践

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/26545.html

相关文章

  • docker-gitlab部署

    摘要:安装这里以发行版为例,在中输入一下命令安装最新的注意如果你使用了阿里云最新推出的镜像,那么可以省略本节的步骤。因为阿里云的这个镜像已经自带了版的,版本比较新,可以直接使用。 docker用来隔离应用还是很方便的,一来本身的操作较为简单,二来资源占用也比虚拟机要小得多,三来也较为安全,因为像数据库这样的应用不会再全局暴露端口,同时应用间的通信通过加密和端口转发,更加安全。 Gitlab...

    imtianx 评论0 收藏0
  • 使用docker部署PostgreSQL据库

    摘要:解决了服务器应用快速部署的问题。解决方案是自己装一个第二点,确保镜像服务器跑起来。你需要将真机的端口和虚拟机端口进行绑定,这样可以通过访问镜像服务器在真机上的端口,访问到数据库端口,进入镜像之中。 关于Docker的基本原理 原理上, 深入浅出Docker 一文讲的语言会更科学,我只捡不一定准确但直观而符合表面理解的一些讲一下。 Docker提供了基于操作系统级和应用级虚拟化的应用部署...

    singerye 评论0 收藏0
  • API 网关Kong-docker&安装

    摘要:搭建的安装部署方式有很多中,官方提供了如下几种的安装方式。还有一些社区提供的安装方式注每种方式的具体如何安装部署,请移驾到官网安装部署下面我们来详细介绍下使用来部署过程需要创建一个自定义网络,以允许容器相互发现和通信。 1、Kong搭建 kong 的安装部署方式有很多中,官方提供了如下几种的安装方式。showImg(https://segmentfault.com/img/bVbvv3...

    shiyang6017 评论0 收藏0
  • 基于 Docker 的 Kong 的环境搭建

    摘要:基于的的环境搭建本次操作都是基于进行操作的,使用的的版本是,使用的版本是。初始化数据库使用官方镜像提供的功能初始化数据库。安装安装完成后在宿主机请求,能正常响应则表示部署成功了。配置连接新增一个连接至刚刚新建的,填,选择。 基于 Docker 的 Kong 的环境搭建 本次操作都是基于 Docker 进行操作的,使用的 Kong 的版本是 1.2.0 ,使用的 PostgreSQL 版...

    GT 评论0 收藏0
  • 关于Docker Swarm,你可能需要了解更多实践经验

    摘要:虽然可以使用相同的方式部署应用到云端,使用外部负载均衡器,但动态添加或者减少负载均衡节点依旧是痛点。这对使用外部负载均衡器帮助巨大。 数人云今天带来的本篇文章将分享Docker在应用程序生命周期每个阶段中所扮演的角色,以及迁移到Swarm集群时需要考虑的问题。 利用Docker来开发 Docker让工作更轻松。如需要一个部署安装MySQL数据库,或者安装Ghost,又或者Redis数据...

    bitkylin 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<