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 = 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

2.3编写 Dockerfile 文件

vim Dockerfile

FROM 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 install


FROM 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.conf

FROM 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 bash

mysqladmin -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.gz

tar xf wordpress-4.9.4-zh_CN.tar.gz -C /opt/nginx/www

网页访问 http://192.168.88.10/wordpress/index.php

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT伦理挑战:人工智能的权利与责任

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

全志F1C200S嵌入式驱动开发(触摸屏驱动)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 触摸屏一般有两种,一种是电阻触摸屏,一种是电容触摸屏。前者需要自己买一颗i2c的信号读取芯片,用的比较多的是ns2009。后者自身集成了读取芯片,用的比较多的是gt911。正好之前测…

(十三)定时任务

以下内容来自 尚硅谷&#xff0c;写这一系列的文章&#xff0c;主要是为了方便后续自己的查看&#xff0c;不用带着个PDF找来找去的&#xff0c;太麻烦&#xff01; 第 13 章 定时任务 13.1 什么是定时任务 1、InfluxDB任务是一个定时执行的FLUX脚本&#xff0c;它先查询数据…

Docker啥是数据持久化?

文章目录 数据持久化数据卷相关命令创建读写数据卷创建只读数据卷数据卷共享数据卷容器实现数据卷共享nginx实现数据卷共享nfs总结 Dockerfile持久化Dockerfile方式docker run总结 数据持久化 ​ 在容器层的 UnionFS&#xff08;联合文件系统&#xff09;中对文件/目录的任何修…

SRC | 逻辑漏洞原理及实战

前言 作者简介&#xff1a;不知名白帽&#xff0c;网络安全学习者。 博客主页&#xff1a;不知名白帽_网络安全,CTF,内网渗透-CSDN博客 网络安全交流社区&#xff1a;https://bbs.csdn.net/forums/angluoanquan 目录 逻辑漏洞基础 概述 分类 URL跳转漏洞 概述 危害 漏洞…

Android:RecyclerView封装,打造列表极简加载

前言 mBinding.recycler.linear().divider().set<OrdinaryListBean> {addLayout(R.layout.layout_ordinary_item)}.setList(getList()) 如果我要说&#xff0c;除了数据和布局之外&#xff0c;以上的几行代码&#xff0c;就实现了一个列表加载&#xff0c;有老铁会相信…

Django学习笔记-表单(forms)的使用

在Django中提供了了form表单&#xff0c;可以更为简单的创建表单模板信息&#xff0c;简化html的表单。 一、网页应用程序中表单的应用 表单通常用来作为提交数据时候使用。 1.1 创建表单模板文件夹 在项目文件夹下创建一个template文件夹&#xff0c;用于存储所有的html模…

XCP详解「总目录」

目录 XCP详解「总目录」 1 概览 2 理论 3 实践 4 其他 XCP详解「总目录」 基础学习&#xff0c;慢慢补充 1 概览 2 理论 3 实践 XCP详解「3.1ASAP2新建A2L文件」 XCP详解「3.2CANape新建工程导入A2L」 XCP详解「3.3A2L信号添加和更新」 XCP详解「3.4CANape中新建A2L文…

学习 C语言第二天 :C语言数据类型和变量(下)

目录&#xff1a; 1.变量的介绍以及存储 2.算术操作符、赋值操作符、单目操作符 3.scanf和printf的介绍 1.变量的介绍以及存储 1.1.变量的创建 了解了什么是类型了&#xff0c;类型是用来创建变量的。 变量是什么呢&#xff1f;在C语言当中不经常变的量称为常量&#xff0c;经常…

Qt : day1

1.聊天界面 #include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent) {qDebug() << this->size(); //获取当前页面尺寸this->setFixedSize(500, 600); //设置固定尺寸this->setWindowTitle("聊天框"); //设置窗口…

OpenAI Code Interpreter 的开源实现:GPT Code UI

本篇文章聊聊 OpenAI Code Interpreter 的一众开源实现方案中&#xff0c;获得较多支持者&#xff0c;但暂时还比较早期的项目&#xff1a;GPT Code UI。 写在前面 这篇文章本该更早的时候发布&#xff0c;但是 LLaMA2 发布后实在心痒难忍&#xff0c;于是就拖了一阵。结合 L…

mybatisPlus入门篇

文章目录 初窥门径1.1 初识MybatisPlus1.2 MybatisPlus的特性1.3 MybatisPlus的架构模型 入门案例2.1 准备相关开发环境2.2 搭建springboot工程2.3 创建数据库2.4 引入相关依赖2.5 创建实体类2.6 集成MybatisPlus2.7 单元测试2.8 springboot日志优化 初窥门径 1.1 初识Mybatis…

【TiDB理论知识06】PD架构与作用

目录 一 PD的架构与功能 PD架构 PD作用 名词解释 路由功能 二 TSO的分配 概念 分配过程 性能问题 高可用问题 三 PD的调度原理 总流程 1 信息收集 2 生成调度 3 执行调度 四 Label的作用 Label的配置 给TiKV打标签 PD配置 一 PD的架构与功能 PD架构 PD集群…

GPT-4 模型详细教程

GPT-4&#xff08;Generative Pretrained Transformer 4&#xff09;是 OpenAI 的最新语言生成模型&#xff0c;其在各类文本生成任务中表现优秀&#xff0c;深受开发者和研究者喜爱。这篇教程将帮助你理解 GPT-4 的基本概念&#xff0c;并向你展示如何使用它来生成文本。 什么…

二叉树详解

这里写目录标题 前言树型结构(了解)树常见的概念树的表示形式&#xff08;了解&#xff09;树的应用 二叉树概念两种特殊的二叉树二叉树的性质(重要)二叉树的存储二叉树的基本操作 前言 本篇博客讲述了以下几个知识点 树的基本概念二叉树概念及特性二叉树的基本操作 树型结构…

DevExpress WPF Tree List组件,让数据可视化程度更高!(一)

DevExpress WPF Tree List组件是一个功能齐全、数据感知的TreeView-ListView混合体&#xff0c;可以把数据信息显示为REE、GRID或两者的组合&#xff0c;在数据绑定或非绑定模式下&#xff0c;具有完整的数据编辑支持。 DevExpress WPF 拥有120个控件和库&#xff0c;将帮助您…

一遍过JavaSE基础知识

文章目录 前言安装Java Development Kit (JDK)安装jdk配置开发环境验证是否安装配置成功 编写第一个Java程序hello world运行Java程序的流程 数据类型和变量数据类型变量 程序逻辑控制条件语句循环语句跳转语句 数组声明和创建数组访问数组元素数组长度遍历数组多维数组 面向对…

【亲测可用】Linux上安装Redis教程

一、下载并解压Redis 1、执行下面的命令下载redis&#xff1a; wget https://download.redis.io/releases/redis-6.2.6.tar.gz 2、解压redis&#xff1a; tar xzf redis-6.2.6.tar.gz 3、移动redis目录&#xff0c;一般都会将redis目录放置到 /usr/local/redis目录&#xff1a…

excel 生成sql技巧

"update 表名 set 字段名"&A2&" where 字段名"&B2&";"

Log4j源码解析

Log4j源码解析 主要流程 Logger logger Logger.getLogger(Main.class); 1、通过Logger.getLogger(Class clazz) 或 Logger.getLogger(String name)进入。 2、加载LogManager进jvm, 执行静态代码块执行初始化, 创建出RepositorySelector实例及LoggerRepository实例(Hierarchy…