当前位置: 首页 > news >正文

【Docker实战】基于Dockerfile搭建LNMP+wordpress

一、项目背景和要求

公司在实际的生产环境中,需要使用Docker 技术在一台主机上创建LNMP服务并运行Wordpress网站平台。

然后对此服务进行相关的性能调优和管理工作

二、架构:

nginx172.111.0.10docker-nginx
mysql172.111.0.20docker-mysql
PHP172.111.0.30docker-PHP

三、部署过程

#关闭防火墙和selinux
systemctl stop firewalld 
systemctl disable firewalld
setenforce 0

1、创建自定义网络:

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

2、部署nginx

基于Dockerfile创建nginx镜像:
容器ip:172.111.0.10

cd /opt
mkdir nginx mysql php
cd nginx

将nginx的安装包放到nginx目录中
在这里插入图片描述
在这里插入图片描述

vim nginx.conf
创建nginx.conf文件,后续要将nginx.conf文件COPY到容器中

worker_processes  1;
events {worker_connections  1024;
}
http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;server {listen       80;server_name  localhost;charset utf-8;location / {root   html;index  index.html index.php;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}location ~ \.php$ {root           html;fastcgi_pass   172.111.0.30:9000;fastcgi_index  index.php;fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;include        fastcgi_params;}
}
}

在这里插入图片描述

nginx Dockerfile:

FROM centos:7
RUN yum -y install gcc pcre-devel openssl-devel zlib-devel openssl openssl-devel
ADD nginx-1.22.0.tar.gz /usr/local/src/
RUN useradd -M -s /sbin/nologin nginx
WORKDIR /usr/local/src/nginx-1.22.0
RUN ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module && make -j 4 && make install
ENV PATH /usr/local/nginx/sbin:$PATH
COPY nginx.conf /usr/local/nginx/conf/
ADD wordpress-6.4.2-zh_CN.tar.gz /usr/local/nginx/html
RUN chmod -R 777 /usr/local/nginx/html
EXPOSE 80
VOLUME ["/usr/local/nginx/html/"]
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]

在这里插入图片描述

创建nginx容器:

docker build -t nginx:lnmp .

启动nginx容器:

docker run -itd --name nginx1 -p 80:80 -v /opt/nginx:/opt/nginxlogs --net mynetwork --ip 172.111.0.10 nginx:lnmp

检测:
20.0.0.51:80
在这里插入图片描述

3、部署mysql

基于Dockerfile创建mysql镜像:
在这里插入图片描述

cd /opt/mysql
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
general_log=ON
general_log_file=/usr/local/mysql/data/mysql_general.logsql_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 Dockerfile:

FROM centos:7
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 -j 4 && make install
COPY 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"]
ENTRYPOINT ["/usr/sbin/init"]

在这里插入图片描述

创建mysql镜像:

docker build -t mysql:lnmp .

创建mysql容器:

docker run -itd --name mysql -p 3306:3306 --privileged -v /opt/mysql1:/opt/mysql --net mynetwork --ip 172.111.0.20 mysql:lnmp

进入容器给权限:
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;

在这里插入图片描述

4、部署php

基于Dockerfile创建php镜像:
在这里插入图片描述

phpDockerfile:

FROM centos:7
RUN yum -y install 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
COPY php.ini /usr/local/php/lib
COPY php-fpm.conf /usr/local/php/etc/
COPY www.conf /usr/local/php/etc/php-fpm.d/
EXPOSE 9000
ENTRYPOINT ["/usr/local/php/sbin/php-fpm","-F"]

在这里插入图片描述

构建镜像

docker build -t php:lnmp .

创建容器:

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

docker exec -it php bash

在这里插入图片描述
在这里插入图片描述

5、网页构建wordpress论坛:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

http://www.lryc.cn/news/260460.html

相关文章:

  • 【桌面应用开发】Tauri是什么?基于Rust的桌面应用
  • PHP的协程是什么?
  • three.js 入门三:buffergeometry贴图属性(position、index和uvs)
  • Initial用法-FPGA入门3
  • perl脚本中使用eval函数执行可能有异常的操作
  • 『Redis』在Docker中快速部署Redis并进行数据持久化挂载
  • ubuntu创建apt-mirror本地仓库
  • 计算机网络 internet应用 (水
  • 【ChatGLM3】第三代大语言模型多GPU部署指南
  • 云原生Kubernetes系列 | Docker/Kubernetes的卷管理
  • Java实现快速排序算法
  • MAC配置环境变量
  • 系列五、DQL
  • 【智能家居】七、人脸识别 翔云平台编程使用(编译openSSL支持libcurl的https访问、安装SSL依赖库openSSL)
  • 基于node 安装express后端脚手架
  • Mrdoc知识文档
  • C语言中getchar函数
  • 全栈开发组合
  • wpf TelerikUI使用DragDropManager
  • Python+Appium自动化测试之元素等待方法与重新封装元素定位方法
  • 详解Maven如何打包SpringBoot工程
  • PyQt6 QFrame分割线控件
  • PostgreSql 序列
  • 【深度学习目标检测】六、基于深度学习的路标识别(python,目标检测,yolov8)
  • Vue3上传图片和删除图片
  • 华为配置VRRP负载分担示例
  • 【Python】按升序排列 Excel 工作表
  • 定时器TIM HAL库+cubeMX(上)
  • 我常用的几个经典Python模块
  • 课堂练习4.4:页式虚存