docker搭建web服务器与数据库服务器通信

1--说明:

在使用docker搭建web服务时我们会将web服务于数据库服务分别放在不同的镜像中,以此将数据库与web服务解耦合。在本文中我为大家介绍docker中利用 --link通信方式使得web服务器与数据库服务器之间建立连接。在我的实验环境中数据库服务器上安装了mysql和redis两种数据库。在服务器中用的Apache和PHP的开发环境并用nginx负责负载均衡。


2--数据库服务器的搭建:

建议使用编译的方式安装mysql和redis。

其中mysql的安装教程可以参考下面这篇文章:

centos编译安装mysql

需要注意文章底部关于初始化mysql账号这部分否则web服务器连接数据库时会带来问题。

redis的编译安装参考下面这篇文章:

编译安装redis

我的安装环境是centos 6.7,在我的安装环境中上面两篇文章可以完美安装。


内核版本

到这里为止我们已经解决了数据库服务器的docker 镜像制作。

注意事项:

在编译安装mysql时需要将mysql解压后的my*cnf文件拷贝到/etc/目录下

通过find / -name my*cnf就行查找我们可以看到下图


find / -name my*cnf查找结果

随便选一个my*.cnf文件我选的时 my-large.cnf执行

cp /usr/local/src/mysql-5.5.10/support-files/my-large.cnf /etc/my.cnf    即可

这时候我们去修改/etc/my.cnf 在[mysqld]添加下面一句

skip-name-resolve

添加这句的原因是避免web服务器端的mysql客户端在连接数据库的时候无法解析hostname错误。

到现在为止我们已经建立好了mysql和redis的基础镜像。

然后我们将这个镜像进行保存:

sudo docker ps查找镜像然后sudo docker commit保存镜像。这部分操作请读者自行Google解决。

回到宿主机上后我们需要利用Dockerfile来建立我们最终的数据库镜像。之所以开始不用Dockerfile一步建立镜像主要是我们采用编译安装mysql和redis可能会出错。

先mkdir一个目录出来接着进入目录执行 vi Dockerfile在文件中写下一下内容:


Dockerfile内容


这里主要的是最后两句,添加这两句的原因是开放我们的mysql和redis服务端口使得其他主机能够连接我们的数据库服务。

接着sudo docker build文件建立镜像。

到此为止我们数据库镜像已经制作完成。


3--web服务器镜像

在搭建web服务器时先安装httpd通过

yum install -y httpd即可

然后我们还需要安装mysql客户端通过

yum install -y mysql安装mysql客户端我们还需要安装mysql-devel因为在后面我们需要安装php的mysql扩展缺少这个库会导致编译不通过。

安装完mysql客户端后还需要安装redis这里安装redis是因为我们在访问数据库服务器redis时需要本地的redis-cli客户端,redis的安装教程上面贴了连接。

安装nginx以及nginx做代理服务器可以参考我另外两篇文章

编译安装nginx

nginx负载均衡

最后我们要进行php的安装。下面链接可以完美的进行php的编译安装

编译安装php

编译安装php我能告诉你的就是耐心了。

接下来我们需要安装php的mysql扩展和redis扩展再贴两篇文章:

安装php的mysql扩展

需要注意的是在安装扩展时有时会提示我们安装autoconf这时我们直接执行

yum install -y autoconf 

这个问题Google的答案是缺少一个依赖库的问题但是你要是yum那个依赖库则会自动给你安装php然后悲剧的事情发生了yum安装下的php会替代掉你本来安装的php。而yum安装下来的一般是5.3的版本。

接着我们安装redis扩展:

安装PHP的redis扩展

到此我们web服务器镜像制作完成,docker commit这个容器即可


4--通过--link使得两个容器间能够通信

先启动数据库镜像

sudo docker run -i -t --name db -P databasemirrorid

sudo docker run -i -t --name web --link db:webdb -P webmirrorid

这时候我们就能够在web服务器容器中操作mysql和redis了

通过redis-cli -h db直接连接数据库服务器中的redis服务

通过mysql -h db -uroot -ppassword直接访问数据库服务器中的mysql服务。


5--我在安装时需要的坑

(1)开始时我未用dockerfile来制作数据库镜像,直接选择在运行服务器镜像的时候通过指定docker run --expose参数来开放端口,但是找了半天docker --expose貌似不能开放两个及以上单独的端口可以开放某一段端口例如 --expose n-m开放n到m这一段的端口,我要开放3306和6379端口的话就要--expose 3306-6379一旦加入这个参数基本就宣告主机将会卡死,通过sudo ps -aux|grep docker可以看到后台启动了大量的docker进程,具体可能跟docker的端口绑定有关。

(2)在搭建web服务器是PHP需要与mysql客户端连接,这时需要要安装mysql的扩展,由于我们时yum安装的mysql客户端缺少mysql-devel依赖库,导致编译时一直报错,然而报错也未能提示错误是由于缺少这个库,网上找不到靠谱的答案。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,425评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,058评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,186评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,848评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,249评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,554评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,830评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,536评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,239评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,505评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,004评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,346评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,999评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,060评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,821评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,574评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,480评论 2 267

推荐阅读更多精彩内容

  • Docker — 云时代的程序分发方式 要说最近一年云计算业界有什么大事件?Google Compute Engi...
    ahohoho阅读 15,418评论 15 147
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,099评论 18 139
  • Composer Repositories Composer源 Firegento - Magento模块Comp...
    零一间阅读 3,940评论 1 66
  • 还记得这个光着脚,笨拙得拿着笔的圣马太吗?天使握着他长满茧的右手,上帝的圣谕就在这个手工劳动者的笔端流淌出来了。当...
    c5de959d631b阅读 519评论 0 4
  • 2017.9.21 星期四 晴 今天,很多家长早早来到教室,听同学们的早读。我因有事,时间来不及,只在李老师...
    暖与希望阅读 254评论 0 2