设为首页 收藏本站
查看: 985|回复: 0

[经验分享] Docker 之 基于LAMP容器部署WordPress

[复制链接]

尚未签到

发表于 2019-2-21 09:04:20 | 显示全部楼层 |阅读模式
LAMP的网络连接,有两个方法
第一:nginx需要两个网卡,一个面向客户端,一个面向fpm,而fpm也要有两个网卡,一个面向nginx,一个面向mysql

第二,nginx和fpm,mariadb都在同一docker0桥,只需把nginx端口暴露就可以

准备三个镜像,用于nignx,fpm,mariadb。
mkdir -pv /root/lnmp/{nginx,fpm,mariadb}
使用绑定挂载的卷,目的明确,但是不能保证后期运行这些容器的宿主机上也有这些卷存在,因此,建议使用docker管理的卷,后期启动容器,不用考虑卷的问题,但是docker管理的卷的路径需要通过命令查看才知道
准备mariadb数据库
可以现在其他主机上安装mariadb-server,安装后可以查看/usr/lib/systemd/system/mariadb.service这个文件,看看启动要运行什么命令,然后再编写Dockerfile进行镜像制作
cd /root/lnmp/mariadb
编写dockerfile
vim Dockerfile
#for mairadb container
FROM centos:7.3.1611
MAINTAINER "sunny "
COPY start-db.sh /etc/init.d
VOLUME "/var/lib/mysql"
RUN yum -y install mariadb-server;\
    yum clean all;
CMD ["/etc/init.d/start-db.sh"]
准备/root/lnmp/start-db.sh,作为mysql的启动脚本
[root@docker mariadb]# vim /root/lnmp/mariadb/start-db.sh

#!/bin/bash
/usr/libexec/mariadb-prepare-db-dir
/usr/bin/mysqld_safe --basedir=/usr

chmode a+x /root/lnmp/mariadb/start-db.sh
制作镜像
docker build -t mariadb:v1 ./
把镜像运行为容器,并查看是否有报错,如果没有报错,且mariadb运行于前台,则mariadb准备完成
docker run  --rm --name db1 mariadb:v1

准备php-fpm容器
[root@docker ~]# cd /root/lnmp/fpm/
vim Dockerfile
#for php-fpm container
FROM centos:7.3.1611
MAINTAINER "sunny sunny@ghbsunny.cn"
RUN yum -y install php-fpm php-mbstring php-mysql;\
    yum clean all;\
    rm -rf /var/cache/yum;
VOLUME "/webapp/wordpress"
CMD ["/usr/sbin/php-fpm","--nodaemonize"]
创建镜像
[root@docker fpm]# docker build -t fpm:v1 ./
启动容器,如果fpm运行于前台,则启动成功
[root@docker fpm]# docker run --rm --name fpm fpm:v1

准备nginx镜像
注意,这里的VOLUME要和fpm里的VOLUME保持一致即可,实际上和fpm的VOLUME目前没有直接的联系,是两个不同的VOLUME,但是为了方便区分,把VOLUME命名为一样,启动后,可通过--volume-from选项来确保卷路径一致
[root@docker ~]# cd /root/lnmp/nginx/
需要把nginx的配置指向fpm,因此需要准备一个配置文件,nginx.conf,启用php的配置段
vim nginx.conf
#更改http配置段两个内容,其他保持不变
   location / {
            root   /webapp/wordpress;
            index  index.php index.html index.htm;
        }

   location ~ \.php$ {
            root           /webapp/wordpress;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
由于nginx为编译安装,且安装后路径为/usr/local/nginx/conf/,因此在dockerfile中,要把这个更改后的nginx.conf复制到/usr/local/nginx/conf下面

[root@docker nginx]# vim Dockerfile
#For nginx container
FROM centos:7.3.1611
MAINTAINER "sunny "
ENV nginx_ver=1.14.0
ENV nginx_url=http://nginx.org/download/nginx-${nginx_ver}.tar.gz
VOLUME "/webapp/wordpress"
WORKDIR "/usr/local/src"
EXPOSE 80/tcp
ADD ${nginx_url} /usr/local/src/
RUN tar xf nginx-${nginx_ver}.tar.gz && yum -y install gcc pcre-devel openssl-devel make \
    && cd nginx-${nginx_ver} && ./configure && make && make install
COPY nginx.conf /usr/local/nginx/conf/
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]
创建镜像
[root@docker nginx]# docker build -t nginx:v1 ./
运行容器,使用-P暴露端口
[root@docker nginx]# docker run --rm -P --name nginx nginx:v1

到这里,三个基本可用的容器已经准备好了。
首先启动nginx容器
[root@docker nginx]# docker run -it --rm -P --name nginx nginx:v1
启动fpm容器,并把网络加入到nginx容器,且卷直接复制nginx容器,确保使用同一路径
[root@docker nginx]# docker run --name fpm -d --volumes-from nginx --net container:nginx fpm:v1
php启动成功后,在nginx容器对应的目录/webapp/wordpress/目录下准备一个文件index.php测试php反代是否成功
通过以下inspect命令查看卷/webapp/wordpress在本地的路径,进入路径后编辑index.php测试页
docker inspect -f {{.Mounts}} nginx
[root@docker nginx]# cd /var/lib/docker/volumes/22363fc6ba24150932b445ec84414b83706146dfbc3668b573d4a461379eda0e/_data
[root@docker _data]# vim index.php


保存退出后,查看nginx暴露的端口
[root@docker _data]# docker port nginx
80/tcp -> 0.0.0.0:32788
[root@docker _data]#
在浏览器上输入http://10.10.10.72:32788/ ,如果能够看到php的测试页信息,则表示nginx能正确的把php请求调度到容器fpm里处理,这里测试成功,成功后可以把测试页index.php删掉,后面这里会存放WordPress的文件

启动mariadb数据库
注意,正常情况下,在编辑dockerfile文件时,最好是能把mariadb启动的初始化设置,如果没有设置,可以在启动mariadb容器后,连接mariadb容器进行初始化,主要是因为mariadb不做初始化,默认账号root仅能本地连接,这里不做演示,而是将mariadb容器的网络加入到fpm里,实现本地连接的场景
启动mariadb容器
[root@docker _data]# docker run --name db1 -d --net container:fpm mariadb:v2

到这里,nginx,php-fpm,mariadb的容器都启动成功,其容器网络使用加入式网络,接下来把wordpress应用软件放到共享卷/webapp/wordpress下面
软件包:wordpress-4.7.4-zh_CN.tar.gz
解压软件包,并把解压后的wordpress文件放到共享卷/webapp/wordpress下面,然后通过浏览器访问进行相关初始化配置写入
[root@docker ~]# tar xf wordpress-4.7.4-zh_CN.tar.gz
[root@docker ~]# cd wor
wordpress/ workshop/
[root@docker ~]# cd wordpress/
[root@docker wordpress]# ls
index.php        wp-blog-header.php    wp-includes        wp-settings.php
license.txt      wp-comments-post.php  wp-links-opml.php  wp-signup.php
readme.html      wp-config-sample.php  wp-load.php        wp-trackback.php
wp-activate.php  wp-content            wp-login.php       xmlrpc.php
wp-admin         wp-cron.php           wp-mail.php
[root@docker wordpress]# mv * /var/lib/docker/volumes/22363fc6ba24150932b445ec84414b83706146dfbc3668b573d4a461379eda0e/_data
[root@docker wordpress]# cd /var/lib/docker/volumes/22363fc6ba24150932b445ec84414b83706146dfbc3668b573d4a461379eda0e/_data
[root@docker _data]# ls
index.php        wp-blog-header.php    wp-includes        wp-settings.php
license.txt      wp-comments-post.php  wp-links-opml.php  wp-signup.php
readme.html      wp-config-sample.php  wp-load.php        wp-trackback.php
wp-activate.php  wp-content            wp-login.php       xmlrpc.php
wp-admin         wp-cron.php           wp-mail.php

注意,wordpress安装需要指定一个数据库,如果没有数据库,可以在db1容器对应的卷下面创建一个wordpress目录,作为后面要wordpress的数据库,另外,如果数据库没有初始化,默认用户root,密码为空。
查找数据库的卷路径,创建wordpress目录,更改目录的所有者和所属组
[root@docker _data]# docker inspect -f {{.Mounts}} db1
[{volume ffed5c72badc05ded96f1f32467e7a51440fd26e45e945f8b9a0294afa13b1f8 /var/lib/docker/volumes/ffed5c72badc05ded96f1f32467e7a51440fd26e45e945f8b9a0294afa13b1f8/_data /var/lib/mysql local  true }]
[root@docker _data]# cd
[root@docker ~]#
[root@docker ~]# cd /var/lib/docker/volumes/ffed5c72badc05ded96f1f32467e7a51440fd26e45e945f8b9a0294afa13b1f8/_data
[root@docker _data]# ls
aria_log.00000001  aria_log_control  ibdata1  ib_logfile0  ib_logfile1  mysql  mysql.sock  performance_schema  test
[root@docker _data]# mkdir wordpress
[root@docker _data]# chown -R 27:27 wordpress/

到这里完成后,在浏览器输入http://10.10.10.72:32788/ ,会自动跳转到初始化配置页,根据页面提示,将网页生成配置wp-config.php目录直接写入,完成初始化,wordpress基于LNMP架构的容器运行成功。
这个例子中,后期要完善的有,mariadb的初始化,以及容器编排问题




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-675138-1-1.html 上篇帖子: Docker 之 dockerfile制作镜像 下篇帖子: Docker 之 私有仓库搭建
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表