Docker 之 基于LAMP容器部署WordPress

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 <[email protected]>"

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的启动脚本

[[email protected] 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容器

[[email protected] ~]# cd /root/lnmp/fpm/

vim Dockerfile

#for php-fpm container

FROM centos:7.3.1611

MAINTAINER "sunny [email protected]"

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"]

创建镜像

[[email protected] fpm]# docker build -t fpm:v1 ./

启动容器,如果fpm运行于前台,则启动成功

[[email protected] fpm]# docker run --rm --name fpm fpm:v1

准备nginx镜像

注意,这里的VOLUME要和fpm里的VOLUME保持一致即可,实际上和fpm的VOLUME目前没有直接的联系,是两个不同的VOLUME,但是为了方便区分,把VOLUME命名为一样,启动后,可通过--volume-from选项来确保卷路径一致

[[email protected] ~]# 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下面

[[email protected] nginx]# vim Dockerfile

#For nginx container

FROM centos:7.3.1611

MAINTAINER "sunny <[email protected]>"

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;"]

创建镜像

[[email protected] nginx]# docker build -t nginx:v1 ./

运行容器,使用-P暴露端口

[[email protected] nginx]# docker run --rm -P --name nginx nginx:v1

到这里,三个基本可用的容器已经准备好了。

首先启动nginx容器

[[email protected] nginx]# docker run -it --rm -P --name nginx nginx:v1

启动fpm容器,并把网络加入到nginx容器,且卷直接复制nginx容器,确保使用同一路径

[[email protected] 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

[[email protected] nginx]# cd /var/lib/docker/volumes/22363fc6ba24150932b445ec84414b83706146dfbc3668b573d4a461379eda0e/_data

[[email protected] _data]# vim index.php

<?php

phpinfo();

?>

保存退出后,查看nginx暴露的端口

[[email protected] _data]# docker port nginx

80/tcp -> 0.0.0.0:32788

[[email protected] _data]#

在浏览器上输入http://10.10.10.72:32788/ ,如果能够看到php的测试页信息,则表示nginx能正确的把php请求调度到容器fpm里处理,这里测试成功,成功后可以把测试页index.php删掉,后面这里会存放WordPress的文件

启动mariadb数据库

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

启动mariadb容器

[[email protected] _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下面,然后通过浏览器访问进行相关初始化配置写入

[[email protected] ~]# tar xf wordpress-4.7.4-zh_CN.tar.gz

[[email protected] ~]# cd wor

wordpress/ workshop/

[[email protected] ~]# cd wordpress/

[[email protected] 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

[[email protected] wordpress]# mv * /var/lib/docker/volumes/22363fc6ba24150932b445ec84414b83706146dfbc3668b573d4a461379eda0e/_data

[[email protected] wordpress]# cd /var/lib/docker/volumes/22363fc6ba24150932b445ec84414b83706146dfbc3668b573d4a461379eda0e/_data

[[email protected] _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目录,更改目录的所有者和所属组

[[email protected] _data]# docker inspect -f {{.Mounts}} db1

[{volume ffed5c72badc05ded96f1f32467e7a51440fd26e45e945f8b9a0294afa13b1f8 /var/lib/docker/volumes/ffed5c72badc05ded96f1f32467e7a51440fd26e45e945f8b9a0294afa13b1f8/_data /var/lib/mysql local  true }]

[[email protected] _data]# cd

[[email protected] ~]#

[[email protected] ~]# cd /var/lib/docker/volumes/ffed5c72badc05ded96f1f32467e7a51440fd26e45e945f8b9a0294afa13b1f8/_data

[[email protected] _data]# ls

aria_log.00000001  aria_log_control  ibdata1  ib_logfile0  ib_logfile1  mysql  mysql.sock  performance_schema  test

[[email protected] _data]# mkdir wordpress

[[email protected] _data]# chown -R 27:27 wordpress/

到这里完成后,在浏览器输入http://10.10.10.72:32788/ ,会自动跳转到初始化配置页,根据页面提示,将网页生成配置wp-config.php目录直接写入,完成初始化,wordpress基于LNMP架构的容器运行成功。

这个例子中,后期要完善的有,mariadb的初始化,以及容器编排问题

原文地址:http://blog.51cto.com/ghbsunny/2155046

时间: 2024-07-29 03:44:41

Docker 之 基于LAMP容器部署WordPress的相关文章

用dockerfile配置生成docker image并实现容器部署(redis服务)

一.Dockerfile文件: #Version 1.0 at 2016-04-12 #Author:http://sunday208.blog.51cto.com/ #Base images FROM centos #MAINTAINER MAINTAINER http://sunday208.blog.51cto.com/ #ADD ADD  tcl8.6.5-src.tar.gz /usr/local/src ADD  redis-3.0.7.tar.gz /usr/local/src A

docker安装步骤及基于docker容器部署web应用LNMP服务器环境

docker的介绍 docker的定义: 1.docker的三个概念:Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的.可移植的.自给自足的容器Docker 镜像 - Docker images: Docker 镜像是 Docker 容器运行时的只读模板Docker 仓库 - Docker registeries: Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库(Docker Hub)Docker 容器 - Docker containers:每一个 Docke

基于docker容器部署solr 8.1

文章要点:1.Solr是什么2.Solr目录结构3.基于docker部署solr正文:1.Solr是什么?Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口.用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引:也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果.2.Solr目录结构?(1)bin:solr的运行脚本(2)contrib:solr的一些扩展jar包,用于增强solr的功能(3)dist:该目录包

基于Docker容器部署ELK日志分析系统

部署ELK日志分析系统,比较消耗计算机硬件,如果使用虚拟机进行测试部署,建议分配较多的硬件资源,否则,当elk容器运行后,会使其无法正常运行.我这里将分配给docker主机5G内存,四个CPU. 一.环境准备 我这里使用一台docker主机(如需要部署docker服务,可以参考博文:Docker的安装详细配置),其IP地址为192.168.20.6,在其之上运行elk容器. 二.配置docker主机运行elk容器 [[email protected] ~]# echo "vm.max_map_c

LAMP基于FastCGI分离部署应用

实验目标 本次LAMP搭建在CentOS 7虚拟机上,基于 php-fpm(Fastcgi)实现httpd.php-fpm.mariadb三者分离,并且在LAMP上部署应用,用两个虚拟机一个虚拟主机用于提供phpMyAdmin:另一个虚拟主机用于提供wordpress:且提供 xcache加速. 实验环境部署如下: httpd 172.18.12.7 httpd-2.4.6-40.el7.centos.x86_64 php-fpm 172.18.12.8 php-fpm-5.4.16-36.el

Docker —— 用于统一开发和部署的轻量级 Linux 容器【转】

转自:http://www.oschina.net/translate/docker-lightweight-linux-containers-consistent-development-and-deployment 英文原文:Docker: Lightweight Linux Containers for Consistent Development and Deployment 使用Docker容器——轻量灵活的VM同类,来接管“依赖地狱”.学习Docker是如何基于LXC技术,通过把应用

基于php-fpm方式部署LAMP

前言 CentOS 7: httpd-2.4:rpm包默认编译支持了fcgi模块: php-fpm包:专用于将php运行于fpm模式: 当我们使用php-fpm方式部署LAMP时,需要使用三台服务器,一台服务器作为http服务器,一台当作php-fpm服务器,一台作为数据库服务器.当http服务器接收到客户端的请求时,会通过本地磁盘IO返回出请求中的静态请求资源,当http服务器匹配到请求数据中的动态资源后,通过fastcgi将动态资源请求转发给php-fpm服务器的9000端口,php-fpm

Docker容器部署tomcat出现中文乱码

docker 容器部署tomcat后,日志文件中出现中文乱码,很多问号,中文的文件夹也是问好.先看看容器的locale: [[email protected] ~]# docker exec -it 41de9a0b6045 locale LANG= LC_CTYPE="POSIX" LC_NUMERIC="POSIX" LC_TIME="POSIX" LC_COLLATE="POSIX" LC_MONETARY="

阿里云上Docker Compose部署wordpress

先上官方文档: https://docs.docker.com/compose/wordpress/ 我的环境: [[email protected] ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) [[email protected] ~]# uname -r 3.10.0-123.9.3.el7.x86_64 可以使用Docker Compose可以利用容器,在隔离环境下轻松运行WordPress. 1.安装C