使用docker搭建LNMP架构

这篇具有很好参考价值的文章主要介绍了使用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。

Nginx 容器

  • 容器名称: Docker-Nginx

  • 操作系统: CentOS 7

  • IP 地址: 172.20.0.10

  • 主要软件: Nginx

MySQL 容器

  • 容器名称: Docker-Mysql

  • 操作系统: CentOS 7

  • IP 地址: 172.20.0.20

  • 主要软件: MySQL

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 的镜像。以下是对每个部分的简要解释:

  • FROM centos:7: 基础镜像是 CentOS 7。

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

  • 安装依赖和创建 Nginx 用户:

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

使用docker搭建LNMP架构,云,docker,架构,容器,云原生,云计算,运维

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

  • 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 守护进程。

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

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

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

使用docker搭建LNMP架构,云,docker,架构,容器,云原生,云计算,运维

使用docker搭建LNMP架构,云,docker,架构,容器,云原生,云计算,运维

创建自定义网络

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

使用docker搭建LNMP架构,云,docker,架构,容器,云原生,云计算,运维

#检查
docker network ls
ifconfig docker1

使用docker搭建LNMP架构,云,docker,架构,容器,云原生,云计算,运维

使用docker搭建LNMP架构,云,docker,架构,容器,云原生,云计算,运维

启动镜像容器

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

使用docker搭建LNMP架构,云,docker,架构,容器,云原生,云计算,运维

这是一个用于在 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搭建LNMP架构,云,docker,架构,容器,云原生,云计算,运维

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

使用docker搭建LNMP架构,云,docker,架构,容器,云原生,云计算,运维

这部分输出是关于 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 

使用docker搭建LNMP架构,云,docker,架构,容器,云原生,云计算,运维

这个 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 的镜像。以下是对每个部分的简要解释:

  • FROM centos:7: 基础镜像是 CentOS 7。
  • MAINTAINER: 指定镜像的维护者信息。
  • 安装依赖和创建 MySQL 用户:
RUN yum -y install ncurses ncurses-devel bison cmake pcre-devel zlib-devel gcc gcc-c++ make; \
    useradd -M -s /sbin/nologin mysql
  • 添加 MySQL 源码文件并设置工作目录:
ADD mysql-boost-5.7.20.tar.gz /usr/local/src/
WORKDIR /usr/local/src/mysql-5.7.20/
  • 使用 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
  • 添加 MySQL 配置文件 my.cnf:
ADD my.cnf /etc/my.cnf
  • 暴露 MySQL 默认端口 3306:
EXPOSE 3306
  • 修改文件和目录权限:
RUN chown -R mysql:mysql /usr/local/mysql/; \
    chown mysql:mysql /etc/my.cnf
  • 设置工作目录并初始化 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
  • 设置环境变量 PATH 和定义数据卷:
ENV PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
VOLUME [ "/usr/local/mysql" ]
  • 设置启动命令为 /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搭建LNMP架构,云,docker,架构,容器,云原生,云计算,运维

docker images

使用docker搭建LNMP架构,云,docker,架构,容器,云原生,云计算,运维

启动镜像容器

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搭建LNMP架构,云,docker,架构,容器,云原生,云计算,运维

这是一个用于在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服务状态

使用docker搭建LNMP架构,云,docker,架构,容器,云原生,云计算,运维

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搭建LNMP架构,云,docker,架构,容器,云原生,云计算,运维

docker images

使用docker搭建LNMP架构,云,docker,架构,容器,云原生,云计算,运维

启动镜像容器

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

使用docker搭建LNMP架构,云,docker,架构,容器,云原生,云计算,运维

docker ps

使用docker搭建LNMP架构,云,docker,架构,容器,云原生,云计算,运维

验证 php

docker exec -it php bash
ps -aux

使用docker搭建LNMP架构,云,docker,架构,容器,云原生,云计算,运维

  • 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文章来源地址https://www.toymoban.com/news/detail-801394.html

到了这里,关于使用docker搭建LNMP架构的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用docker搭建LNMP开发环境

    系统:ubuntu 18.04 docker版本:18.03.1-ce docker的安装请自行参考官方文档。 这篇文章用于介绍如何使用docker在ubuntu系统上搭建一个LNMP开发环境,下面我们将会编写Dockerfile,基于官方docker hub镜像,分别构建我们自己的镜像,然后运行。要构建的镜像有: PHP-FPM 7.4 Nginx 1.19 MySQL 5.

    2023年04月13日
    浏览(38)
  • 【云原生 • Docker】docker 环境搭建、docker 与容器常用指令大全

    目录 一、Docker 环境搭建 1. 准备工作(已有 Linux 环境可省略) 2. 安装 Docker 3. 设置 ustc 镜像 二、Docker/容器操作命令汇总 1. Docker 操作命令 2. 镜像相关命令 3. 查看容器 4. 创建容器 5. 停止与启动容器 6. 文件挂载 7. 目录挂载 8. 查看容器 IP 地址 9. 删除容器 1. 准备工作(已有

    2024年01月16日
    浏览(65)
  • 云计算基础架构平台搭建与运维实训内容

    目标: 1.基础设施环境搭建; 【使用vmware workstation pro安装centos 命令行虚拟机】 【使用mobaxterm连接centos虚拟机】 【在centos中安装docker】 2.容器化部署实例; 【安装portainer,用于管理docker容器】 【在portainer里,采用容器技术,搭建nginx服务器】 【在portainer里,采用容器技术,

    2024年02月04日
    浏览(43)
  • 【云计算•云原生】3.一小时熟练掌握docker容器

    docker是一个开源的应用容器引擎 ,可以让开发人员把编写好的代码和运行代码所需要的环境打包进一个容器里,通过移植容器可以避免多次搭建环境以及代码在一台机器上可以运行而到了另一台机器上因环境问题报错。 区分镜像和容器 用户基于镜像来运行容器,可以把镜像

    2024年02月06日
    浏览(42)
  • M2芯片Mac电脑使用docker搭建lnmp环境

    本人是用的电脑是苹果的M2芯片的Mac Pro,系统版本是12.4。 之前本机安装过docker,不过只安装了nginx和php两个镜像,目前想新增mysql镜像 PS:目前m2芯片不支持mysql5.7的镜像,只支持mysql8 1.之前不知道m2不支持mysql5.7,找了一个mysql5.7的镜像,放到了docker-compose.yml文件中 结果通过 doc

    2024年02月13日
    浏览(59)
  • 【运维知识大神篇】运维人必学的Docker教程1(Docker安装部署+Docker镜像管理+容器管理常用命令+搭建docker的本地yum源+windows系统安装docker环境)

    本篇文章开始给大家介绍Docker,这个是我非常喜欢的一个服务,介绍给大家,希望大家也能喜欢! 目录 何为容器 Docker环境安装部署 一、yum安装(CentOS7.9) 二、rpm包安装(CentOS) 三、卸载docker环境 四、安装指定的docker版本 五、Ubuntu安装docker环境 六、使用deb安装docker 七、

    2024年01月18日
    浏览(104)
  • [云原生案例1.] 构建LNMP架构并运行Wordpress个人博客平台

    需要使用Docker 技术在一台主机上 创建LNMP服务并运行Wordpress网站平台 。 然后对此服务进行相关的 性能调优 和 管理工作 主机 操作系统 IP地址 主要软件 宿主机 CentOS 7.3 x86_64 192.168.67.100 Docker 19.03 Nginx容器 172.18.0.10 Mysql容器 172.18.0.20 PHP容器 172.18.0.30 容器IP:172.18.0.10 3.2.1 创建

    2024年02月07日
    浏览(37)
  • 云原生Docker容器中的OpenCV:轻松构建可移植的计算机视觉环境

    构建可移植的计算机视觉环境 计算机视觉是一门涉及图像和视频处理的领域,可以应用于目标检测、图像识别、人脸识别等各种任务。 不同的开发环境、操作系统和硬件配置可能导致部署和运行计算机视觉应用的困难。 目的和重要性: Docker容器提供了一种轻量级、可移植、

    2024年04月11日
    浏览(35)
  • LNMP架构搭建实操

    目录 一、安装Nginx服务 1.安装依赖包 2.创建Nginx运行用户 3.编译安装Nginx源码包 4.优化路径便于使用 5、添加 Nginx 系统服务 二、安装Mysql服务 1.安装Mysql环境依赖包 2.创建Mysql运行用户 3.编译安装 4.修改mysql配置文件 5.更改mysql安装目录和配置文件的属主属组 6.设置路径环境变量

    2024年02月11日
    浏览(39)
  • 容器和云原生(三):kubernetes搭建与使用

            目录 单机K8S docker containerd image依赖 kubeadm初始化 验证 crictl工具 K8S核心组件 上文安装单机docker是很简单docker,但是生产环境需要多个主机,主机上启动多个docker容器,相同容器会绑定形成1个服务service,微服务场景中多个service会互相调用,那么就需要保证多个servi

    2024年02月11日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包