使用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 DockerfileFROM 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.confegrep -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 = 1sql_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 DockerfileFROM 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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Puppeteer让你网页操作更简单(2)抓取数据

Puppeteer让你网页操作更简单(1)屏幕截图】 示例2 —— 让我们抓取一些数据 现在您已经了解了Headless Chrome和Puppeteer的工作原理基础知识,让我们看一个更复杂的示例,其中我们实际上可以抓取一些数据。 首先,请查看此处的Puppeteer API文档。如您所见,有大量不同的方法我…

Marin说PCB之传输线损耗---趋肤效应和导体损耗01

大家在做RF上的PCB走线或者是车载相机的上走线的时候经常会听那些硬件工程师们说你这个走线一定要保证50欧姆的阻抗匹配啊&#xff0c;还有就是记得加粗走做隔层参考。 有的公司的EE硬件同事会很贴心的把RF走线的注意事项给你备注在原理图上或者是layoutguide上&#xff0c;遇到…

php中常用的几个安全函数

1. mysql_real_escape_string() 这个函数对于在PHP中防止SQL注入攻击很有帮助&#xff0c;它对特殊的字符&#xff0c;像单引号和双引号&#xff0c;加上了“反斜杠”&#xff0c;确保用户的输入在用它去查询以前已经是安全的了。但你要注意你是在连接着数据库的情况下使用这个…

【Kafka-3.x-教程】-【二】Kafka-生产者-Producer

【Kafka-3.x-教程】专栏&#xff1a; 【Kafka-3.x-教程】-【一】Kafka 概述、Kafka 快速入门 【Kafka-3.x-教程】-【二】Kafka-生产者-Producer 【Kafka-3.x-教程】-【三】Kafka-Broker、Kafka-Kraft 【Kafka-3.x-教程】-【四】Kafka-消费者-Consumer 【Kafka-3.x-教程】-【五…

10.9.2 std::function 非OO的多态实现 Page185~187

源代码&#xff1a; #include <iostream> #include <functional> #include <list>using namespace std;//使用function模板类定义一个类型&#xff0c; //该类型要求作为T的 //函数类型是参数是string,返回值是void typedef std::function <void (std::s…

关于浏览器下载的时候出现失败,网络错误

我试过所有浏览器&#xff0c;谷歌&#xff0c;firefox,qq浏览器&#xff0c;还是edge都不好使&#xff0c; 1.看网上说是http debugger的问题&#xff0c;但是我没有找到这个服务项 2.也有说可以通过修改或设置下载路径解决 -------- 我通过下载一个叫xdm的软件&#xff…

CloudFlare平台下载的WARP一直连不上(warp无法连接)解决办法

遇到问题&#xff1a; 解决办法&#xff1a; 下载一个warp选ip的文件夹&#xff0c;选一下ip就行了。 下载链接如下&#xff1a; https://pan.kejicode.cn/d/Onedrive/WIN%E7%AB%AFwarp%E8%87%AA%E9%80%89IP(%E6%89%8B%E5%8A%A8%2B%E8%87%AA%E5%8A%A8).rar?signRqBdHIMyyhg…

代码随想录算法训练营第三十二天|122.买卖股票的最佳时机II、55. 跳跃游戏、45.跳跃游戏II

题目&#xff1a;122.买卖股票的最佳时机II 文章链接&#xff1a;代码随想录 视频链接&#xff1a;LeetCode:122.买卖股票的最佳时机|| 题目链接&#xff1a;力扣题目链接 图释&#xff1a; class Solution { public:int maxProfit(vector<int>& prices) {// 查看…

高效学习新编程语言的实践指南

学习一门新的编程语言或框架对于新手和有经验的程序员来说都是一个挑战。然而&#xff0c;通过采用一些有效的策略和方法&#xff0c;我们可以快速入门并掌握新的编程工具。本文将从新手和有编程经验两个不同的角度&#xff0c;分享一些实用的建议和技巧&#xff0c;帮助读者在…

Costco攻入山姆大本营

01 Costco深圳店开业火爆 “我今天不去Costco&#xff0c;早上还没开业&#xff0c;路上就已经堵车了&#xff0c;看来今天人很多&#xff0c;过几天再去”&#xff0c;原本计划在Costco开业当天去逛逛的张芸&#xff08;化名&#xff09;无奈只能放弃。 家住在Costco深圳店旁…

回归预测 | Python基于ISSA多策略改进麻雀优化ISSA-CNN-BiLSTM多输入单输出回归预测

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 原创改进&#xff0c; ISSA多策略改进麻雀优化ISSA-CNN-BiLSTM 多输入单输出回归 python代码 优化参数&#xff1a;filter,unints1,units2&#xff0c;学习率&#xff08;可添加&#xff09; 以下是三个主要的改进点&…

【Minio】常见问题解决思路

检查存储服务器对应的端口与应用服务器是否能够互通&#xff0c;通过ping|telnet命令检查、查看防火墙端口是否开放&#xff0c;检查防火墙端口linux系统和windows系统各有不同。检查电脑上的杀毒软件是否限制了网络端口和文件权限问题。检查minio配置信息是否正确&#xff0c;…

第三次面试总结 - 吉云集团 - 全栈开发

&#x1f9f8;欢迎来到dream_ready的博客&#xff0c;&#x1f4dc;相信您对专栏 “本人真实面经” 很感兴趣o (ˉ▽ˉ&#xff1b;) 专栏 —— 本人真实面经&#xff0c;更多真实面试经验&#xff0c;中大厂面试总结等您挖掘 目录 总结&#xff08;非详细&#xff09; 面试内…

【面试突击】并发编程、线程池面试实战

&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308; 欢迎关注公众号&#xff08;通过文章导读关注&#xff1a;【11来了】&#xff09;&#xff0c;及时收到 AI 前沿项目工具及新技术 的推送 发送 资料 可领取 深入理…

SpringBoot懒加载

什么是懒加载 懒加载是一种优化技术&#xff0c;它延迟加载或按需加载资源&#xff0c;以减少初始加载时间或提高性能。在不同的上下文中&#xff0c;懒加载有不同的应用和含义。在web开发中&#xff0c;懒加载通常指的是延迟加载图片数据。在长网页或应用中&#xff0c;如果图…

分布式链路追踪专栏,分布式链路追踪:Skywalking集群管理设计

SkyWalking 是一个开源 APM 系统&#xff0c;包括针对 Cloud Native 体系结构中的分布式系统的监视&#xff0c;跟踪&#xff0c;诊断功能。核心功能如下&#xff1a; 服务、服务实例、端点指标分析&#xff1b; 根本原因分析&#xff0c;在运行时分析代码&#xff1b; 服务拓…

【Qt】QThread moveTothread-多线程的两种实现方法

一、如何理解多线程 二、实现多线程的两种方式&#xff08;面向应用&#xff09; 2.1 继承 QThread 的类 2.2 (推荐这种方式)函数 moveTothread() 三、多线程的释放问题&#xff08;善后工作&#xff09; 多线程的两种实现方法 一、如何理解多线程二、实现多线程的两种方式&…

跟着暄桐林曦老师读《宝贵的人生建议》,重视心这颗种子

暄桐林曦老师在《见道明心的笔墨》读书课上讲到&#xff1a;人要在心这颗种子上去进化。当人的动机和果实都清静时&#xff0c;才能在内心具足里转化出更多可能性&#xff0c;进入正面的循环里。“宽以待人&#xff0c;严以律己&#xff0c;反之&#xff0c;则人人身处地狱”&a…

贯穿设计模式-装饰者模式

样例代码 涉及到的项目样例代码均可以从https://github.com/WeiXiao-Hyy/Design-Patterns.git获取 需求 旨在不改变一个对象逻辑的前提下&#xff0c;为这个对象添加其他额外的职责 在业务投放的同时&#xff0c;需要给用户发放红包或者积分&#xff0c;在不改动的投放逻辑的前…

golang实现rpc方法二:使用jsonrpc库【跨平台】

首先在golang实现rpc方法一net/rpc库中实现了RPC方法&#xff0c;但是那个方法不是跨平台的&#xff0c;没法在其他语言中调用这个实现的RPC方法&#xff0c;接下来我们可以通过jsonroc库实现跨语言的RPC方法。俩种实现方式的代码其实也是差不多的&#xff0c;大差不差&#xf…