登录 或者 注册 rss
您现在的位置:?华健新闻网?>>?国际要闻?>>?利用docker来部署web应用?文章正文

利用docker来部署web应用

来源:华健新闻网 更新时间:02-28 点击发表评论

参考:作者一https://tommy.net.cn/2015/02/13/run-and-debug-php-website-with-docker-part-1/

作者二https://menng.github.io/2015/08/24/run-php-website-with-docker/

?

作者二参考的作者一,部署了php的website

?

因为要经常升级MySQL到最新版本,所以,我们不想每升级一次数据库,就重新导出、导入一次数据,因为这样感觉实在是太土了,不够高大上。为了达到这个目的,我们在创建MySQL实例之前需要先创建一个Volume用于保存MySQL的数据。我个人喜欢用busybox作为baseimage,当然,你也可以根据自己的喜好来做。

dockerrun--name=mysql_data-v/var/lib/mysql-dbusyboxechoMySQLData

?

创建MySQL实例

dockerrun--name=mysql_server--volumes-frommysql_data-eMYSQL_ALLOW_EMPTY_PASSWORD=1-dtommylau/mysql

dockerrun--name=mysql_server--volumes-frommysql_data-eMYSQL_ROOT_PASSWORD=Passw0rd-dtommylau/mysql

?

新建一个wwwroot的实例,用于映射实例里面的/var/www/html路径,因为Nginx和PHP需要同时访问到这些文件。

dockerrun--name=wwwroot-v/home/user/www:/var/www/html-dbusyboxechowwwroot

?

通过上面的命令就把本地路径/home/user/www映射到了/var/www/html。注意:请用你本机的实际地址替换相应的路径。至此,我们就完成了wwwroot的准备工作。可以再次运行dockerps-a检查一下。在/home/user/www这个目录创建2个新文件,分别是index.html和info.php

?

新创建的这个php-fpm实例中,如果打开/etc/hosts会发现里面有一条域名记录,指向mysql_server实例。

dockerrun--name=php-fpm--volumes-fromwwwroot--linkmysql_server:mysql-dtommylau/php

?

$dockerexec-tiphp-fpmcat/etc/hosts

我们可以看到在hosts文件最后有一条记录172.17.0.4mysql,这个就是mysql_server实例在虚拟环境中的IP地址,我们在php-fpm实例中,就是通过mysql这个名字与mysql_server实例进行通信的,我们可以ping一下看看。

$dockerexec-tiphp-fpmping-c3mysql

?

?

在目录/home/user/docker建立default.conf

?

server{

listen80;

?

root/var/www/html;

indexindex.htmlindex.htmindex.php;

?

server_namelocalhost;

?

location/{

???#Firstattempttoserverequestasfile,then

???#asdirectory,thenfallbacktodisplayinga404.

???try_files$uri$uri/=404;

???#Uncommenttoenablenaxsionthislocation

???#include/etc/nginx/naxsi.rules

???}

?

location~\.php${

???fastcgi_split_path_info^(.+\.php)(/.+)$;

???fastcgi_passphp:9000;

???fastcgi_indexindex.php;

???includefastcgi_params;

???}

}

?

在刚才创建default.conf的目录内(/home/user/docker),创建一个文件名为Dockerfile的文件,其内容如下:

FROMtommylau/nginx

COPYdefault.conf/etc/nginx/conf.d/

?

?

打开终端或者命令行并进入到Dockerfile所在目录,运行dockerbuild命令来生成一个新的镜像。注意:本命令必须在Dockerfile和default.conf所在目录执行,否则Docker会提示找不到Dockerfile。

?

$dockerbuild-tlocal/nginx.

?

这个命令会生成一个新的名为local/nginx的镜像,也可以按照你自己的喜好给它重新起个名字。不过必须记住这个名字,因为稍后还要召唤它来提供Web服务。最后,整合我们之前启动的PHP-FPM实例php-fpm。

dockerrun--name=nginx--volumes-fromwwwroot--linkphp-fpm:php-p80:80-dlocal/nginx

同样的,需要加载wwwroot实例,以便实例可以正确的访问/var/www/html目录。这里将实例php-fpm映射成别名php,这里必须要与之前修改的Nginx配置文件default.conf中的名字相匹配(fastcgi_pass后面的服务器名)。-p80:80表示将实例内的80端口暴露给Host主机。

?

这个时候,我们已经可以通过http://localhost来访问Nginx实例了。你会看到一个Hello,world!,当然我们也可以访问http://localhost/info.php来查看PHP版本信息。

?

问题:

20170214160513749"alt=""/>




排查:

执行命令查看

dockerexecnginxls/

?20170214160536515"alt=""/>



?

原因是CentOS7中的安全模块selinux把权限禁掉了,至少有以下三种方式解决挂载的目录没有权限的问题:

??1.在运行容器的时候,给容器加特权,及加上--privileged=true参数:

??dockerrun-i-t-v/soft:/soft--privileged=true686672a1d0cc/bin/bash

??2.临时关闭selinux:

??setenforce0

??3.添加selinux规则,改变要挂载的目录的安全性文本

阅读更多
收藏
用户评论

????没有任何评论
用户名: *

?

手机浏览

华健新闻网 版权所有
华健新闻网 Total 0.037124(s) query 6, 报料QQ:点击这里给我发消息

利用docker来部署web应用|国际要闻 - 华健新闻网 365棋牌客服是多少_365棋牌平台app_365棋牌游戏苹果版