docker:制作lnmp+wordpress镜像并部署

Docker中部署LNMP环境与WordPress并修改数据库密码
该博客详细介绍了如何在Docker环境下部署LNMP(Linux, Nginx, MySQL, PHP)服务,并安装WordPress。首先,通过关闭防火墙、设置DNS、更新repo源等步骤准备环境。然后,安装Docker源并创建Dockerfile来构建包含Nginx和PHP的镜像。接着,创建MySQL的Dockerfile并构建镜像。在容器内部启动Nginx和PHP-FPM服务,创建WordPress数据库并授权。最后,通过修改数据库密码和WordPress配置,完成WordPress的安装。访问指定URL即可查看WordPress页面。

环境部署

#关闭防火墙、核心防护
systemctl stop firewalld 
systemctl disable firewalld
setenforce 0

#添加DNS
echo "nameserver 114.114.114.114" /etc/resolv.conf

#重载repo源
yum clean all && yum makecache

#修改主机名
hostnamectl set-hostname docker-lnmp
su

1、安装docker源
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

2、安装docker
yum install -y docker-ce
systemctl start docker
systemctl enable docker

systemctl daemon-reload
systemctl restart docker

#创建dockerfile 目录
mkdir docker && cd docker

部署docker-lnmp

#创建nginx-php 、mysql目录
mkdir nignx mysql
cd nginx
###上传nginx-1.12.2.tar.gz、wordpress-4.9.4-zh_CN.tar、libmcrypt-2.5.7.tar.gz、nginx.conf、wp-config.php
tar zxvf wordpress-4.9.4-zh_CN.tar.gz
tar zxvf nginx-1.12.2.tar.gz
tar zxvf libmcrypt-2.5.7.tar.gz
tar zxvf php-5.5.38.tar.gz

#创建dockerfile
cat >>dockerfile <<EOF
FROM docker.io/centos:7
#部署nginx
RUN yum -y update
RUN yum -y install gcc gcc-c++ openssl-devel openssl autoconf cmake autoconf zlib zlib-devel libtool pcre pcre-devel wget net-tools make
RUN groupadd  -g 900 nginx && useradd nginx -g nginx -s /sbin/nologin
ADD nginx-1.12.2 nginx-1.12.2
RUN cd /nginx-1.12.2/ && ./configure --prefix=/usr/local/nginx --with-http_dav_module  --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-http_ssl_module --with-http_gzip_static_module --user=nginx --group=nginx
RUN cd /nginx-1.12.2/ && make && make install
RUN ln -s /usr/local/nginx/sbin/nginx  /usr/local/sbin/
RUN sed -i '1afastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;' /usr/local/nginx/conf/fastcgi_params
ADD nginx.conf /usr/local/nginx/conf/
ADD wordpress /usr/local/nginx/html/wordpress
ADD wp-config.php /usr/local/nginx/html/wordpress
#部署php
RUN yum -y install gcc gcc-c++ libxml2-devel libcurl-devel openssl-devel bzip2-devel  openssl automake make autoconf libtool zlib-devel make pcre-devel wget net-tools
ADD libmcrypt-2.5.7 libmcrypt-2.5.7
RUN cd libmcrypt-2.5.7/&& ./configure --prefix=/usr/local/libmcrypt && make && make install
ADD php-5.5.38 php-5.5.38
RUN  cd php-5.5.38/ && ./configure --prefix=/usr/local/php5.5 --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-openssl --enable-fpm --enable-sockets --enable-sysvshm --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --with-mhash --with-mcrypt=/usr/local/libmcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2 --enable-maintainer-zts && make && make install
RUN  cd php-5.5.38 && cp php.ini-production /etc/php.ini
RUN  cd /php-5.5.38 && cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
RUN  chmod +x /etc/init.d/php-fpm && chkconfig --add php-fpm && chkconfig php-fpm on
RUN  cp /usr/local/php5.5/etc/php-fpm.conf.default  /usr/local/php5.5/etc/php-fpm.conf
RUN sed -i 's*;pid = run/php-fpm.pid*pid = run/php-fpm.pid*g' /usr/local/php5.5/etc/php-fpm.conf
RUN sed -i 's/user = nobody/user = nginx/g' /usr/local/php5.5/etc/php-fpm.conf
RUN sed -i 's/group = nobody/group = nginx/g' /usr/local/php5.5/etc/php-fpm.conf
RUN sed -i 's/pm.max_children = 5/pm.max_children = 50/g' /usr/local/php5.5/etc/php-fpm.conf
RUN sed -i 's/pm.start_servers = 2/pm.start_servers = 5/g' /usr/local/php5.5/etc/php-fpm.conf
RUN sed -i 's/pm.min_spare_servers = 1/pm.min_spare_servers = 5/g' /usr/local/php5.5/etc/php-fpm.conf
RUN sed -i 's/pm.max_spare_servers = 3/pm.max_spare_servers = 30/g' /usr/local/php5.5/etc/php-fpm.conf
EXPOSE 9000
EXPOSE 80
EOF

#docker 部署nginx-php
docker build -t "centos:nginx-php" .
=====>Successfully 
docker run -dit -p 80:80 -m 500m --memory-swap 1G 镜像ID /bin/bash

#进入容器、开启服务
docker exec -it 容器ID /bin/bash
/etc/init.d/php-fpm start && nginx

exit


创建Mysql 
cd /root/docker/mysql
vim Dockerfile
FROM docker.io/centos:7
RUN yum -y install gcc gcc-c++ make autoconf make cmake wget
RUN groupadd mysql; useradd -r -M -u 3306 -s /sbin/nologin -g mysql mysql
RUN mkdir /usr/local/mysql; mkdir /data/mysql -pv
RUN yum install gcc gcc-c++ ncurses-devel bison bison-devel -y
RUN wget -c http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.29.tar.gz
RUN tar xf mysql-5.6.29.tar.gz -C /usr/local/src/
WORKDIR /usr/local/src/mysql-5.6.29
RUN cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql -DSYSCONFDIR=/etc -DMYSQL_TCP_PORT=3306 -DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MYISAM_STORAGE_ENGINE=1 -DENABLED_LOCAL_INFILE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DDEFAULT_CHARSET=utf8 -DEXTRA_CHARSETS=all -DDEFAULT_COLLATION=utf8_general_ci -DWITH-MYSQLD-LDFLAGS=-all-static -DWITH-CLIENT-LD-FLAGS=-all-static -DWITH_DEBUG=0 && gmake && gmake install
RUN chown -R root:mysql /usr/local/mysql/ && chown -R mysql:mysql /data/mysql
RUN chmod 755 /usr/local/src/mysql-5.6.29/scripts/mysql_install_db.sh
RUN /usr/local/src/mysql-5.6.29/scripts/mysql_install_db.sh --basedir=/usr/local/mysql --datadir=/data/mysql --no-defaults --user=mysql
RUN cp /usr/local/src/mysql-5.6.29/support-files/my-default.cnf  /etc/my.cnf
RUN cp /usr/local/src/mysql-5.6.29/support-files/mysql.server  /etc/init.d/mysqld
RUN chmod 775 /etc/init.d/mysqld && /etc/init.d/mysqld start
RUN echo -e '#!/bin/bash\nexport PATH=$PATH:/usr/local/mysql/bin' >/etc/profile.d/mysql.sh
RUN source /etc/profile
EXPOSE 3306
EOF

docker build -t "centos:mysql-5.6" .
====>successful
docker run -dit -p 3306:3306 --device-write-bps /dev/sda:10M 镜像ID /bin/bash
docker exec -it 容器ID /bin/bash
#启动mysql
/etc/init.d/mysqld start

wp-config.php文件内容展示
在这里插入图片描述
在这里插入图片描述
nginx.conf文件内容展示,其他不变
在这里插入图片描述

修改数据库密码、进入数据库给wordpress提权

1、修改密码,第一行默认密码(无)第二、第三行新密码
mysqladmin -u root -p password
(第一行直接敲回车)
123456
123456

2、进入数据库、授权
mysql -uroot -p
123456 

#创建wordpress 表
create database wordpress default charset utf8 COLLATE utf8_general_ci;

#授权
grant all privileges on wordpress.*  to 'wordpress'@'%' identified by '123456' with grant option;

#刷新权限生效
flush privileges;

#退出数据库、退出容器
exit
exit

访问http://192.168.226.128/wordpress/index.php

最后访问
在这里插入图片描述

<think>我们参考提供的引用资料,来构建在CentOS上使用Docker部署LNMPWordPress的步骤。根据引用,我们需要分别部署Nginx、PHPMySQL三个容器,配置它们之间的网络连接。 步骤概述: 1. 准备环境:安装Docker,关闭防火墙和SELinux,创建自定义网络。 2. 分别构建Nginx、PHPMySQLDocker镜像(通过Dockerfile)或直接使用官方镜像(这里引用中使用了自定义构建,我们参考其Dockerfile)。 3. 创建运行容器,指定自定义网络,设置资源限制(如内存、Swap限制,I/O限制等,根据需求可选)。 4. 配置WordPress测试。 详细步骤: 1. 环境准备 安装Docker启动: ```bash sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo yum install -y docker-ce docker-ce-cli containerd.io sudo systemctl start docker sudo systemctl enable docker ``` 关闭防火墙和SELinux(生产环境请谨慎,建议配置防火墙规则): ```bash sudo systemctl stop firewalld sudo systemctl disable firewalld sudo setenforce 0 ``` 创建自定义网络(用于容器间通信): ```bash docker network create --subnet=172.18.0.0/16 --opt "com.docker.network.bridge.name"="docker1" mynetwork ``` 2. 部署MySQL容器 根据引用[2]和[4],MySQL容器IP设置为172.18.0.20。我们使用官方MySQL镜像创建数据卷来持久化数据。 ```bash docker run -d --name mysql \ --net mynetwork --ip 172.18.0.20 \ -e MYSQL_ROOT_PASSWORD=your_password \ -v /path/to/mysql/data:/var/lib/mysql \ mysql:5.7 ``` 注意:这里我们使用MySQL 5.7版本,因为WordPress兼容性好。请替换`your_password`为你的root密码,指定数据卷的本地路径。 3. 部署PHP容器 引用[3]提供了PHPDockerfile,但为了简化,我们可以使用官方PHP-FPM镜像安装必要的扩展。 创建Dockerfile构建自定义PHP镜像: ```Dockerfile FROM php:7.4-fpm RUN apt-get update && apt-get install -y \ libfreetype6-dev \ libjpeg62-turbo-dev \ libpng-dev \ && docker-php-ext-configure gd --with-freetype --with-jpeg \ && docker-php-ext-install -j$(nproc) gd mysqli pdo pdo_mysql ``` 构建镜像: ```bash docker build -t custom-php:7.4 . ``` 运行PHP容器: ```bash docker run -d --name php \ --net mynetwork --ip 172.18.0.30 \ -v /path/to/wordpress:/var/www/html \ custom-php:7.4 ``` 注意:这里将WordPress的代码目录挂载到PHP容器中,后续Nginx容器也需要挂载同一个目录。 4. 部署Nginx容器 引用[3]提供了Nginx的Dockerfile。我们同样可以构建自定义Nginx镜像,或者直接运行挂载配置文件。 创建Nginx配置文件(nginx.conf),参考如下(关键部分): ```nginx server { listen 80; server_name localhost; root /usr/share/nginx/html; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { fastcgi_pass php:9000; # 使用PHP容器的名称和端口 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } ``` 创建Dockerfile构建Nginx镜像(或者也可以直接运行官方镜像挂载配置文件): ```Dockerfile FROM nginx:1.18 COPY nginx.conf /etc/nginx/conf.d/default.conf ``` 构建镜像: ```bash docker build -t custom-nginx:1.18 . ``` 运行Nginx容器: ```bash docker run -d --name nginx \ --net mynetwork --ip 172.18.0.10 \ -p 80:80 \ -v /path/to/wordpress:/usr/share/nginx/html \ -v /path/to/nginx/conf:/etc/nginx/conf.d \ custom-nginx:1.18 ``` 注意:这里将本地的WordPress目录挂载到Nginx容器的`/usr/share/nginx/html`,同时挂载配置文件目录。 5. 配置WordPress 下载WordPress解压到挂载目录(例如:/path/to/wordpress): ```bash wget https://wordpress.org/latest.tar.gz tar -zxvf latest.tar.gz -C /path/to/wordpress --strip-components=1 ``` 修改WordPress配置文件(wp-config.php): 复制wp-config-sample.php为wp-config.php修改数据库连接部分: ```php define('DB_NAME', 'wordpress'); define('DB_USER', 'root'); define('DB_PASSWORD', 'your_password'); define('DB_HOST', '172.18.0.20'); # MySQL容器的IP ``` 注意:需要进入MySQL容器创建wordpress数据库(或使用phpMyAdmin等工具): ```bash docker exec -it mysql bash mysql -u root -p CREATE DATABASE wordpress; ``` 6. 测试 访问服务器的IP地址,应该可以看到WordPress安装界面。 7. 资源限制(可选,根据引用[2]的要求) 在运行容器时,可以添加资源限制参数: - 限制Nginx内存:`--memory="500m" --memory-swap="1.5g"`(这里内存500MB,Swap 1GB,总Swap=1.5G,所以Swap可用1G) - 限制MySQL写速率:`--device-write-bps /dev/sda:10mb` 例如,运行MySQL容器时限制写速率: ```bash docker run -d ... --device-write-bps /dev/sda:10mb ... mysql:5.7 ``` 8. 备份容器快照 将容器提交为镜像,然后保存为tar文件: ```bash docker commit nginx nginx_backup docker commit php php_backup docker commit mysql mysql_backup docker save -o lnmp_wordpress_backup.tar nginx_backup php_backup mysql_backup ``` 注意:以上步骤中的路径和密码等需要根据实际情况修改。 相关问题: 1. 如何优化Docker构建LNMP环境的性能? 2. 如何配置WordPress的多站点? 3. 如何对LNMP环境进行日常维护和升级?</think>### 在CentOS上使用Docker部署LNMPWordPress #### **1. 环境准备** ```bash # 关闭防火墙和SELinux systemctl stop firewalld systemctl disable firewalld setenforce 0 # 安装Docker yum install -y yum-utils yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum install -y docker-ce docker-ce-cli containerd.io systemctl start docker systemctl enable docker # 创建自定义网络(固定容器IP) docker network create --subnet=172.18.0.0/16 --opt "com.docker.network.bridge.name"="docker1" mynetwork ``` #### **2. 部署MySQL容器** ```bash docker run -d \ --name mysql \ --net mynetwork --ip 172.18.0.20 \ -e MYSQL_ROOT_PASSWORD=123456 \ -v /mysql_data:/var/lib/mysql \ mysql:5.7 \ --device-write-bps /dev/sda:10mb # 限制磁盘写入速率[^2] ``` #### **3. 部署PHP容器** ```Dockerfile # Dockerfile-php FROM centos:7 RUN yum install -y epel-release && yum install -y php-fpm php-mysql COPY www.conf /etc/php-fpm.d/www.conf EXPOSE 9000 CMD ["php-fpm", "-F"] ``` ```bash # 构建镜像 docker build -t custom-php -f Dockerfile-php . # 运行容器 docker run -d \ --name php \ --net mynetwork --ip 172.18.0.30 \ -v /wordpress:/var/www/html \ custom-php ``` #### **4. 部署Nginx容器** ```Dockerfile # Dockerfile-nginx FROM nginx:1.18 COPY nginx.conf /etc/nginx/conf.d/default.conf EXPOSE 80 ``` ```nginx # nginx.conf server { listen 80; root /usr/share/nginx/html; location ~ \.php$ { fastcgi_pass 172.18.0.30:9000; # PHP容器IP include fastcgi_params; } } ``` ```bash # 构建镜像 docker build -t custom-nginx -f Dockerfile-nginx . # 运行容器(限制内存500MB+Swap 1G[^2]) docker run -d \ --name nginx \ --net mynetwork --ip 172.18.0.10 \ --memory="500m" --memory-swap="1g" \ -p 80:80 \ -v /wordpress:/usr/share/nginx/html \ custom-nginx ``` #### **5. 配置WordPress** ```bash # 下载WordPress wget https://wordpress.org/latest.tar.gz tar -zxvf latest.tar.gz -C /wordpress # 配置数据库连接 cd /wordpress cp wp-config-sample.php wp-config.php sed -i "s/database_name_here/wordpress/g" wp-config.php sed -i "s/username_here/root/g" wp-config.php sed -i "s/password_here/123456/g" wp-config.php sed -i "s/localhost/172.18.0.20/g" wp-config.php # MySQL容器IP ``` #### **6. 初始化数据库** ```bash docker exec -it mysql mysql -uroot -p123456 -e "CREATE DATABASE wordpress;" ``` #### **7. 访问验证** 浏览器访问 `http://服务器IP`,完成WordPress安装向导。 #### **8. 容器备份** ```bash # 保存容器快照 docker commit nginx nginx_backup docker commit php php_backup docker commit mysql mysql_backup # 打包镜像备份 docker save -o lnmp_wordpress_backup.tar nginx_backup php_backup mysql_backup ``` ### 部署示意图 ``` +---------------------+ | Nginx (172.18.0.10) | | - 处理HTTP请求 | | - 代理PHP请求 | +----------+----------+ | +----------v----------+ | PHP (172.18.0.30) | | - 执行PHP脚本 | +----------+----------+ | +----------v----------+ | MySQL (172.18.0.20) | | - 存储WordPress数据 | +---------------------+ ``` ### 关键配置说明 1. **网络配置**:通过自定义网络`mynetwork`实现容器间固定IP通信[^4] 2. **资源限制**: - Nginx内存限制:`--memory="500m" --memory-swap="1g"` - MySQL磁盘I/O限制:`--device-write-bps /dev/sda:10mb`[^2] 3. **数据持久化**:通过`-v`参数挂载目录避免容器销毁数据丢失 4. **服务联动**:Nginx配置中需指向PHP容器的IP地址`172.18.0.30:9000`
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值