使用docker搭建LNMP架构

目录

环境准备

下载安装包

服务器环境

任务分析

nginx部分

建立工作目录

编写 Dockerfile 脚本

准备 nginx.conf 配置文件

生成镜像

创建自定义网络

启动镜像容器

验证nginx

MySQL部分

建立工作目录

编写 Dockerfile

准备 my.cnf 配置文件

生成镜像

启动镜像容器

验证mysql

PHP部分

建立工作目录

编写 Dockerfile 脚本

准备 php.ini、php-fpm.conf、www.conf 配置文件

生成镜像

启动镜像容器

验证 php

启动 wordpress 服务

mysql 授权

浏览器测试访问


  • 在一台主机上使用 Docker 创建LNMP服务并运行WordPress网站平台

NMP架构是一种用于运行动态网站或服务器的自由软件组合,它的名称取自其各个组成部分的首字母缩写。具体而言,LNMP代表Linux、Nginx、MySQL和PHP/Python/Perl,这四个元素共同构成了一套完整的服务器架构。

  • Linux: 作为操作系统,提供服务器的基础环境。

  • Nginx: 充当Web服务器,负责处理客户端的请求并向后端服务器传递这些请求。

  • MySQL: 作为关系型数据库管理系统,用于存储和管理数据。

  • PHP/Python/Perl: 用于处理动态内容和服务器端脚本。

LNMP架构在搭建和部署方面具有一定的灵活性和性能优势,因此被广泛用于运行各种动态网站和应用。这种架构的选择取决于项目的具体需求,例如使用PHP、Python或Perl等不同的服务器端脚本语言。

环境准备

下载安装包

准备的是这些安装包

mysql-boost-5.7.20.tar.gz
nginx-1.12.0.tar.gz
php-7.1.10.tar.bz2
wordpress-4.9.4-zh_CN.tar.gz

服务器环境

基于 Docker 的服务器环境,其中运行了三个容器分别用于 Nginx、MySQL 和 PHP。

  1. Nginx 容器
  • 容器名称: Docker-Nginx

  • 操作系统: CentOS 7

  • IP 地址: 172.20.0.10

  • 主要软件: Nginx

  1. MySQL 容器
  • 容器名称: Docker-Mysql

  • 操作系统: CentOS 7

  • IP 地址: 172.20.0.20

  • 主要软件: MySQL

  1. PHP 容器
  • 容器名称: Docker-php

  • 操作系统: CentOS 7

  • IP 地址: 172.20.0.30

  • 主要软件: PHP

这种容器化的架构使得每个服务都能够在独立的环境中运行,提高了灵活性和可维护性。

任务分析

  • 使用 Docker 构建 LNMP 环境并运行 Wordpress 网站平台

  • 限制 Nginx 容器最多使用 500MB 的内存和 1G 的 Swap

  • 限制 Mysql 容器写 /dev/sda 的速率为 10 MB/s

  • 将所有容器进行快照,然后将 Docker 镜像打包成 tar 包备份到本地

nginx部分

建立工作目录

mkdir /opt/nginx
#上传nginx-1.12.0.tar.gz、wordpress-4.9.4-zh_CN.tar.gz 到 /opt/nginx/ 目录中
cd /opt/nginx

编写 Dockerfile 脚本

vim 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.0.tar.gz /usr/local/src/
WORKDIR /usr/local/src/nginx-1.12.0
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;" ]

这是一个 Dockerfile 文件,用于构建一个包含 Nginx 1.12.0 和 WordPress 的镜像。以下是对每个部分的简要解释:

  1. FROM centos:7: 基础镜像是 CentOS 7。

  2. MAINTAINER: 指定镜像的维护者信息。

  3. 安装依赖和创建 Nginx 用户:

RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make; \
    useradd -M -s /sbin/nologin nginx
  1. 添加 Nginx 源码文件并设置工作目录:
ADD nginx-1.12.0.tar.gz /usr/local/src/
WORKDIR /usr/local/src/nginx-1.12.0
  1. 使用 configure 构建 Nginx:
RUN ./configure \
    --prefix=/usr/local/nginx \
    --user=nginx \
    --group=nginx \
    --with-http_stub_status_module; \
    make -j 4 && \
    make install
  1. 设置环境变量 PATH:
ENV PATH /usr/local/nginx/sbin:$PATH
  1. 添加 Nginx 配置文件 nginx.conf:
ADD nginx.conf /usr/local/nginx/conf/
  1. 添加 WordPress 源码文件并设置目录权限:
ADD wordpress-4.9.4-zh_CN.tar.gz /usr/local/nginx/html
RUN chmod 777 -R /usr/local/nginx/html/
  1. 暴露 Nginx 默认端口 80:
EXPOSE 80
  1. 定义数据卷:
VOLUME [ "/usr/local/nginx/html/" ]
  1. 设置启动命令为启动 Nginx:
CMD [ "/usr/local/nginx/sbin/nginx", "-g", "daemon off;" ]

这个 Dockerfile 创建一个包含 Nginx 1.12.0 和 WordPress 的镜像。它配置了 Nginx 的基本参数,并将 WordPress 安装在 Nginx 的默认 HTML 目录下。

准备 nginx.conf 配置文件

#复制nginx.conf到/opt/nginx/
cp /usr/local/nginx/conf/nginx.conf /opt/nginx/

vim nginx.conf

egrep -v "^(.)*#(.)*$" nginx.conf | grep -v "^$" #查看

配置文件的主要部分解释:

  • worker_processes 1;:指定Nginx使用一个worker进程。在实际生产环境中,可能需要根据服务器的CPU核心数量调整这个值。

  • events 块:

  • worker_connections 1024;:设置每个worker进程的最大并发连接数。

  • http 块:

  • include mime.types;:引用了一个包含了MIME类型的文件,以确保Nginx正确地处理各种文件类型。

  • default_type application/octet-stream;:指定默认的MIME类型为二进制流。

  • sendfile on;:启用sendfile指令,用于在磁盘和网络之间直接传输文件,提高性能。

  • keepalive_timeout 65;:指定客户端与服务器之间的持续连接超时时间。

  • server 块:

  • listen 80;:指定Nginx监听端口80。

  • server_name localhost;:指定服务器名为localhost。

  • charset utf-8;:设置字符集为UTF-8。

  • location / 块:

    • root html;:指定Web根目录为html。

    • index index.html index.php;:定义默认的索引文件。

  • error_page 块:

    • 定义处理500、502、503、504错误的页面。
  • location ~ \.php$ 块:

    • 匹配以.php结尾的URL。

    • root html;:指定PHP文件的根目录。

    • fastcgi_pass 172.20.0.30:9000;:将PHP请求传递给FastCGI服务器,此处的IP和端口应与您的PHP-FPM服务器配置一致。

    • 其余的参数配置用于传递必要的信息给FastCGI服务器。

生成镜像

docker build -t nginx:lnmp .
docker images

如果出现下面这个错误

ERROR: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

这个错误表明系统上 Docker 守护进程没有启动,或者你的用户没有足够的权限连接到 Docker 守护进程。

  1. 启动 Docker 守护进程:
sudo systemctl start docker
  1. 将 Docker 守护进程设置为开机启动:
sudo systemctl enable docker
  1. 确保您的用户添加到 Docker 用户组:
sudo usermod -aG docker $USER

记得注销并重新登录,以使组成员身份得到更新。

  1. 重新运行 Docker 命令:
docker build -t nginx:lnmp .

创建自定义网络

docker network create --subnet=172.20.0.0/16 --opt "com.docker.network.bridge.name"="docker1" mynetwork

#检查
docker network ls
ifconfig docker1

启动镜像容器

docker run -d --name nginx -p 80:80 -m 500m --memory-swap 1g --net mynetwork --ip 172.20.0.10 nginx:lnmp

这是一个用于在 Docker 中运行 Nginx 服务的命令。

  • docker run: 运行一个 Docker 容器。

  • -d: 在后台运行容器。

  • --name nginx: 为容器指定名称为 "nginx"。

  • -p 80:80: 将容器的端口 80 映射到主机的端口 80,使得可以通过主机的端口 80 访问容器中运行的 Nginx 服务。

  • -m 500m: 限制容器的内存使用为 500 MB。

  • --memory-swap 1g: 设置容器的内存加交换空间的总限制为 1 GB。

  • --net mynetwork: 将容器连接到名为 "mynetwork" 的网络。

  • --ip 172.20.0.10: 为容器指定 IP 地址为 172.20.0.10。

  • nginx:lnmp: 使用 "nginx:lnmp" 镜像来运行容器。这表示使用了一个包含 Nginx 和 LNMP(Linux、Nginx、MySQL、PHP)环境的镜像。

总体而言,这个命令的目的是在 Docker 中创建并运行一个名为 "nginx" 的容器,该容器使用指定的配置和镜像来提供 Nginx 服务。

检查

docker ps
#显示当前正在执行的容器的基本信息,如容器 ID、名称、状态、端口映射等。

docker inspect nginx
#获取有关指定 Docker 容器(这里是 "nginx")的详细信息

这部分输出是关于 Docker 容器的网络配置的一部分。在这里,我们可以看到容器连接到一个名为 "mynetwork" 的网络,并被分配了 IPv4 地址 "172.20.0.10"。

具体来说:

  • "Networks" 表示容器所连接的网络部分。

  • "mynetwork" 是网络的名称。

  • "IPAMConfig" 包含有关 IP 地址管理的配置信息。

  • "IPv4Address" 是容器在该网络上分配的 IPv4 地址,这里是 "172.20.0.10"。

这表明容器 "nginx" 在网络 "mynetwork" 中拥有 IP 地址 "172.20.0.10"。这种网络配置使得容器可以在这个网络上进行通信,同时通过 Docker 主机上的端口映射可以与外部进行交互。

验证nginx

curl http://192.168.41.31:80 

这个 curl 命令向指定的地址发送 HTTP 请求,并显示了该地址返回的 HTML 内容。在这个例子中,它向 http://192.168.41.31:80 发送了请求,并收到了 Nginx 的欢迎页面的 HTML 响应。

响应内容表明 Nginx 服务器已成功安装并正在运行。它提供了一些关于 Nginx 的基本信息,包括欢迎消息、安装成功提示以及一些相关的链接,如官方文档和商业支持。

MySQL部分

建立工作目录

mkdir /opt/mysql
cd /opt/mysql
#传入mysql安装包mysql-boost-5.7.20.tar.gz到/opt/mysql

编写 Dockerfile

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

这是一个 Dockerfile 文件,用于构建一个包含 MySQL 5.7.20 的镜像。以下是对每个部分的简要解释:

  1. FROM centos:7: 基础镜像是 CentOS 7。

  2. MAINTAINER: 指定镜像的维护者信息。

  3. 安装依赖和创建 MySQL 用户:

RUN yum -y install ncurses ncurses-devel bison cmake pcre-devel zlib-devel gcc gcc-c++ make; \
    useradd -M -s /sbin/nologin mysql
  1. 添加 MySQL 源码文件并设置工作目录:
ADD mysql-boost-5.7.20.tar.gz /usr/local/src/
WORKDIR /usr/local/src/mysql-5.7.20/
  1. 使用 CMake 构建 MySQL:
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
  1. 添加 MySQL 配置文件 my.cnf:
ADD my.cnf /etc/my.cnf
  1. 暴露 MySQL 默认端口 3306:
EXPOSE 3306
  1. 修改文件和目录权限:
RUN chown -R mysql:mysql /usr/local/mysql/; \
    chown mysql:mysql /etc/my.cnf
  1. 设置工作目录并初始化 MySQL 数据库:
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
  1. 设置环境变量 PATH 和定义数据卷:
ENV PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
VOLUME [ "/usr/local/mysql" ]
  1. 设置启动命令为 /usr/sbin/init
CMD ["/usr/sbin/init"]

这个 Dockerfile 创建一个包含 MySQL 5.7.20 的镜像,配置了一些基本的参数和文件路径。

准备 my.cnf 配置文件

vim 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

这是一个MySQL配置文件的示例,通常位于my.cnfmy.ini文件中。以下是对其中一些重要配置项的解析:

  • [client] 部分:

  • port = 3306: 客户端连接MySQL服务器的端口号。

  • socket=/usr/local/mysql/mysql.sock: 指定MySQL服务器的Unix套接字文件。

  • [mysqld] 部分:

  • user = mysql: MySQL服务运行的用户。

  • basedir=/usr/local/mysql: MySQL安装的基本目录。

  • datadir=/usr/local/mysql/data: 存储数据库数据文件的目录。

  • port = 3306: MySQL服务器监听的端口号。

  • character-set-server=utf8: 服务器使用的字符集。

  • pid-file = /usr/local/mysql/mysqld.pid: 保存MySQL服务器进程ID的文件路径。

  • socket=/usr/local/mysql/mysql.sock: MySQL服务器的Unix套接字文件路径。

  • bind-address = 0.0.0.0: MySQL服务器绑定的IP地址,0.0.0.0表示绑定到所有可用的网络接口。

  • skip-name-resolve: 禁用DNS解析,提高性能。

  • max_connections=2048: 允许的最大连接数。

  • default-storage-engine=INNODB: 默认的存储引擎。

  • max_allowed_packet=16M: 允许的最大数据包大小。

  • server-id = 1: 为服务器指定唯一ID,通常用于主从复制。

  • sql_mode: SQL模式设置,包括一系列启用或禁用特定SQL语法规则的选项。

生成镜像

docker build -t mysql:lnmp .

docker images

启动镜像容器

docker run --name=mysql --privileged --device-write-bps /dev/sda:10M -v /usr/local/mysql --net mynetwork --ip 172.20.0.20 -d mysql:lnmp

这是一个用于在Docker中运行MySQL容器的命令。以下是对该命令的解析:

  • docker run: 启动一个新的Docker容器。

  • --name=mysql: 为容器指定一个名称,这里是"mysql"。

  • --privileged: 赋予容器全部的Linux Capabilities,这样容器内的进程就拥有了更高的权限。

  • --device-write-bps /dev/sda:10M: 限制指定设备(此处是/dev/sda)的写入速率为10兆字节/秒。

  • -v /usr/local/mysql: 将宿主机的/usr/local/mysql目录挂载到容器中,实现数据持久化。

  • --net mynetwork: 将容器连接到名为"mynetwork"的Docker网络。

  • --ip 172.20.0.20: 为容器分配指定的IP地址,这里是172.20.0.20。

  • -d: 以后台模式运行容器。

  • mysql:lnmp: 使用"mysql:lnmp"镜像创建容器。

验证mysql

docker exec -it mysql bash

这是一个用于在运行中的MySQL容器中执行交互式bash shell的Docker命令。以下是对该命令的解析:

  • docker exec: 在运行中的容器中执行命令。

  • -it: 同时分配一个伪终端(pseudo-TTY)并保持标准输入打开,使得用户可以与容器的Shell进行交互。

  • mysql: 这是容器的名称或ID,表示在哪个容器中执行命令。

  • bash: 要在容器中执行的命令,这里是启动bash shell。

此命令的目的是进入MySQL容器的Shell,允许用户在容器内执行各种命令,例如配置、管理数据库等。在这个Shell中,你可以执行各种MySQL相关的操作。请确保容器正在运行,并已经使用此名称("mysql")启动。

systemctl status mysqld
#查看MySQL服务状态

PHP部分

建立工作目录

mkdir /opt/php
cd /opt/php
#传入php安装包php-7.1.10.tar.bz2到/opt/php

编写 Dockerfile 脚本

vim 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.bz2 /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

这是一个Dockerfile文件,用于构建一个基于CentOS 7的PHP镜像。以下是对每个步骤的解析:

  • FROM centos:7: 使用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: 安装一系列依赖包,然后创建一个不可登录的用户 "nginx"。

  • ADD php-7.1.10.tar.bz2 /usr/local/src/: 将PHP源代码解压到 /usr/local/src/ 目录下。

  • WORKDIR /usr/local/src/php-7.1.10: 设置工作目录为PHP源代码目录。

  • 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: 配置、编译和安装PHP。指定了一系列选项和模块,包括MySQL支持、zlib、curl、GD图形库等。

  • ENV PATH /usr/local/php/bin:/usr/local/php/sbin:$PATH: 设置环境变量,将PHP可执行文件路径添加到系统PATH中。

  • ADD php.ini /usr/local/php/lib/: 添加自定义的php.ini配置文件。

  • ADD php-fpm.conf /usr/local/php/etc/: 添加自定义的php-fpm配置文件。

  • ADD www.conf /usr/local/php/etc/php-fpm.d/: 添加自定义的php-fpm池配置文件。

  • EXPOSE 9000: 暴露PHP-FPM的监听端口。

  • CMD /usr/local/php/sbin/php-fpm -F: 设置容器启动时执行的默认命令,启动PHP-FPM服务。 -F 选项使PHP-FPM在前台运行。

准备 php.ini、php-fpm.conf、www.conf 配置文件

vim php.ini

#939行,取消注释,修改
date.timezone = Asia/Shanghai
#1170行,修改
mysqli.default_socket = /usr/local/mysql/mysql.sock
vim php-fpm.conf 

#17行,删除注释符号“;”
pid = run/php-fpm.pid
vim www.conf 

#23、24行,修改用户和组
user = nginx
group = nginx
#36行,修改监听IP和端口为容器IP:9000端口
listen = 172.20.0.30:9000
#62行,修改允许客户端的IP地址列表
listen.allowed_clients = 127.0.0.1,172.20.0.10

生成镜像

docker build -t php:lnmp .

docker images

启动镜像容器

docker run --name php --net mynetwork --ip 172.20.0.30 -p 9000:9000 --volumes-from nginx --volumes-from mysql -itd php:lnmp

docker ps

验证 php

docker exec -it php bash
ps -aux

  • docker exec -it php bash: 这个命令使用 exec 在运行的Docker容器中执行命令。 -it 选项表示交互式执行,并使用 bash 进入容器的命令行终端。

  • 一旦你进入了容器的命令行终端,然后执行 ps -aux 命令:这个命令用于显示当前正在运行的进程列表,以及它们的详细信息。

启动 wordpress 服务

mysql 授权

#进入mysql容器
docker exec -it mysql bash
#初始密码为空,直接回车
mysql -u root -p
create database wordpress;
grant all privileges on wordpress.* to 'wordpress'@'%' identified by '123456';
grant all privileges on *.* to 'root'@'%' identified by '123456';
 flush privileges;

上述代码是在MySQL数据库中创建一个名为"wordpress"的数据库,并授予了两个用户不同的权限。

  • create database wordpress;: 创建一个名为"wordpress"的数据库。

  • grant all privileges on wordpress.* to 'wordpress'@'%' identified by '123456';: 授予了一个名为"wordpress"的用户对"wordpress"数据库的所有权限,并设置了密码为'123456'。这个用户可以从任何主机('%'表示所有主机)连接到数据库。

  • grant all privileges on *.* to 'root'@'%' identified by '123456';: 授予了一个名为"root"的用户对所有数据库的所有权限,并设置了密码为'123456'。同样,这个用户可以从任何主机连接到数据库。

  • flush privileges;: 刷新权限,使更改生效。

浏览器测试访问

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/321434.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C语言基础内容(七)——第07章_结构体与共同体

文章目录 第07章_结构体与共用体本章专题脉络1、结构体(struct)类型的基本使用1.1 为什么需要结构体?1.2 结构体的理解1.3 声明结构体1.4 声明结构体变量并调用成员1.5 举例1.6 小 结2、进一步认识结构体2.1 结构体嵌套2.2 结构体占用空间2.3 结构体变量的赋值操作3、结构体数…

JDK8-JDK17版本升级

局部变量类型推断 switch表达式 文本块 Records 记录Records是添加到 Java 14 的一项新功能。它允许你创建用于存储数据的类。它类似于 POJO 类&#xff0c;但代码少得多&#xff1b;大多数开发人员使用 Lombok 生成 POJO 类&#xff0c;但是有了记录&#xff0c;你就不需要使…

保卫战小游戏

欢迎来到程序小院 保卫战 玩法&#xff1a;当鬼子进入射击范围内点击鼠标左键射击&#xff0c;不要让鬼子越过炮台哦&#xff0c;快去杀鬼子去吧^^。开始游戏https://www.ormcc.com/play/gameStart/249 html <div style"position: relative;" id"gameDiv&q…

K 个一组翻转链表(链表反转,固定长度反转)(困难)

优质博文&#xff1a;IT-BLOG-CN 一、题目 给你链表的头节点head&#xff0c;每k个节点一组进行翻转&#xff0c;请你返回修改后的链表。 k是一个正整数&#xff0c;它的值小于或等于链表的长度。如果节点总数不是k的整数倍&#xff0c;那么请将最后剩余的节点保持原有顺序。…

Spring Boot - Application Events 的发布顺序_ApplicationContextInitializedEvent

文章目录 Pre概述Code源码分析 Pre Spring Boot - Application Events 的发布顺序_ApplicationEnvironmentPreparedEvent Spring Boot - Application Events 的发布顺序_ApplicationEnvironmentPreparedEvent 概述 Spring Boot 的广播机制是基于观察者模式实现的&#xff0c…

Spring Boot - 利用Resilience4j-RateLimiter进行流量控制和服务降级

文章目录 Resilience4j概述Resilience4j官方地址Resilience4j-RateLimiter微服务演示Payment processorPOM配置文件ServiceController Payment servicePOMModelServiceRestConfigController配置验证 探究 Rate Limiting请求三次 &#xff0c;观察等待15秒连续访问6次 Resilienc…

安装nodejs出现问题

Error: EPERM: operation not permitted, mkdir… 全局安装express模块进行测试时&#xff1a; npm install express -g出现&#xff1a; 表示nodejs的安装目录无权限&#xff0c;根据错误日志的信息&#xff0c;定位到安装目录下&#xff1a; 点击属性&#xff1a; 点击编…

优先级队列(Priority Queue)

文章目录 优先级队列&#xff08;Priority Queue&#xff09;实现方式基于数组实现基于堆实现方法实现offer(E value)poll()peek()isEmpty()isFull() 优先级队列的实现细节 优先级队列&#xff08;Priority Queue&#xff09; 优先级队列是一种特殊的队列&#xff0c;其中的元素…

Jsqlparser简单学习

文章目录 学习链接模块访问者模式parser模块statement模块Expression模块deparser模块 测试TestDropTestSelectTestSelectVisitor 学习链接 java设计模式&#xff1a;访问者模式 github使用示例参考 测试 JSqlParser使用示例 JSqlParse&#xff08;一&#xff09;基本增删改…

第02章_变量与运算符拓展练习

文章目录 第02章_变量与运算符拓展练习1、辨别标识符2、数据类型转换简答3、判断如下代码的运行结果(难)4、判断如下程序的运行结果5、判断如下程序的运行结果6、Java的基本数据类型有哪些&#xff1f;String是基本数据类型吗&#xff1f;7、语法判断8、char型变量中是否可以存…

LeeCode前端算法基础100题(20)找出字符串中第一个匹配项的下标

一、问题详情: 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。 示例 1: 输入:haystack = "sadbutsad", needle = "s…

【现代密码学】笔记 补充7-- CCA安全与认证加密《introduction to modern cryphtography》

【现代密码学】笔记7-- CCA安全与认证加密《introduction to modern cryphtography》 写在最前面7 CCA安全与认证加密 写在最前面 主要在 哈工大密码学课程 张宇老师课件 的基础上学习记录笔记。 内容补充&#xff1a;骆婷老师的PPT 《introduction to modern cryphtography》…

鸿蒙应用开发学习:让page页面强制横屏

一、学习做了个适合横屏的页面但进入页面后是竖屏显示的 前几天在B站上跟着 黑马程序员的 HarmonyOS4.0开发应用教学视频学习了显式动画&#xff08;animateTo&#xff09;和属性动画&#xff08;animation&#xff09;功能&#xff0c;并参照教学视频的内容做了个小鱼动画。…

助力工业园区作业违规行为检测预警,基于YOLOv7【tiny/l/x】不同系列参数模型开发构建工业园区场景下作业人员违规行为检测识别系统

在很多工业园区生产作业场景下保障合规合法进行作业生产操作&#xff0c;对于保护工人生命安全降低安全隐患有着非常重要的作用&#xff0c;但是往往在实际的作业生产中&#xff0c;因为一个安全观念的淡薄或者是粗心大意&#xff0c;对于纪律约束等意思薄弱&#xff0c;导致在…

绝地求生:【PC】第27赛季第2轮更新公告

各位玩家大家好&#xff01;欢迎收看本期闲游盒更新公告。 正式服维护时间 ※ 下列时间可能会根据维护情况而发生变化。 1月10日上午8:00 – 下午4:30 地图轮换 ※ 地图轮换将于每周三上午10点进行。 ※ 在随机选择地图的地区中&#xff0c;第1周可选择荣都地图&#xff0c…

UML-通信图和交互概览图(通信图和顺序图的区别与联系)

UML-通信图和交互概览图&#xff08;通信图和顺序图的区别与联系&#xff09; 一、通信图简介1.消息2.链接 二、通信图和[顺序图](https://blog.csdn.net/weixin_65032328/article/details/135587782)的联系与区别三、交互概览图四、顺序图转化为通信图练习 一、通信图简介 通…

CSC8021_computer network_The Transport Layer

Role of the transport layer • The transport layer is responsible for providing a reliable end-to-end connection between two application processes in a network • Abstracting away the physical subnet • Does not involve intermediate nodes • Takes a netwo…

2024--Django平台开发-Redis集群(十一)

内容回顾 主从复制。 哨兵&#xff1a;实例启动了&#xff0c;哨兵节点没启动&#xff0c;Python通过redis-py连接报错。一定要确保实例节点和哨兵节点都启动了。 搭建集群用的是虚拟机的多台centos服务器&#xff0c;你在跟着学习的时候&#xff0c;一定要全部都是虚拟机&am…

MySQL面试题2

文章目录 面试题 (9-15) 面试题 (9-15) 09&#xff09;查询学过「张三」老师授课的同学的信息 SELECT s.*,c.cname,t.tname FROM t_mysql_teacher t,t_mysql_student s,t_mysql_course c,t_mysql_score sc WHERE t.tidc.tid and c.cidsc.cid and sc.sids.sid and tname ‘张…

EI级 | Matlab实现VMD-TCN-BiLSTM变分模态分解结合时间卷积双向长短期记忆神经网络多变量光伏功率时间序列预测

EI级 | Matlab实现VMD-TCN-BiLSTM变分模态分解结合时间卷积双向长短期记忆神经网络多变量光伏功率时间序列预测 目录 EI级 | Matlab实现VMD-TCN-BiLSTM变分模态分解结合时间卷积双向长短期记忆神经网络多变量光伏功率时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基…