【docker】基于dockerfile编写LNMP

目录

一、基础环境准备

二、部署nginx(容器IP为172.18.0.10) 

1、整个Dockerfile文件内容

 2、配置nginx.conf文件

 3、构建镜像

​编辑 三、部署mysql

1、整个Docker文件内容

2、准备my.conf文件 

 3、生成镜像

 4、启动镜像容器

 5、验证mysql

 四、PHP部署

1、整个Dockerfile文件内容

2、配置需要上传的文件

 3、生成镜像

 3、启动镜像容器

 4、验证php

 五、启动wordpress服务

1、登录到mysql容器中,授权

 2、网页访问:http://192.168.40.20/wordpress/wp-admin/setup-config.php

一、基础环境准备

容器系统IP地址软件
nginxcentos7.5172.18.0.10wordpress-6.0.2-zh_CN.tar.gz、nginx-1.12.2.tar.gz
mysqlcentos7.5172.18.0.20mysql-boost-5.7.25.tar.g
phpcentos7.5172.18.0.30php-7.1.24.tar.gz
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
#关闭防火墙和核心防护

docker pull centos:7
#从docker Hub公共仓库下载基础镜像

docker network create --subnet=172.18.0.0/16 --opt "com.docker.network.bridge.name"="docker1" mynetwork
#设置自定义网络模式,模式为bridge模式,docker1的ip地址为172.18.0.1,显示的网络名称mynetwork。

docker network ls
#查看使用的网络模式

ifconfig

二、部署nginx(容器IP为172.18.0.10) 

1、整个Dockerfile文件内容

mkdir /opt/nginx
cd /opt/nginx
#此目录上传nginx包

vim Dockerfile
#编写dockerfile文件

FROM centos:7
#指定基础镜像

MAINTAINER ydq
#指定维护者信息
 
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make
#安装依赖包,安装环境

RUN useradd -M -s /sbin/nologin nginx
#创建nginx用户
 
ADD nginx-1.12.2.tar.gz /opt
#将本地安装包上传到指定目录(自动解压)
 
WORKDIR /opt/nginx-1.12.2
#进入到/opt/nginx-1.12.2目录中
 
RUN ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module && make && make install
#开始编译安装,加上&&符号,只有前面执行完成,后面才会执行
 
ENV PATH=/usr/local/nginx/sbin:$PATH
#将nginx执行命令放入到环境变量中

ADD nginx.conf /usr/local/nginx/conf/nginx.conf
#在宿主机写好配置文件,然就将配置文件复制到容器中

ADD wordpress-6.0.2-zh_CN.tar.gz /usr/local/nginx/html
#上传论坛的包

RUN chmod 777 -R /usr/local/nginx/html
#给html文件所有权限

EXPOSE 80
#开放80端口

VOLUME ["/usr/local/nginx/html/"]
#挂载目录(相当于将/usr/local/nginx/html目录共享,会在宿主机上自动生成共享目录,主要目的是为了让容器之间共享这个文件)

CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]
#执行启动nginx命令,并且关闭nginx的后台启动,因为需要它占用前台,让docker不关闭。

 2、配置nginx.conf文件

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$ {         #当访问以.php结尾的URL时,会连接到172.18.0.30的ip地址上
            root           html;
            fastcgi_pass   172.18.0.30:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;
            include        fastcgi_params;
        }
    }
}

 3、构建镜像

在构建镜像前,确保一下文件压缩包都在

docker build -t nginx:lnmp .
#构建nginx镜像(别忘记最后的点)

docker images
#查看镜像

docker run -d --name nginx -p 80:80 -m 500m --memory-swap 1g --net mynetwork --ip 172.18.0.10 nginx:lnmp
#启动容器
----------------------------
-m 500: #表示该容器内存最大为500MB
--memory-swap: #表示内存+swap总共1G,那swap也是500MB
//相当于是限制了内存的使用量,避免所占资源太多

----------------------
docker ps -a 
#查看容器

curl 192.168.40.20

 三、部署mysql

1、整个Docker文件内容

mkdir /opt/mysql
cd /opt/mysql
#上传mysql包到此目录下

vim Dockerfile

FROM centos:7
#基础镜像

MAINTAINER ydq
#维护人信息

RUN yum -y install ncurses ncurses-devel bison cmake pcre-devel zlib-devel gcc gcc-c++ make
#安装环境

RUN useradd -M -s /sbin/nologin mysql
#创建mysql用户

ADD mysql-boost-5.7.25.tar.gz /opt
#将mysql安装包上传(自带boost)

WORKDIR /opt/mysql-5.7.25
#切换到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
#编译安装


EXPOSE 3306
#开放端口

RUN chown -R mysql:mysql /usr/local/mysql/;chown mysql:mysql /etc/my.cnf
#设置权限

ENV PATH /usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
#设置环境变量

WORKDIR /usr/local/mysql/bin
#切换目录

RUN ./mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
#初始化mysql

RUN cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
#复制mysql服务程序到启动文件中
    
VOLUME ["/usr/local/mysql"]
#设置共享目录

CMD ["/usr/sbin/init"]
#启动容器之后,可以使用systemctl工具(并且占用前台,保持容器不断)

 

2、准备my.conf文件 

vim /opt/my.cnf

[client]									
port = 3306
default-character-set=utf8
socket=/usr/local/mysql/mysql.sock	

[mysql]									
port = 3306
default-character-set=utf8
socket=/usr/local/mysql/mysql.sock
auto-rehash

[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

 3、生成镜像

docker build -t mysql:lnmp .
#生成镜像

docker images
#查看镜像

 4、启动镜像容器

docker run --name mysql -d --privileged --device-write-bps /dev/sda:10M -v /usr/local/mysql --net mynetwork --ip 172.18.0.20 mysql:lnmp
#生成容器
-----------------------------------------
--privileged: #让容器内拥有root权限
--device-write-bps: #限制写入到/dev/sda中每秒最大10M的速度。
-v /usr/local/mysql: #共享这个目录,其它容器可以使用--volumes-from 指定读取本容器的共享目录。然后也会生成一样的目录。
--net mynetwork: #指定--net网络模式,mynetwork为自定义网络模式。
--ip 172.18.0.20: #指定ip地址,自定义网络模式也可以指定ip地址。
-----------------------------------------
docker ps -a
#查看容器

 5、验证mysql

docker exec -it mysql bash
#登录该容器

systemctl status mysqld
#查看mysql状态

 四、PHP部署

1、整个Dockerfile文件内容

mkdir /opt/php
cd /opt/php
#将php包上传到该目录

vim Dockerfile
FROM centos:7

MAINTAINER ydq3

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.24.tar.gz /opt
#上传php包到/opt目录下

WORKDIR /opt/php-7.1.24
#进入到指定目录

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
#启动一个进程,占用前台。

2、配置需要上传的文件

①配置php.ini文件

vim /opt/php/php.ini

[PHP]
engine = On
short_open_tag = Off
precision = 14
output_buffering = 4096
zlib.output_compression = Off
implicit_flush = Off
unserialize_callback_func =
serialize_precision = -1
disable_functions =
disable_classes =
zend.enable_gc = On
expose_php = On
max_execution_time = 30
max_input_time = 60
memory_limit = 128M
error_reporting = E_ALL
display_errors = On
display_startup_errors = On
log_errors = On
log_errors_max_len = 1024
ignore_repeated_errors = Off
ignore_repeated_source = Off
report_memleaks = On
track_errors = On
html_errors = On
variables_order = "GPCS"
request_order = "GP"
register_argc_argv = Off
auto_globals_jit = On
post_max_size = 8M
auto_prepend_file =
auto_append_file =
default_mimetype = "text/html"
default_charset = "UTF-8"
doc_root =
user_dir =
enable_dl = Off
file_uploads = On
upload_max_filesize = 2M
max_file_uploads = 20
allow_url_fopen = On
allow_url_include = Off
default_socket_timeout = 60
[CLI Server]
cli_server.color = On
[Date]
date.timezone = Asia/Shanghai
[filter]
[iconv]
[intl]
[sqlite3]
[Pcre]
[Pdo]
[Pdo_mysql]
pdo_mysql.cache_size = 2000
pdo_mysql.default_socket=
[Phar]
[mail function]
SMTP = localhost
smtp_port = 25
mail.add_x_header = On
[SQL]
sql.safe_mode = Off
[ODBC]
odbc.allow_persistent = On
odbc.check_persistent = On
odbc.max_persistent = -1
odbc.max_links = -1
odbc.defaultlrl = 4096
odbc.defaultbinmode = 1
[Interbase]
ibase.allow_persistent = 1
ibase.max_persistent = -1
ibase.max_links = -1
ibase.timestampformat = "%Y-%m-%d %H:%M:%S"
ibase.dateformat = "%Y-%m-%d"
ibase.timeformat = "%H:%M:%S"
[MySQLi]
mysqli.max_persistent = -1
mysqli.allow_persistent = On
mysqli.max_links = -1
mysqli.cache_size = 2000
mysqli.default_port = 3306
mysqli.default_socket = /usr/local/mysql/mysql.sock
mysqli.default_host =
mysqli.default_user =
mysqli.default_pw =
mysqli.reconnect = Off
[mysqlnd]
mysqlnd.collect_statistics = On
mysqlnd.collect_memory_statistics = On
[OCI8]
[PostgreSQL]
pgsql.allow_persistent = On
pgsql.auto_reset_persistent = Off
pgsql.max_persistent = -1
pgsql.max_links = -1
pgsql.ignore_notice = 0
pgsql.log_notice = 0
[bcmath]
bcmath.scale = 0
[browscap]
[Session]
session.save_handler = files
session.use_strict_mode = 0
session.use_cookies = 1
session.use_only_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly =
session.serialize_handler = php
session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 1440
session.referer_check =
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
session.sid_length = 26
session.trans_sid_tags = "a=href,area=href,frame=src,form="
session.sid_bits_per_character = 5
[Assertion]
zend.assertions = 1
[COM]
[mbstring]
[gd]
[exif]
[Tidy]
tidy.clean_output = Off
[soap]
soap.wsdl_cache_enabled=1
soap.wsdl_cache_dir="/tmp"
soap.wsdl_cache_ttl=86400
soap.wsdl_cache_limit = 5
[sysvshm]
[ldap]
ldap.max_links = -1
[mcrypt]
[dba]
[opcache]
[curl]
[openssl]

②配置php-fpm.conf文件

vim /opt/php/php-fpm.conf

[global]
pid = run/php-fpm.pid
include=/usr/local/php/etc/php-fpm.d/*.conf

 ③配置www.conf文件

vim /opt/php/www.conf

[www]
user = nginx
group = nginx
listen = 172.18.0.30:9000
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

 3、生成镜像

docker build -t php:lnmp .
#构建镜像

docker images
#查看

 3、启动镜像容器

docker run -itd --name php --net mynetwork --ip 172.18.0.30 -p 9000:9000 --volumes-from nginx --volumes-from mysql php:lnmp
#启动容器
-----------------------------------------------
--volumes-from nginx:  #表示读取nginx容器的共享信息
--volumes-from mysql:  #表示读取mysql容器的共享信息
-----------------------------------------------

docker ps -a
#查看容器

 4、验证php

docker exec -it php bash
#登录该容器

ps -aux
#查看进程

 五、启动wordpress服务

1、登录到mysql容器中,授权

docker exec -it mysql bash
#登录到mysql容器

mysql 
#登录到容器中

create database wordpress;
#创建一个数据库

grant all privileges on wordpress.* to 'wordpress'@'%' identified by 'abc123';

grant all privileges on *.* to 'root'@'%' identified by 'abc123';

flush privileges;

 2、网页访问:http://192.168.40.20/wordpress/wp-admin/setup-config.php

 

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

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

相关文章

身为一个后端程序员如何快速制作后端管理系统的UI

前言 我的专业领域在后端开发上,前端我仅仅是熟悉,但是要从头开发一个前端UI界面有点难为人了。那么身为一个后端程序员我们怎么来开发后端管理系统UI界面呢? 方案1:现成的模版来套(有一定的前端基础,只是…

Wireshark数据抓包分析之UDP协议

一、实验目的: 通过使用wireshark对UDP数据包的抓取分析UDP协议的内容 二、预备知识: UDP协议的概念:UDP使用底层的互联网协议来传送报文,同IP一样提供不可靠的无连接传输服务。它也不提供报文到达确认、排序及流量控制等功能。 …

PDF校对:追求文档的精准与完美

随着数字化时代的到来,PDF已经成为了多数机构和个人首选的文件格式,原因在于它的稳定性、跨平台特性以及统一的显示效果。但是,对于任何需要公开或正式发布的文档,确保其内容的准确性是至关重要的,这就是PDF校对显得尤…

Elasticsearch简介及安装

🍓 简介:java系列技术分享(👉持续更新中…🔥) 🍓 初衷:一起学习、一起进步、坚持不懈 🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏 🍓 希望这篇文章对你有所帮助,欢…

大数据(一)定义、特性

大数据(一)定义、特性 本文目录: 一、写在前面的话 二、大数据定义 三、大数据特性 3.1、大数据的大量 (Volume) 特性 3.2、大数据的高速(Velocity)特性 3.3、大数据的多样化 (Variety) 特性 3.4、大数据的价值 (value) 特性 3.5、大…

Kali Linux 2023.3 发布

Offective Security 发布了 Kali Linux 2023.3,这是其渗透测试和数字取证平台的最新版本。 Kali Linux 2023.3 中的新工具 除了对当前工具的更新之外,新版本的 Kali 通常还会引入新的工具。 这次,他们是: Calico – 云原生网络…

java八股文面试[数据结构]——Map有哪些子类

知识来源: 【23版面试突击】 用过哪些Map类,都有什么区别,HashMap是线程安全的吗?_哔哩哔哩_bilibili https://www.cnblogs.com/bubbleboom/p/12694013.html

【前端】深入解析CSS:选择器、显示模式、背景属性和特征剖析

目录 一、前言二、CSS的复合选择器1、后代选择器①、语法②、注意事项 2、子选择器①、语法②、注意事项 3、并集选择器①、语法②、注意事项 4、链接伪类选择器①、语法②、注意事项 三、CSS元素显示模式转换1、转换为块元素display:block2、转换为行内元素display:inline3、转…

QT6安装完成后,再安装低版本的MinGW或其他组件方式

首先进入点击安装的uinstall Qt 并不是真的卸载 通过下面几步 1,首先登录自己账户 2,然后进入欢迎中,点击“添加和移除组件” 3,然后检索自己需要的安装内容

SD-WebUI和ComfyUI的局域网访问设置!

如何通过局域网访问AI绘画软件,这是星球成员提的一个问题,而且两个软件都问到了,我也回答过了。现在把内容整理一下发出来,大家可能用得着。 SD-WebUI和ComfyUI这两个AI绘画工具都是通过浏览器来使用,但是默认情况下并…

MySQL每日一练--销售管理系统

一,创建数据库SaleSys 二,在数据库SaleSys中创建3张表 品牌信息表(brand) BrandId --品牌编号,整型,自动增长,主键BrandName --品牌名称,字符型, 唯一约束 商品表…

RTSP/Onvif视频服务器EasyNVR安防视频云服务平台出现崩溃并重启的情况解决方案

EasyNVR安防视频云服务平台的特点是基于RTSP/Onvif协议将前端设备统一接入,在平台进行转码、直播、处理及分发,在安防监控场景中,EasyNVR可实现实时监控、云端录像、云存储、告警、级联等视频能力,极大满足行业的视频监控需求。 有…

mysql 8.0 窗口函数 之 序号函数 与 sql server 序号函数 一样

sql server 序号函数 序号函数 ROW_NUMBER() 顺序排序RANK() 并列排序,会跳过重复的序号,比如序号为1,1,3DENSE_RANK() 并列排序,不会跳过重复的序号,比如 序号为 1,1,2 语法结构…

《Zookeeper》源码分析(二十)之 Follower

目录 Follower创建Follower实例followLeader()findLeader()connectToLeader()registerWithLeader()syncWithLeader() FollowerZooKeeperServer Follower Leader选举结束后,成为Follower的服务器开始进行Follower的工作,过程如下: 与Leader…

汉诺塔问题--夏令营

题目 tips: 1.本题只用多试几次,由数据推导规律即可 2.汉诺塔问题分析 这里的递归函数是(n,a,b,c)指n个盘子从a移到c,且凭借b 递归边界是n1 原始思想:要想把n个盘子从a移到c,若n1则直接move a到c n>…

【LUBAN】【功能验证】至简投屏功能之Android有线连接方式测试

1、概述 至简投屏功能之Android有线连接方式支持至简自带应用至加的投屏功能和谷歌官方的Android auto功能。 支持的功能范围列举如下: 1、屏幕投屏(支持自动旋转屏)2、音视频播放(抖音、百度地图等)3、车机反控手机…

vue中使用echarts三维的项目

需要安装 echarts 同时引入 echarts-gl 我安装的版本: "echarts": "^5.3.2", "echarts-gl": "^2.0.9", 效果 : 安装后main.js引入 import Vue from "vue"; import * as echarts from "echart…

车联网技术介绍

上图是目前车联网架构图,基于“云-管-端”的车联网系统架构以支持车联网应用的实现, “云”是指 V2X 基础平台、高基于精度定位平台等基础能力,可实现车辆动态厘米级定位,这将满足现阶段以及未来车联网应用场景的定位精度需求。 “…

滑动验证组件---设置movable-view组件的x属性在微信小程序端失效的问题

场景 采用uniapp的movable-view组件实现滑动验证组件。 流程 滑块未滑到最右端时,回弹到原点滑块滑到最右端时,则显示滑动结束,不可再滑动 问题 频繁设置uniapp的movable-view组件的x属性,在H5端正常,但在微信小程…

Linux —— 进程间通信(System V)

目录 一,共享内存 申请共享内存 shmget 控制共享内存 shmctl 关联共享内存 shmat / 去联共享内存 shmdt 二,消息队列 创建或打开消息队列 msgget 发送消息 msgsnd / 接收消息 msgrcv 控制消息 msgctl 三,信号量 创建或打开信号量 s…