Dockerfile部署LNMP

发布时间 2023-11-14 01:07:06作者: 我的城市没有海

1、LNMP架构

搭建一个lnmp环境,需要涉及到两个目录结构。一个是Dockerfile配置的目录结构,另一个是最终lnmp运行的目录结构。Dockerfile配置目录主要存放Dockerfile构建脚本和一些配置文件,lnmp运行目录主要存放程序运行产生的一些数据,比如mysql数据等。
以下是此次Dockerfile配置的目录结构,包括了nginx、php、mysql的配置文件。

[root@docker /opt]# ll mysqld/
总用量 47704
-rw-r--r-- 1 root root     1224 11月 13 23:34 Dockerfile
-rw-r--r-- 1 root root      556 11月 13 23:35 my.cnf
-rw-r--r-- 1 root root 48833145 11月 13 23:33 mysql-boost-5.7.20.tar.gz
-rw-r--r-- 1 root root      171 11月 13 23:36 run.sh
[root@docker /opt]# ll nginx/
总用量 9840
-rw-r--r-- 1 root root     627 11月 13 23:18 Dockerfile
-rw-r--r-- 1 root root  981687 11月 13 23:14 nginx-1.12.2.tar.gz
-rw-r--r-- 1 root root     791 11月 13 23:20 nginx.conf
-rw-r--r-- 1 root root 9082696 11月 13 23:15 wordpress-4.9.4-zh_CN.tar.gz
[root@docker /opt]# ll php/
总用量 19096
-rw-r--r--  1 root root      963 11月 13 23:52 Dockerfile
drwxrwxr-x 15 1000 1000     4096 9月  27 2017 php-7.1.10
-rw-r--r--  1 root root 19440059 11月 14 00:19 php-7.1.10.tar.gz
-rw-r--r--  1 root root     4462 11月 14 00:39 php-fpm.conf
-rw-r--r--  1 root root    71122 11月 14 00:20 php.ini
-rw-r--r--  1 root root    18524 11月 14 00:38 www.conf

二、所需安装包下载

php:

https://www.php.net/distributions/php-7.1.10.tar.bz2

nginx:
http://nginx.org/download/nginx-1.12.2.tar.gz

wordpress:
https://cn.wordpress.org/wordpress-4.9.4-zh_CN.tar.gz

mysql:
https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-5.7.20.tar.gz

任务需求:
(1)、使用 Docker 构建 LNMP 环境并运行 Wordpress 网站平台
(2)、限制 Nginx 容器最多使用 500MB 的内存和 1G 的 Swap
(3)、限制 Mysql 容器写 /dev/sda 的速率为 10 MB/s
(4)、将所有容器进行快照,然后将 Docker 镜像打包成 tar 包备份到本地

三、Dockerfile部署LNMP

先自定义网络,再使用指定IP运行docker

是LNMP各组件处于同一网段

[root@docker ~]# docker network create --subnet=172.20.0.0/16 --opt "com.docker.network.bridge.name"="docker1" mynetwork
f711d688445880c66844ec60a88dda3a63065544fc9782a7f00c29b555f47c50

[root@docker ~]# docker network ls
NETWORK ID     NAME        DRIVER    SCOPE
d5a456f440cd   bridge      bridge    local
61afab7b07f5   host        host      local
f711d6884458   mynetwork   bridge    local
b5f2fbc24b81   none        null      local

[root@docker ~]# ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        inet6 fe80::42:33ff:fe3c:bcb3  prefixlen 64  scopeid 0x20<link>
        ether 02:42:33:3c:bc:b3  txqueuelen 0  (Ethernet)
        RX packets 9458  bytes 385476 (376.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 19108  bytes 68273889 (65.1 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

docker1: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.20.0.1  netmask 255.255.0.0  broadcast 172.20.255.255
        ether 02:42:68:a3:3d:cd  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Docker各组件的ip为:

容器 操作系统 IP 软件
Nginx centos7 172.20.0.10 Docker-Nginx
MySQL centos7 172.20.0.20 Docker-Mysql
PHP centos7 172.20.0.30 Docker-php

3.1、构建Nginx镜像

(1)、创建nginx的工作目录

[root@docker ~]# mkdir /opt/nginx
[root@docker ~]# cd /opt/nginx/
[root@docker /opt/nginx]# 

(2)、编辑Dockerfile配置文件

cat Dockerfile 
FROM centos:7
MAINTAINER this is nginx image <lnmp>
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make;useradd -M -s /sbin/nologin nginx
ADD nginx-1.12.2.tar.gz /usr/local/src/
WORKDIR /usr/local/src/nginx-1.12.2
RUN ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module;make -j 4 && make install
ENV PATH /usr/local/nginx/sbin:$PATH
ADD nginx.conf /usr/local/nginx/conf/
ADD wordpress-4.9.4-zh_CN.tar.gz /usr/local/nginx/html
RUN chmod 777 -R /usr/local/nginx/html/
EXPOSE 80
VOLUME [ "/usr/local/nginx/html/" ]
CMD [ "/usr/local/nginx/sbin/nginx","-g","daemon off;" ]

(3)、准备nginx配置文件

cat nginx.conf 
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        charset utf-8;
        location / {
            root   html;
            index  index.html index.php;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        location ~ \.php$ {
            root           html;
            fastcgi_pass   172.20.0.30:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;
            include        fastcgi_params;
        }
    }
}

(4)、构建nginx镜像

[root@docker /opt/nginx]# docker build -t nginx:lnmp .
[+] Building 48.6s (13/13) FINISHED                                                               docker:default
 => [internal] load build definition from Dockerfile                                                        0.0s
 => => transferring dockerfile: 666B                                                                        0.0s
 => [internal] load .dockerignore                                                                           0.0s
 => => transferring context: 2B                                                                             0.0s
 => [internal] load metadata for docker.io/library/centos:7                                                 2.2s
 => CACHED [1/8] FROM docker.io/library/centos:7@sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32  0.0s
 => [internal] load build context                                                                           0.1s
 => => transferring context: 10.07MB                                                                        0.1s
 => [2/8] RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make;useradd -M -s /sbin/nologin nginx      35.7s
 => [3/8] ADD nginx-1.12.2.tar.gz /usr/local/src/                                                           0.2s 
 => [4/8] WORKDIR /usr/local/src/nginx-1.12.2                                                               0.0s 
 => [5/8] RUN ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_mod  7.6s 
 => [6/8] ADD nginx.conf /usr/local/nginx/conf/                                                             0.0s 
 => [7/8] ADD wordpress-4.9.4-zh_CN.tar.gz /usr/local/nginx/html                                            0.6s 
 => [8/8] RUN chmod 777 -R /usr/local/nginx/html/                                                           1.1s 
 => exporting to image                                                                                      1.2s 
 => => exporting layers                                                                                     1.2s 
 => => writing image sha256:cded2fd2df295ec08e8303faf8fc9238d59b61d84d9f2d33a688df39f6b0cbf1                0.0s 
 => => naming to docker.io/library/nginx:lnmp                                                               0.0s

(5)、启动nginx容器

[root@docker /opt/nginx]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED              SIZE
nginx        lnmp      cded2fd2df29   About a minute ago   608MB

[root@docker /opt/nginx]# docker run -d --name nginx -p 80:80 -m 500m --memory-swap 1g --net mynetwork --ip 172.20.0.10 nginx:lnmp
f84017fa05ec239c5d6b8a26788d5da69dcdec85eea849efcf83726878060000

[root@docker /opt/nginx]# docker inspect nginx
...
            "Networks": {
                "mynetwork": {
                    "IPAMConfig": {
                        "IPv4Address": "172.20.0.10"

...

[root@docker /opt/nginx]# docker ps
CONTAINER ID   IMAGE        COMMAND                   CREATED         STATUS         PORTS                               NAMES
f84017fa05ec   nginx:lnmp   "/usr/local/nginx/sb…"   2 minutes ago   Up 2 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp   nginx

(6)、验证nginx

[root@docker /opt/nginx]# curl -I http://192.168.100.60:80
HTTP/1.1 200 OK
Server: nginx/1.12.2
Date: Mon, 13 Nov 2023 15:28:18 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 612
Last-Modified: Mon, 13 Nov 2023 15:21:56 GMT
Connection: keep-alive
ETag: "65523f14-264"
Accept-Ranges: bytes

[root@docker /opt/nginx]# curl -I http://172.20.0.10:80
HTTP/1.1 200 OK
Server: nginx/1.12.2
Date: Mon, 13 Nov 2023 15:28:28 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 612
Last-Modified: Mon, 13 Nov 2023 15:21:56 GMT
Connection: keep-alive
ETag: "65523f14-264"
Accept-Ranges: bytes

3.2、构建MySQL容器

(1)、创建MySQL工作目录

[root@docker /opt/nginx]# mkdir /opt/mysqld
[root@docker /opt/nginx]# cd /opt/mysqld
[root@docker /opt/mysqld]# 

(2)、编辑Dockerfile文件

[root@docker /opt/mysqld]# cat Dockerfile 
FROM centos:7
MAINTAINER this is mysql image <lnmp>
RUN yum -y install ncurses ncurses-devel bison cmake pcre-devel zlib-devel gcc gcc-c++ make;useradd -M -s /sbin/nologin mysql
ADD mysql-boost-5.7.20.tar.gz /usr/local/src/
WORKDIR /usr/local/src/mysql-5.7.20/
RUN cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8  \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=boost \
-DWITH_SYSTEMD=1;make -j4;make install
ADD my.cnf /etc/my.cnf
EXPOSE 3306
RUN chown -R mysql:mysql /usr/local/mysql/;chown mysql:mysql /etc/my.cnf
WORKDIR /usr/local/mysql/bin/
RUN ./mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data;cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/;systemctl enable mysqld
ENV PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
VOLUME [ "/usr/local/mysql" ]
CMD ["/usr/sbin/init"]

(3)、编辑MySQL配置文件

[root@docker /opt/mysqld]# cat my.cnf 
[client]
port = 3306
socket=/usr/local/mysql/mysql.sock
 
[mysqld]
user = mysql
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
port = 3306
character-set-server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket=/usr/local/mysql/mysql.sock
bind-address = 0.0.0.0
skip-name-resolve
max_connections=2048
default-storage-engine=INNODB
max_allowed_packet=16M
server-id = 1
 
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES

(4)、编写MySQL启动脚本

[root@docker /opt/mysqld]# cat run.sh 
#!/bin/bash

/usr/local/mysql/bin/mysqld
systemctl enable mysqld

(6)、构建MySQL镜像

[root@docker /opt/mysqld]# docker build -t mysql:lnmp .
[+] Building 591.6s (14/14) FINISHED                                                              docker:default
 => [internal] load build definition from Dockerfile                                                        0.0s
 => => transferring dockerfile: 1.26kB                                                                      0.0s
 => [internal] load .dockerignore                                                                           0.0s
 => => transferring context: 2B                                                                             0.0s
 => [internal] load metadata for docker.io/library/centos:7                                                 1.4s
 => CACHED [1/9] FROM docker.io/library/centos:7@sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32  0.0s
 => [internal] load build context                                                                           0.8s
 => => transferring context: 48.85MB                                                                        0.7s
 => [2/9] RUN yum -y install ncurses ncurses-devel bison cmake pcre-devel zlib-devel gcc gcc-c++ make;use  33.6s
 => [3/9] ADD mysql-boost-5.7.20.tar.gz /usr/local/src/                                                    14.1s
 => [4/9] WORKDIR /usr/local/src/mysql-5.7.20/                                                              0.0s 
 => [5/9] RUN cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.soc  507.9s 
 => [6/9] ADD my.cnf /etc/my.cnf                                                                            0.0s 
 => [7/9] RUN chown -R mysql:mysql /usr/local/mysql/;chown mysql:mysql /etc/my.cnf                          7.2s 
 => [8/9] WORKDIR /usr/local/mysql/bin/                                                                     0.0s 
 => [9/9] RUN ./mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/  1.9s 
 => exporting to image                                                                                     25.4s 
 => => exporting layers                                                                                    25.3s 
 => => writing image sha256:17aeac0f7ef8901572a24ca4623d44da7ae72e337607dba5fdf9b7dae309a9df                0.0s 
 => => naming to docker.io/library/mysql:lnmp                                                               0.0s

(7)、启动MySQL镜像

[root@docker /opt/mysqld]# docker run --name=mysql -d --privileged --device-write-bps /dev/sda:10M -v /usr/local/mysql --net mynetwork --ip 172.20.0.20 mysql:lnmp                                                                
3a250bbce6cce35046eb84f1eb2aa213d6716961a5c363478c111913f80e6782

[root@docker /opt/mysqld]# docker ps 
CONTAINER ID   IMAGE        COMMAND                   CREATED          STATUS          PORTS                               NAMES
3a250bbce6cc   mysql:lnmp   "/usr/sbin/init"          9 seconds ago    Up 3 seconds    3306/tcp                            mysql
f84017fa05ec   nginx:lnmp   "/usr/local/nginx/sb…"   23 minutes ago   Up 23 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp   nginx

(8)验证MySQL

[root@docker /opt/mysqld]# docker exec -it mysql bash
[root@3a250bbce6cc bin]# systemctl status mysqld
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: activating (start) since Mon 2023-11-13 15:48:03 UTC; 55s ago
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
  Process: 85 ExecStart=/usr/local/mysql/bin/mysqld --daemonize --pid-file=/usr/local/mysql/mysqld.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS)
  Process: 62 ExecStartPre=/usr/local/mysql/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
   CGroup: /docker/3a250bbce6cce35046eb84f1eb2aa213d6716961a5c363478c111913f80e6782/system.slice/mysqld.service
           └─87 /usr/local/mysql/bin/mysqld --daemonize --pid-file=/usr/local/mysql/mysqld.pid

3.3、构建PHP镜像

(1)、创建工作目录

[root@docker /opt/mysqld]# mkdir /opt/php
[root@docker /opt/mysqld]# cd /opt/php

(2)、编辑Dockerfile文件

[root@docker /opt/php]# cat Dockerfile
FROM centos:7
MAINTAINER this is php image <lnmp>
RUN yum install -y gd \
libjpeg libjpeg-devel \
libpng libpng-devel \
freetype freetype-devel \
libxml2 libxml2-devel \
zlib zlib-devel \
curl curl-devel \
openssl openssl-devel \
gcc gcc-c++ make pcre-devel;useradd -M -s /sbin/nologin nginx
ADD php-7.1.10.tar.gz /usr/local/src/
WORKDIR /usr/local/src/php-7.1.10
RUN ./configure \
--prefix=/usr/local/php \
--with-mysql-sock=/usr/local/mysql/mysql.sock \
--with-mysqli \
--with-zlib \
--with-curl \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-openssl \
--enable-fpm \
--enable-mbstring \
--enable-xml \
--enable-session \
--enable-ftp \
--enable-pdo \
--enable-tokenizer \
--enable-zip ; make -j 4 ; make install
ENV PATH /usr/local/php/bin:/usr/local/php/sbin:$PATH
ADD php.ini     /usr/local/php/lib/
ADD php-fpm.conf /usr/local/php/etc/
ADD www.conf /usr/local/php/etc/php-fpm.d/
EXPOSE 9000
CMD /usr/local/php/sbin/php-fpm -F

(3)、准备Dockerfile需要的PHP配置文件

该配置文件模板位于安装目录的 php-7.1.10/php.ini-development 位置
[root@localhost php]# vim php.ini
#939行,取消注释,修改
date.timezone = Asia/Shanghai
#1170行,修改
mysqli.default_socket = /usr/local/mysql/mysql.sock

tar xvf php-7.1.10.tar.gz
cp php-7.1.10/php.ini-development ./php.ini
[root@docker /opt/php]# egrep -v "^;" php.ini | egrep -v "^$"
[PHP]
engine = On
short_open_tag = Off
precision = 14
output_buffering = 4096
zlib.output_compression = Off
implicit_flush = Off
unserialize_callback_func =
serialize_precision = -1
disable_functions =
disable_classes =
zend.enable_gc = On
expose_php = On
max_execution_time = 30
max_input_time = 60
memory_limit = 128M
error_reporting = E_ALL
display_errors = On
display_startup_errors = On
log_errors = On
log_errors_max_len = 1024
ignore_repeated_errors = Off
ignore_repeated_source = Off
report_memleaks = On
track_errors = On
html_errors = On
variables_order = "GPCS"
request_order = "GP"
register_argc_argv = Off
auto_globals_jit = On
post_max_size = 8M
auto_prepend_file =
auto_append_file =
default_mimetype = "text/html"
default_charset = "UTF-8"
doc_root =
user_dir =
enable_dl = Off
file_uploads = On
upload_max_filesize = 2M
max_file_uploads = 20
allow_url_fopen = On
allow_url_include = Off
default_socket_timeout = 60
[CLI Server]
cli_server.color = On
[Date]
date.timezone = Asia/Shanghai
[filter]
[iconv]
[intl]
[sqlite3]
[Pcre]
[Pdo]
[Pdo_mysql]
pdo_mysql.cache_size = 2000
pdo_mysql.default_socket=
[Phar]
[mail function]
SMTP = localhost
smtp_port = 25
mail.add_x_header = On
[SQL]
sql.safe_mode = Off
[ODBC]
odbc.allow_persistent = On
odbc.check_persistent = On
odbc.max_persistent = -1
odbc.max_links = -1
odbc.defaultlrl = 4096
odbc.defaultbinmode = 1
[Interbase]
ibase.allow_persistent = 1
ibase.max_persistent = -1
ibase.max_links = -1
ibase.timestampformat = "%Y-%m-%d %H:%M:%S"
ibase.dateformat = "%Y-%m-%d"
ibase.timeformat = "%H:%M:%S"
[MySQLi]
mysqli.max_persistent = -1
mysqli.allow_persistent = On
mysqli.max_links = -1
mysqli.cache_size = 2000
mysqli.default_port = 3306
mysqli.default_socket = /usr/local/mysql/mysql.sock
mysqli.default_host =
mysqli.default_user =
mysqli.default_pw =
mysqli.reconnect = Off
[mysqlnd]
mysqlnd.collect_statistics = On
mysqlnd.collect_memory_statistics = On
[OCI8]
[PostgreSQL]
pgsql.allow_persistent = On
pgsql.auto_reset_persistent = Off
pgsql.max_persistent = -1
pgsql.max_links = -1
pgsql.ignore_notice = 0
pgsql.log_notice = 0
[bcmath]
bcmath.scale = 0
[browscap]
[Session]
session.save_handler = files
session.use_strict_mode = 0
session.use_cookies = 1
session.use_only_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly =
session.serialize_handler = php
session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 1440
session.referer_check =
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
session.sid_length = 26
session.trans_sid_tags = "a=href,area=href,frame=src,form="
session.sid_bits_per_character = 5
[Assertion]
zend.assertions = 1
[COM]
[mbstring]
[gd]
[exif]
[Tidy]
tidy.clean_output = Off
[soap]
soap.wsdl_cache_enabled=1
soap.wsdl_cache_dir="/tmp"
soap.wsdl_cache_ttl=86400
soap.wsdl_cache_limit = 5
[sysvshm]
[ldap]
ldap.max_links = -1
[mcrypt]
[dba]
[opcache]
[curl]
[openssl]

(4)、配置php-fpm.conf文件

该配置文件位于
[root@docker /opt/php]# find ./ -name php-fpm.conf.in
./php-7.1.10/sapi/fpm/php-fpm.conf.in

[root@docker /opt/php]# cp ./php-7.1.10/sapi/fpm/php-fpm.conf.in ./php-fpm.conf

[root@docker /opt/php]# egrep -v "^;" php-fpm.conf | egrep -v "^$"
[global]
pid = run/php-fpm.pid
include=/usr/local/php/etc/php-fpm.d/*.conf

(5)、配置www.conf文件

该配置文件位于
[root@docker /opt/php]# find ./ -name www.conf.in
./php-7.1.10/sapi/fpm/www.conf.in

[root@docker /opt/php]# vim www.conf
#23、24行,修改用户和组
user = nginx
group = nginx
#36行,修改监听IP和端口为容器IP:9000端口
listen = 172.20.0.30:9000

[root@docker /opt/php]# cp ./php-7.1.10/sapi/fpm/www.conf.in ./www.conf

[root@docker /opt/php]# egrep -v "^;" www.conf | egrep -v "^$"
[www]
user = nginx
group = nginx
listen = 172.20.0.30:9000
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

(6)、构建PHP镜像

[root@docker /opt/php]# docker build -t php:lnmp .
[+] Building 250.3s (13/13) FINISHED                                                             docker:default
 => [internal] load build definition from Dockerfile                                                       0.0s
 => => transferring dockerfile: 1.00kB                                                                     0.0s
 => [internal] load .dockerignore                                                                          0.0s
 => => transferring context: 2B                                                                            0.0s
 => [internal] load metadata for docker.io/library/centos:7                                                1.7s
 => CACHED [1/8] FROM docker.io/library/centos:7@sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d3  0.0s
 => [internal] load build context                                                                          0.2s
 => => transferring context: 19.54MB                                                                       0.2s
 => [2/8] RUN yum install -y gd libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml  79.0s
 => [3/8] ADD php-7.1.10.tar.gz /usr/local/src/                                                            6.2s
 => [4/8] WORKDIR /usr/local/src/php-7.1.10                                                                0.5s 
 => [5/8] RUN ./configure --prefix=/usr/local/php --with-mysql-sock=/usr/local/mysql/mysql.sock --with-  160.7s 
 => [6/8] ADD php.ini     /usr/local/php/lib/                                                              0.0s 
 => [7/8] ADD php-fpm.conf /usr/local/php/etc/                                                             0.0s 
 => [8/8] ADD www.conf /usr/local/php/etc/php-fpm.d/                                                       0.0s 
 => exporting to image                                                                                     2.1s 
 => => exporting layers                                                                                    2.1s 
 => => writing image sha256:af8793e17ba4b10604dd642a378c69ba07564ec2350072fa0b1eada85e5bc415               0.0s 
 => => naming to docker.io/library/php:lnmp                                                                0.0s

(7)、启动PHP镜像

[root@docker /opt/php]# docker run -itd --name php --net mynetwork --ip 172.20.0.30 -p 9000:9000 --volumes-from nginx --volumes-from mysql php:lnmp
b96869ae1432c5b1981edc74c7ac680d8648705ca61c4fc00cba3ad1ae0228f9

[root@docker /opt/php]# docker ps
CONTAINER ID   IMAGE        COMMAND                   CREATED             STATUS             PORTS                                       NAMES
b96869ae1432   php:lnmp     "/bin/sh -c '/usr/lo…"   12 seconds ago      Up 12 seconds      0.0.0.0:9000->9000/tcp, :::9000->9000/tcp   php
3a250bbce6cc   mysql:lnmp   "/usr/sbin/init"          58 minutes ago      Up 58 minutes      3306/tcp                                    mysql
f84017fa05ec   nginx:lnmp   "/usr/local/nginx/sb…"   About an hour ago   Up About an hour   0.0.0.0:80->80/tcp, :::80->80/tcp           nginx

(8)、验证PHP

[root@docker /opt/php]# docker exec -it php bash
[root@b96869ae1432 php-7.1.10]# ps -aux 
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.2 113044 16604 pts/0    Ss+  16:46   0:00 php-fpm: master process (/usr/local/php/etc/p
nginx          7  0.0  0.1 113044  8716 pts/0    S+   16:46   0:00 php-fpm: pool www
nginx          8  0.0  0.1 113044  8768 pts/0    S+   16:46   0:00 php-fpm: pool www
root           9  0.1  0.0  11844  3012 pts/1    Ss   16:47   0:00 bash
root          23  0.0  0.0  51748  3536 pts/1    R+   16:47   0:00 ps -aux
[root@b96869ae1432 php-7.1.10]# exit
exit

3.4、启动 wordpress 服务

 (1)、MySQL授权:

[root@docker /opt/php]# docker exec -it mysql bash
[root@3a250bbce6cc bin]# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.20 Source distribution

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


mysql> create database wordpress;
Query OK, 1 row affected (0.00 sec)

mysql> grant all privileges on wordpress.* to 'wordpress'@'%' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> grant all privileges on *.* to 'root'@'%' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

mysql> exit
Bye
[root@3a250bbce6cc bin]# exit
exit

浏览器访问测试:

http://192.168.100.60/wordpress/wp-admin/setup-config.php

 

配置:

 安装:

 

 登录:

 

参考:https://blog.csdn.net/cronaldo91/article/details/132347643