文章目录
- Dockerfile 构建wordpress
- *安装流程规划**
- 1、上传wordpress
- 2、源码安装php
- 3、准备php文件+构建为镜像
- 4、准备nginx文件+构建为镜像
- 5、构建MYSQL镜像
- 6、项目展示
Dockerfile 构建wordpress
安装流程规划*
- wordpress装在宿主主机,相当于一台NFS
- php5.4源码安装在一台容器内
- nginx装在一个容器内
- 将容器挂载到wordpress站点目录以实现访问
- 宿主机内cpu要求四核四G
1、上传wordpress
1、创建目录
[root@docter ~]# mkdir blog
[root@docter ~]# mkdir -p blog/php
[root@docter ~]# cd blog/
2、上传wordpress包并解压
[root@docter blog ~]# rz
[root@docter blog ~]# tar xf wordpress.tar.gz
drwxr-xr-x 2 root root 44 Jun 26 18:17 php
-rw-r--r-- 1 root root 11098483 Apr 1 22:17 wordpress
3、构建centos:7镜像
[root@Centos7 tmp ]# docker run -it centos:7 bash
[root@docter tmp]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 7 3c9be54d505f 7 months ago 204MB
4、创建一个网桥
[root@Centos7 tmp ]# docker network create lnmp
[root@docter ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
e26ae49a68f1 bridge bridge local
b0a268c1d902 host host local
bb02f8b94a1a lnmp bridge local
0d214ca04d47 none null local
2、源码安装php
# 复制一下在另外一个窗口打开
1、下载php源码包
[root@Centos7 tmp ]# wget https://www.php.net/distributions/php-5.6.38.tar.gz
2、复制php.tar.gz 到容器中
[root@docter tmp]# docker cp php-5.6.38.tar.gz 3c9be54d505f:/tmp # centos:7启动的ID
3、在容器编译安装PHP
[root@2510dcfa868c tmp]# ll
total 18936
-rwx------ 1 root root 836 Nov 13 2020 ks-script-DrRL8A
drwxr-xr-x 3 root root 18 Jun 25 12:54 pear
-rw-r--r-- 1 root root 19301157 Sep 13 2018 php-5.6.38.tar.gz
[root@2510dcfa868c tmp]# tar xf php-5.6.38.tar.gz
[root@2510dcfa868c tmp]# rm -rf /etc/yum.repos.d/*
[root@2510dcfa868c tmp]# rm -rf /etc/yum.repos.d/*
[root@2510dcfa868c tmp]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://repo.huaweicloud.com/repository/conf/CentOS-7-reg.repo
[root@2510dcfa868c tmp]# curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@2510dcfa868c tmp]# yum clean all
[root@2510dcfa868c tmp]# yum makecache
4、在容器中安装php所需要依赖包
[root@2510dcfa868c tmp]# cd php-5.6.38
[root@2510dcfa868c php-5.6.38]# yum install -y gcc gcc-c++ make zlib zlib-devel pcre pcre-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers libtool-ltdl-devel
5、继续在容器中开始编译安装
[root@2510dcfa868c php-5.6.38]# ./configure --with-mysql --enable-fpm
[root@2510dcfa868c php-5.6.38]# make -j
[root@2510dcfa868c php-5.6.38]# make install
6、php在容器中编译的同时,复制一个窗口到宿主机中扩容swap分区,否则会报错
#多执行几次,否则会失败,报内存不足 #切记,是在宿主机中,而不是容器内
[root@docter blog]# dd if=/dev/zero of=/opt/newdiskq bs=1M count=1024
[root@docter blog]# mkswap /opt/newdiskq
[root@docter blog]# swapoff /opt/newdiskq
[root@docter blog]# swapon /opt/newdiskq
7、检查mysql扩展库
[root@2510dcfa868c php-5.6.38]# php -m | grep mysql
mysql
8、复制php.ini到/usr/local/lib
[root@2510dcfa868c php-5.6.38]# cp php.ini-development /usr/local/lib/php.ini
[root@2510dcfa868c php-5.6.38]# php --ini
Configuration File (php.ini) Path: /usr/local/lib
Loaded Configuration File: /usr/local/lib/php.ini
3、准备php文件+构建为镜像
- Dockerfile
- php-fpm.conf
1、编写php的dockerfile文件
[root@docter php]# ll
total 28
-rw-r--r-- 1 root root 154 Jun 26 01:27 Dockerfile
-rw-r--r-- 1 root root 23018 Jun 26 18:17 php-fpm.conf
[root@docter php]# cat Dockerfile
FROM 15132332840/php:v10
RUN groupadd www -g 666 && \
useradd www -u 666 -g 666
ADD php-fpm.conf /usr/local/etc/
EXPOSE 9000
CMD ["php-fpm","-F"]
2、可以复制容器内的php.fpm.conf
# 进入容器,可以在已开启php的容器
[root@3c9be54d505f etc]# pwd
/usr/local/etc
[root@2510dcfa868c etc]# mv php-fpm.conf.deault php-fpm.conf
3、复制php-fpm.conf到宿主主机 #宿主主机执行
[root@docter php]# pwd
/root/blog/php
[root@3c9be54d505f php]# docker cp 2510dcfa868c :/usr/local/etc/php-fpm.conf
[root@docter php]# ll
total 28
-rw-r--r-- 1 root root 154 Jun 26 01:27 Dockerfile
-rw-r--r-- 1 root root 23018 Jun 26 18:17 php-fpm.conf
[root@3c9be54d505f etc]# vi php-fpm.conf
...
listen = 9000
request_terminate_timeout = 0 #460行左右
user = www
group = www
...
5、保存容器为镜像
[root@docter php]# docker login #登录docker.hub
docker commir -a '作者' -m '简介' -p [容器ID] [新镜像名称]
[root@docter php]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 7 3c9be54d505f 7 months ago 204MB
[root@docter php]# docker commit -a "明明" -m " php-5.6.38的唯一版本" 3c9be54d505f -p php:v10
# 构建镜像
[root@docter php]# docker tag php:v1-fpm-mysql 15132332840/php:v10 #打包镜像 必须写自己的名字,否则会报错
[root@docter php]# docker push 15132332840/php:v10 #上传镜像
6、构建php镜像
[root@docter php]# docker build -t lnmp-php:v1 .
#先上传镜像成功,在构建php镜像,而且构建必须和dockerfile在同一个目录中
4、准备nginx文件+构建为镜像
- nginx.repo
- nginx.conf
- Dockerfile
- default.conf
1、编写nginx的dockerfile文件
[root@docter nginx]# cat Dockerfile
FROM centos:7
ADD nginx.repo /etc/yum.repos.d/
RUN yum -y install nginx
ADD default.conf /etc/nginx/conf.d/
ADD nginx.conf /etc/nginx/
WORKDIR /usr/share/nginx/
EXPOSE 80 443
RUN groupadd www -g 666 && \
useradd www -u 666 -g 666
CMD nginx -g "daemon off;"
2、编写nginx的default.conf 文件
[root@docter nginx]# cat default.conf
server {
listen 80;
listen [::]:80;
server_name localhost;
root /usr/share/nginx/html;
location / {
index index.php index.html index.htm;
}
location ~ \.php$ {
root /usr/share/nginx/html;
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
3、nginx.conf文件
[root@docter nginx]# cat nginx.conf
user www;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
user www;
4、编写nginx的nginx.repo文件
[root@docter nginx]# cat nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
5、构建镜像
[root@docter nginx]# docker build -t lnmp-nginx:v1 . #构建必须和dockerfile在同一个目录中
5、构建MYSQL镜像
1、启动mysql容器
[root@docter blog]# docker run -d -e MYSQL_ROOT_PASSWORD=123 --network=lnmp --name mysql mysql:5.7
2、进入mysql容器中创建数据库
[root@docter ~]# docker exec -it mysql bash
root@5b451395e693:/# mysql -u root -p
Enter password: #密码
mysql> create database wordpress;
3、启动php容器
[root@docter blog]# docker run -d -v /root/blog/wordpress/:/usr/share/nginx/html --network=lnmp --name php lnmp-php:v1
4、启动nginx容器
[root@docter blog]# docker run -d --name nginx -p 80:80 --network=lnmp -v /root/blog/wordp3、ress/:/usr/share/nginx/html lnmp-nginx:v1
5、查看全部镜像
[root@docter nginx]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
lnmp-php v1 d015dcbf1f91 About an hour ago 1.28GB
lnmp-nginx v1 006660142825 3 hours ago 335MB
15132332840/php v10 c2d4e5a145f0 23 hours ago 1.28GB
mysql 5.7 09361feeb475 3 days ago 447MB
centos 7 8652b9f0cb4c 7 months ago 204MB
6、查看全部容器是否启动成功
[root@docter nginx]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
daca528bce0e lnmp-nginx:v1 "/bin/sh -c 'nginx -…" About an hour ago Up About an hour 0.0.0.0:80->80/tcp, :::80->80/tcp, 443/tcp nginx
2510dcfa868c lnmp-php:v1 "php-fpm -F" About an hour ago Up About an hour 9000/tcp php
5b451395e693 mysql:5.7 "docker-entrypoint.s…" About an hour ago Up About an hour 3306/tcp, 33060/tcp mysql
e83d0fd837d3 lnmp-php:v1 "php-fpm -F" About an hour ago Up About an hour 9000/tcp silly_wozniak
7、IP访问测试
#如果报错502 进入php容器中编辑php-fpm.conf
[root@2510dcfa868c etc]# pwd
/usr/local/etc
[root@2510dcfa868c etc]# ll
-rw-r--r-- 1 root root 23007 Jun 26 10:35 php-fpm.conf
[root@3c9be54d505f etc]# vi php-fpm.conf
...
listen = 9000
request_terminate_timeout = 0 #460行左右
user = www
group = www
...
最后重启容器中的php就ok
[root@docter tmp]# docker restart php
6、项目展示
1、把 wp-config.php文件写到此目录中就ok
[root@docter wordpress]# pwd
/root/blog/wordpress
[root@docter wordpress]# vim wp-config.php
<?php
/**
* WordPress基础配置文件。
*
* 这个文件被安装程序用于自动生成wp-config.php配置文件,
* 您可以不使用网站,您需要手动复制这个文件,
* 并重命名为“wp-config.php”,然后填入相关信息。
*
* 本文件包含以下配置选项:
*
* * MySQL设置
* * 密钥
* * 数据库表名前缀
* * ABSPATH
*
* @link https://codex.wordpress.org/zh-cn:%E7%BC%96%E8%BE%91_wp-config.php
*
* @package WordPress
*/
// ** MySQL 设置 - 具体信息来自您正在使用的主机 ** //
/** WordPress数据库的名称 */
define('DB_NAME', 'wordpress');
/** MySQL数据库用户名 */
define('DB_USER', 'root');
/** MySQL数据库密码 */
define('DB_PASSWORD', '123');
/** MySQL主机 */
define('DB_HOST', 'mysql');
/** 创建数据表时默认的文字编码 */
define('DB_CHARSET', 'utf8mb4');
/** 数据库整理类型。如不确定请勿更改 */
define('DB_COLLATE', '');
/**#@+
* 身份认证密钥与盐。
*
* 修改为任意独一无二的字串!
* 或者直接访问{@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org密钥生成服务}
* 任何修改都会导致所有cookies失效,所有用户将必须重新登录。
*
* @since 2.6.0
*/
define('AUTH_KEY', '5It|*^U=b19e^%;P/<%VmPM9&miaA>bvBFpvqi9ULA1;ta@^1]stL>zKKoTSf,qQ');
define('SECURE_AUTH_KEY', ' YVU-tJgiAuZ^f;z310SlnI@_NN@qxY,j/{$K=p_/=F77&$hG;7A;!u75MdsH;l^');
define('LOGGED_IN_KEY', 'l.1rg$u5+Zg_Bfim8o:SET)cG*&PC)Au,`Mrc*,^?@VgP lfJ =x2/yWP:z9IQz#');
define('NONCE_KEY', 'kzKT/4-.^F@aDaFu.GiW={#cmVv9OWmo+|b__guWWEq4FucLMR*aEEJn`o0aM3[j');
define('AUTH_SALT', '(b1%eR<ChsudBoPwry^hV8OT%vBvwNCS]I^<Em+LV=.Kp_+cp;#~$]lBo$KB-p5 ');
define('SECURE_AUTH_SALT', '=e?!1mfh9mTh>:kx;9-t]Kt)Lv&%P$d ZnWTHW>Dj[=ciq s[E<9TgVOfa#<_vNv');
define('LOGGED_IN_SALT', '*}L+,!?azO-BlM>prvxuZ<i80[v$&gs?Bts{;;? ._7dx>%W.(7_n:?$-N4heZYe');
define('NONCE_SALT', 'oQTk Lg(^`dV|h#8O0PLq*W>?g} SN& /kHW)>r98Xa,+ntdsw4;yy~$C%6n,-U7');
/**#@-*/
/**
* WordPress数据表前缀。
*
* 如果您有在同一数据库内安装多个WordPress的需求,请为每个WordPress设置
* 不同的数据表前缀。前缀名只能为数字、字母加下划线。
*/
$table_prefix = 'wp_';
/**
* 开发者专用:WordPress调试模式。
*
* 将这个值改为true,WordPress将显示所有用于开发的提示。
* 强烈建议插件开发者在开发环境中启用WP_DEBUG。
*
* 要获取其他能用于调试的信息,请访问Codex。
*
* @link https://codex.wordpress.org/Debugging_in_WordPress
*/
define('WP_DEBUG', false);
/* 好了!请不要再继续编辑。请保存本文件。使用愉快! */
/** WordPress目录的绝对路径。 */
if ( !defined('ABSPATH') )
define('ABSPATH', dirname(__FILE__) . '/');
/** 设置WordPress变量和包含文件。 */
require_once(ABSPATH . 'wp-settings.php');
2、授权root用户
[root@docter wordpress]# chown -R root.root ./