Dockerfile 创建镜像,构建LNMP+wordpress架构

目录

一、Dockerfile 构建镜像

1.Dockerfile 构建 nginx镜像

1.1创建 nginx Dockerfile 目录

1.2编写 Dockerfile 文件

1.3构建nginx镜像

2.Dockerfile 构建 mysql 镜像

2.1创建 mysql Dockerfile 目录

2.2修改mysql配置文件

2.3编写 Dockerfile 文件

2.4构建mysql镜像

3.Dockerfile 构建 php 镜像

3.1创建 php Dockerfile 目录

3.2编写 Dockerfile 文件

3.3调整PHP配置文件

3.4构建php镜像

二、基于镜像创建容器

1.自定义网络 

2.创建容器

3.创建wordpress数据库

4.验证

三、部署 wordpress

一、Dockerfile 构建镜像

1.Dockerfile 构建 nginx镜像

1.1创建 nginx Dockerfile 目录

mkdir /opt/nginx
cd /opt/nginx
将源码包nginx-1.24.0.tar.gz上传到该目录

1.2编写 Dockerfile 文件

vim Dockerfile#指定基础镜像文件
FROM centos:7
#ADD:将nginx压缩包复制到镜像中并且解压到/opt目录下
ADD nginx-1.24.0.tar.gz /opt
#RUN:在镜像中执行的命令。使用 && 将多条命令合并为1条,减少镜像大小
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make && \
cd /opt/nginx-1.24.0 && \
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module && make && make install && \
yum clean all
#清除缓存,减少镜像大小的方法之一。#多级构建镜像,FROM指定第二级基础镜像
FROM centos:7
#from=0:指定第一级镜像。将第一级镜像中的/usr/local/nginx 复制到当前阶段的/usr/local/nginx
COPY --from=0 /usr/local/nginx /usr/local/nginx
RUN useradd -M -s /sbin/nologin nginx
#暴露nginx的80号端口
EXPOSE 80
#指定nginx的启动命令
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]

 注:

  1. dockerfile 中的每个 FROM、RUN、COPY 命令都会创建一个单独的层,并增加镜像的整体大小和构建时间。
  2. 要减小 docker 镜像大小,请在单个 RUN 或 COPY 指令中执行多个命令来最小化 Dockerfile 中的层数。
  3. Multi-stage build(多级构建镜像) 即在一个 Dockerfile 中使用多个 FROM 指令。 每个 FROM 指令可以使用不同的基础镜像,并且每一个都开启新的构建阶段。 你可以有选择地拷贝一个阶段的产品到另一个中,留下不想包含在最终 image 中的东西。

1.3构建nginx镜像

#自定义镜像名称,这里我设置的为 nginx:centos7
docker build -t nginx:centos7 .#构建完成后,查看镜像
docker images

2.Dockerfile 构建 mysql 镜像

2.1创建 mysql Dockerfile 目录

mkdir /opt/mysql
cd /opt/mysql
将mysql-boost-5.7.20.tar.gz上传到目录下#查看系统可用内存,最好大于15G
df -TH 

2.2修改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 = 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

2.3编写 Dockerfile 文件

vim DockerfileFROM centos:7
ADD mysql-boost-5.7.20.tar.gz /opt/
#安装依赖包并编译安装
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make ncurses ncurses-devel bison cmake
RUN cd /opt/mysql-5.7.20/ && \
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 -j2 && make installFROM centos:7
#将一级镜像中的/usr/local/mysql/保留下来
COPY --from=0 /usr/local/mysql/ /usr/local/mysql/
#mysql配置文件复制到镜像中
COPY my.cnf /etc/my.cnf
#设置镜像的环境变量
ENV PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
#创建mysql用户
RUN useradd -M -s /sbin/nologin  mysql && \
#修改/usr/local/mysql/和/etc/my.cnf的权限
chown -R mysql:mysql /usr/local/mysql/ && \
chown mysql:mysql /etc/my.cnf && \
#初始化mysql数据库
/usr/local/mysql/bin/mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
#暴露mysql的端口号
EXPOSE 3306
#设置mysql启动命令
CMD ["/usr/local/mysql/bin/mysqld"]

2.4构建mysql镜像

docker build -t mysql:centos7 .docker images

3.Dockerfile 构建 php 镜像

3.1创建 php Dockerfile 目录

mkdir /opt/php
cd /opt/php
上传php-7.1.10.tar.bz2压缩包

3.2编写 Dockerfile 文件

vim Dockerfile
#设置一级镜像的别名为 first
FROM centos:7 AS first
ADD php-7.1.10.tar.bz2 /opt
RUN yum -y install gcc gcc-c++ make gd \
libjpeg libjpeg-devel \
libpng libpng-devel \
freetype freetype-devel \
libxml2 libxml2-devel \
zlib zlib-devel \
curl curl-devel \
openssl openssl-devel && \
cd /opt/php-7.1.10 && \
./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 && make install
COPY php.ini /usr/local/php/lib/php.ini
COPY php-fpm.conf /usr/local/php/etc/php-fpm.conf
COPY www.conf /usr/local/php/etc/php-fpm.d/www.confFROM centos:7
#--from=first:指定一级镜像
COPY --from=first /usr/local/php /usr/local/php
RUN useradd -M -s /sbin/nologin php && yum -y install gd libjpeg-devel libpng-devel freetype-devel libxml2-devel zlib-devel curl-devel openssl-devel
EXPOSE 9000
CMD ["/usr/local/php/sbin/php-fpm","-F"]

3.3调整PHP配置文件

cd /opt/php
准备php有三个配置文件: 
php.ini			主配置文件  
php-fpm.conf	进程服务配置文件 
www.conf		扩展配置文件#调整主配置文件:	
vim php.ini
--1170行--修改
mysqli.default_socket = /usr/local/mysql/mysql.sock
--939行--取消注释,修改
date.timezone = Asia/Shanghai#调整进程服务配置文件:
vim php-fpm.conf
--17行--去掉";"注释
pid = run/php-fpm.pid#调整扩展配置文件:
vim www.conf
--23,24行--修改用户和组
user = php
group = php
--36行--取消注释,修改
listen = 172.18.0.30:9000
--62行--取消注释,修改
listen.allowed_clients = 172.18.0.10

3.4构建php镜像

docker build -t mysql:centos7 .docker images

二、基于镜像创建容器

1.自定义网络 

#创建自定义网络
docker network create --subnet=172.18.0.0/16  --opt "com.docker.network.bridge.name"="docker1"  mylnmp#查看自定义网络
docker network ls

2.创建容器

#创建nginx容器
docker run -d --name nginx --network=mylnmp --ip=172.18.0.10 -p 80:80 -v /opt/nginx/www:/usr/local/nginx/html nginx:centos7#创建mysql容器
docker run -d --name mysql --network=mylnmp --privileged --ip 172.18.0.20 -p 3306:3306 -v /usr/local/mysql mysql:centos7#创建php容器
docker run -d --name php -p 9000:9000 --network=mylnmp --ip 172.18.0.30 --volumes-from nginx --volumes-from mysql php:centos7

3.创建wordpress数据库

#进入mysql容器
docker exec -it mysql bashmysqladmin -u root password "123456"
mysql -u root -p123456
CREATE DATABASE wordpress;
GRANT all ON wordpress.* TO 'admin'@'%' IDENTIFIED BY '123456';
GRANT all ON wordpress.* TO 'admin'@'localhost' IDENTIFIED BY '123456';
flush privileges;

4.验证

cd /opt/nginx/www
#验证php
vim index.php
<?php
phpinfo();
?>#验证mysql
vim index.php      		#替换原来的测试页内容
<?php
$link=mysqli_connect('192.168.88.10','admin','123456');
if($link) echo "<h1>Success!!</h1>";
else echo "Fail!!";
?>

三、部署 wordpress

cd /opt
上传 wordpress-4.9.4-zh_CN.tar.gztar xf wordpress-4.9.4-zh_CN.tar.gz -C /opt/nginx/www网页访问 http://192.168.88.10/wordpress/index.php

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

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

相关文章

[论文笔记] LLM数据集——金融数据集

一、chatglm_金融 ModelScope 魔搭社区 请将modelscope sdk升级到v1.7.2rc0&#xff0c;执行&#xff1a; ​ pip3 install "modelscope1.7.2rc0" -f https://modelscope.oss-cn-beijing.aliyuncs.com/releases/repo.html # 方式1 git clone http://www.modelscope…

Cesium态势标绘专题-圆角矩形(标绘+编辑)

标绘专题介绍:态势标绘专题介绍_总要学点什么的博客-CSDN博客 入口文件:Cesium态势标绘专题-入口_总要学点什么的博客-CSDN博客 辅助文件:Cesium态势标绘专题-辅助文件_总要学点什么的博客-CSDN博客 本专题没有废话,只有代码,代码中涉及到的引入文件方法,从上面三个链…

[RabbitMQ] RabbitMQ简单概述,用法和交换机模型

MQ概述&#xff1a; Message Queue(消息队列)&#xff0c;实在消息的传输过程中保存消息的容器&#xff0c;都用于分布式系统之间进行通信 分布式系统通信的两种方式&#xff1a;直接远程调用 和 借助第三昂 完成间接通信 发送方称谓生产者&#xff0c;接收方称为消费者 MQ优…

JMeter基础入门教程之CSV数据文件设置CSV Data Set Config

最近在做压力测试&#xff0c;登录功能用到了配置元件&#xff1a;CSV 数据文件设置&#xff0c;可以将登录用户名和密码放在一个csv文件中&#xff0c;然后通过CSV数据文件设置元件读取出来&#xff0c;用来做压测。 一、CSV文件 CSV文件小知识分享&#xff1a;是指"逗号…

POC CPU 单核性能基准测试 Linux bash 下的简单测试用例 bc计算兀

指令 time echo "scale5000;4*a(1)" | bc -l -q 通过耗时简单评估CPU单核性能 测试环境一 yeqiangyeqiang-MS-7B23:/opt/cpu2006$ cat /etc/os-release PRETTY_NAME"Ubuntu 22.04.2 LTS" NAME"Ubuntu" VERSION_ID"22.04" VERSION&…

leetcode 620. 有趣的电影

# Write your MySQL query statement below select * from Cinema where id%21 and description !boring order by rating descid%21是筛选奇数的条件description !‘boring’ 是筛选不无聊的条件order by rating desc 按评分由大到小排序

Ubuntu 下安装软件,卸载,查看已经安装的软件

参考网址&#xff1a;http://wiki.ubuntu.org.cn/UbuntuSkills 一般的安装程序用三种&#xff1a; .deb 和.rpm 这两种安装文件 .bundle 这是二进制的安装文件  而 tar.gz 这类的只是压缩包&#xff08;相当于 .rar,.zip 压缩包一样&#xff09;,如果此类文件是程序的话&a…

BP神经网络数据分类——语音特征信号分类(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 BP神经网络是一种常见的人工神经网络&#xff0c;用于数据分类和回归等任务。在语音特征信号分类中&#xff0c;BP神经网络可…

qt画图大卫三角形电力

直接上code void paintEvent(QPaintEvent *event) {Q_UNUSED(event); QPainter painter(this); QRect rect0 = QRect(0,0,500,500);painter.drawRect(rect0);QRect rectB = QRect(-1,-1,501,501);painter.drawRect(rectB);//画三角形QLine line1 = QLine(QPoint(250.0f,80.0f),…

Android11 相机拍照权限,以及解决resolveActivity返回null

一、配置拍照和读写权限 <uses-permission android:name"android.permission.CAMERA"/> <uses-feature android:name"android.hardware.camera" /><uses-permission android:name"android.permission.WRITE_EXTERNAL_STORAGE"/&…

通过RPM方式安装,升级,卸载,以及配置使用MySQL

通过RPM方式安装&#xff0c;升级&#xff0c;卸载&#xff0c;以及配置使用MySQL 一、下载 MySQL是一种开源的关系数据库管理系统&#xff0c;被广泛应用于各种业务应用中。本文将讲解如何下载和安装MySQL的rpm安装包。下载rmp安装包有多种方式&#xff1a; 1、可以到MySQL的…

嵌入式C常用关键字解析

1、static关键字的作用 修饰局部变量 作用域&#xff1a;无变化 生命周期&#xff1a;函数--->程序&#xff08;数据段&#xff09; 特点&#xff1a;只初始化一次 修饰全局变量 作用域&#xff1a;整个工程----->本模块 生命周期&#xff1a;无变化 修饰函数 作…

【C++初阶】 priority_queue(优先级队列)

⭐博客主页&#xff1a;️CS semi主页 ⭐欢迎关注&#xff1a;点赞收藏留言 ⭐系列专栏&#xff1a;C初阶 ⭐代码仓库&#xff1a;C初阶 家人们更新不易&#xff0c;你们的点赞和关注对我而言十分重要&#xff0c;友友们麻烦多多点赞&#xff0b;关注&#xff0c;你们的支持是我…

python简单入门

python简单入门 文章目录 python简单入门0. 地址链接1. 官网2.2. 下载地址3. 官方文档 1. 第一章1.1 python解释器1.2 基础语法1.2.1 常见数据类型1.2.2 强制类型转换1.2.3 注释1.2.4 运算符1.2.5 字符串1.2.5.1 字符串的定义1.2.5.2 字符串拼接1.2.5.3 格式化字符串1.2.5.3 精…

vue指令-插值表达式

vue指令-插值表达式 1、什么是插值表达式2、Vue变量声明在哪里 1、什么是插值表达式 双大括号&#xff0c;可以把vue数据变量直接显示在标签内 2、Vue变量声明在哪里 data函数返回对象上&#xff0c;用key属性声明 示例&#xff1a; <template><div id"app&…

【防火墙】iptables防火墙(二)

1.写在命令行的备份和还原 2.把我们的规则配置在服务的文件当中&#xff0c;形成永久生效 iptables-save > /opt/ky30.bak iptables-restore < /opt/ky30.bak cat /etc/sysconfig/iptables 永久生效的配置文件 自定义链&#xff1a; 1.创建自定义链&#xff1a; i…

正则表达式 —— Sed

Sed Sed 类似于vim就是一个文本编辑器&#xff0c;按行来进行编辑和排序 Sed的原理&#xff1a;读取&#xff0c;执行&#xff0c;显示 读取&#xff1a;读取文本内容之后&#xff0c;读取到的内容存放到临时的缓冲区—模式空间 执行&#xff1a;在模式空间&#xff0c;根据…

第二天 kali代理配置

文章目录 环境一、虚拟机网络模式&#xff08;1&#xff09;NAT&#xff08;2&#xff09;NAT模式&#xff08;3&#xff09;桥接模式&#xff08;4&#xff09;仅主机模式&#xff08;5&#xff09;总结 二、配置代理&#xff08;桥接模式&#xff09;1、基础设置2、虚拟机浏览…

记录安装stable diffusion webui时,出现的gfpgan安装卡住的问题

参考链接&#xff1a;(145条消息) 使用stable diffusion webui时&#xff0c;安装gfpgan失败的解决方案&#xff08;windows下的操作&#xff09;_新时代原始人的博客-CSDN博客

【el-tree查询并高亮】vue使用el-tree组件,搜索展开并选中对应节点,高亮搜索的关键字,过滤后高亮关键字,两种方法

第一种&#xff08;直接展开并高亮关键字&#xff09; 效果图这样的&#xff0c;会把所有的有这些关键字的节点都展开 代码&#xff1a; 这里的逻辑就是通过递归循环把所有和关键字匹配的节点筛选出来 然后通过setCheckedKeys方法把他展开选中 然后通过filterReal把关键字高亮…