使用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.rhkb.cn/news/238145.html

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

相关文章

AWS云用户创建

问题 需要给工友创建AWS云的用户&#xff0c;这里假设使用分配给自己AWS开发者IAM账号&#xff0c;给别人创建aws IAM账号。 登录系统 打开页面&#xff1a;https://xxx.signin.aws.amazon.com/console&#xff0c;使用分配的开发者账号登录。如下图&#xff1a; 创建用户…

嵌入式(六)模数转换ADC | ADC 工作模式 寄存器 轮询和中断方式

文章目录 1 CC2530的ADC模块2 ADC工作模式3 ADC相关寄存器3.1数据寄存器3.2 控制寄存器 4 ADC初始化配置5 ADC使用方式5.1 轮询方式5.2 中断方式 模拟/数字转换 (Analog to Digital Converter&#xff0c;简称ADC) 是将输入的模拟信号转换为数字信号。 各种被测控的物理量&…

压缩编码之离散余弦变换(DCT)之不同块大小对图像质量和压缩效果的影响的python实现

原理 离散余弦变换&#xff08;DCT&#xff09;是一种在图像压缩中广泛使用的技术&#xff0c;特别是在JPEG图像格式中。 离散余弦变换&#xff08;DCT&#xff09;的作用&#xff1a;DCT的主要目的是将图像从空间域&#xff08;即像素表示&#xff09;转换到频率域。在频率域…

树莓派4B-Python-使用PCA9685控制舵机云台+跟随人脸转动

系列文章 树莓派4B-Python-控制舵机树莓派-Pico控制舵机树莓派4B-Python-使用PCA9685控制舵机云台跟随人脸转动&#xff08;本文章&#xff09; 目录 系列文章前言一、SG90s舵机是什么&#xff1f;二、PCA9685与舵机信号线的接线图三、控制SG90s云台&#xff08;也可用来测试舵…

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

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

Vue-路由-声明式导航

1. 导航链接 vue-router 提供了一个全局组件 router-link (取代 a 标签) 能跳转&#xff0c;配置 to 属性指定路径(必须) 。本质还是 a 标签 &#xff0c;to 无需 #能高亮&#xff0c;默认就会提供高亮类名&#xff0c;可以直接设置高亮样式 如&#xff1a; <div class&…

UML-顺序图

提示&#xff1a;用例图从参与者的角度出发&#xff0c;描述了系统的需求&#xff08;用例图&#xff09;&#xff1b;静态图定义系统中的类和对象间的静态关系&#xff08;类图、对象图和包图&#xff09;&#xff1b;状态机模型描述系统元素的行为和状态变化流程&#xff08;…

redis数据结构源码分析——跳表zset

文章目录 跳表的基本思想特点节点与结构跳跃表节点zskiplistNode属性 跳跃表链表属性 跳表的设计思想和优势API解析zslCreate&#xff08;创建跳跃表&#xff09;zslCreateNode&#xff08;创建节点&#xff09;zslGetRank&#xff08;查找排位&#xff09;zslDelete&#xff0…

css3 2D与3D转换

css3 2D与3D转换 前言2D变形旋转变形 rotate()transform-origin属性 缩放变形 scale()斜切变形 skew()位移变形 translate() 3D变形3D旋转 rotateX() | rotateY()perspective属性 空间移动 制作一个正方体结语 前言 网页设计不再局限于平面&#xff0c;而是充满了立体感和动态…

人工智能主流技术详解

人工智能&#xff08;Artificial Intelligence&#xff0c;简称AI&#xff09;是当今科技领域发展最迅速、最令人振奋的分支之一。本文将带您深入了解人工智能的主流技术&#xff0c;探索AI如何影响我们的生活、工作以及未来的发展。 一、什么是人工智能&#xff1f; 人工智能&…

烟火检测AI边缘计算智能分析网关V4在安防项目中的应用及特点

一、行业背景 随着社会和经济的发展&#xff0c;公共安全和私人安全的需求都在不断增长。人们需要更高效、更准确的安防手段来保障生命财产安全&#xff0c;而人工智能技术正好可以提供这种可能性&#xff0c;通过智能监控、人脸识别、行为分析等手段&#xff0c;大大提高了安防…

非线性方程求根迭代法(C++)

文章目录 问题描述算法描述不动点迭代法一维情形多维情形 牛顿迭代法单根情形重根情形 割线法抛物线法逆二次插值法 算法实现准备工作一般迭代法割线法抛物线法逆二次插值法 实例分析例1例2 迭代法是一种求解非线性方程根的方法, 它通过构造一个迭代过程, 将一个非线性方程转化…

ssm基于web办事大厅政务预约系统+vue论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本办事大厅政务预约系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据…

【MySQL】聚合函数

文章目录 聚合函数是什么&#xff1f;一、AVG和SUM函数二、MIN和MAX函数三、COUNT函数四、GROUP BY1. 基本使用2. 使用多个列分组3. GROUP BY中使用WITH ROLLUP 五、HAVING1. 基本使用2. HAVING 与 WHERE 的区别 六、SELECT的执行过程1. 查询结构2. SELECT执行顺序 综合练习 聚…

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

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

web前端算法简介之字典与哈希表

回顾 栈、队列 &#xff1a; 进、出 栈&#xff08;Stack&#xff09;&#xff1a; 栈的操作主要包括&#xff1a; 队列&#xff08;Queue&#xff09;&#xff1a; 队列的操作主要包括&#xff1a; 链表、数组 &#xff1a; 多个元素存储组成的 简述链表&#xff1a;数组&…

【Java】IDEA中的JFormDesigner使用教程

目录 1 安装 JFormDesigner 插件2 JFormDesigner 使用教程2.1 新建JFormDesigner Form时的选项2.2 JFormDesigner Form界面布局2.3 JFormDesigner 常用组件 JFormDesigner 是一款用于设计和创建图形用户界面&#xff08;GUI&#xff09;的插件&#xff0c;它允许开发者使用可视…

ZZULIOJ 1112: 进制转换(函数专题)

题目描述 输入一个十进制整数n&#xff0c;输出对应的二进制整数。常用的转换方法为“除2取余&#xff0c;倒序排列”。将一个十进制数除以2&#xff0c;得到余数和商&#xff0c;将得到的商再除以2&#xff0c;依次类推&#xff0c;直到商等于0为止&#xff0c;倒取除得的余数…

ZZULIOJ 1110: 最近共同祖先(函数专题)

题目描述 如上图所示&#xff0c;由正整数1, 2, 3, ...组成了一棵无限大的二叉树。从某一个结点到根结 点&#xff08;编号是1 的结点&#xff09;都有一条唯一的路径&#xff0c;比如从10 到根结点的路径是(10, 5, 2, 1)&#xff0c; 从4 到根结点的路径是(4, 2, 1)&#xff0…

xtu oj 1340 wave

题目描述 一个n列的网格&#xff0c;从(0,0)网格点出发&#xff0c;波形存在平波(从(x,y)到(x1,y))&#xff0c;上升波(从(x,y)到(x1,y1))&#xff0c;下降波(从(x,y)到(x1,y−1))三种波形&#xff0c;请问从(0,0)出发&#xff0c;最终到达(n,0)的不同波形有多少种&#xff1f…