美文网首页建站相关建站相关Tech
docker搭建web服务器与数据库服务器通信

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

作者: SookieYang | 来源:发表于2016-02-26 15:24 被阅读1574次

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依赖库,导致编译时一直报错,然而报错也未能提示错误是由于缺少这个库,网上找不到靠谱的答案。

相关文章

  • 「 图解HTTP 」 读书笔记 第五章

    与 HTTP 协作的 Web 服务器 一台 Web 服务器可搭建多个独立域名的 Web 网站,也可作为通信路径上的...

  • 图解HTTP--笔记3

    与 HTTP 协作的 Web 服务器 一台 Web 服务器可搭建多个独立域名的 Web 网站,也可作为通信路径上的...

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

    1--说明: 在使用docker搭建web服务时我们会将web服务于数据库服务分别放在不同的镜像中,以此将数据库与...

  • web服务器

    作者:李成文;标签: web服务器 一台Web服务器可搭建多个独立域名的Web网站,也可以作为通信路径上中转服务器...

  • 基于Docker和Golang搭建阿里云Web服务器

    基于Docker和Golang搭建Web服务器 1 场景描述 基于centos7的docker镜像搭建golang...

  • php中的数据库

    Xampp分为数据库服务器与web服务。web服务分为静态web服务器与动态web服务器访问用:localhost...

  • HTML5服务器通信

    一,web服务器通信历史及通信流程 web服务器通信历史,之前的web通信就是浏览器请求网页,然后服务器返回响应...

  • CentOS 7 服务器搭建

    - 服务器搭建 -- 简介 操作系统:CentOS 7 web服务器:Nginx 数据库管理系统:MySQL 编程...

  • 图解HTTP之与HTTP协作的Web服务器

    一台Web服务器可搭建多个独立域名的Web网站,也可作为通信路径上的中转服务器提升传输效率。 1.HTTP1.1规...

  • Docker安装mssql数据库

    Centos7环境使用docker搭建sql-server数据库! Docker 安装 修改服务器时间:(已经修改...

网友评论

  • 5103d5cdb271:服务器这块,我觉得 腾讯云做的很不错,至少在云识别技术方面很成熟

本文标题:docker搭建web服务器与数据库服务器通信

本文链接:https://www.haomeiwen.com/subject/nekwkttx.html