使用docker-compose搭建lnmpr环境

news2024/11/15 15:41:25

源码gitee

compose 使用的三个步骤:

• 使用 Dockerfile 定义应用程序的环境。
• 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
• 最后,执行 docker-compose up -d 命令来启动并运行整个应用程序。

这里说明一下:mysql 待续,php redis扩展待续

下面先展示如下存在的目录及文件结构

在这里插入图片描述

docker-compose.yml 文件内容

version: "1.0"
services:
  redis:
     image: redis5.0.12:v1
     container_name: lnmp_redis
     build:
      context: ./redis
      dockerfile: Dockerfile
     volumes:
      - ./redis/conf:/etc/redis
      - ./redis/logs:/usr/local/redis/logs
      - ./redis/data:/usr/local/redis/data
     environment:
      - TZ=Asia/Shanghai
     ports:
      - "6379:7379"
     networks:
      - backend
  php: 
    image: php8:v1
    container_name: lnmp_php8
    build: 
     context: ./php
     dockerfile: Dockerfile
    depends_on:
     - "redis"
    volumes:
     - ./php/project:/data/wwwroot/project
     - ./php/logs:/usr/local/php/logs
    environment:
     - TZ=Asia/Shanghai
    ports:
     - "9000:9000"
    networks:
     - frontend
     - backend
  nginx:
    image: nginx1.22:v1
    container_name: lnmp_nginx
    build:
      context: ./nginx
      dockerfile: Dockerfile
    depends_on:
      - "php"
    volumes:
      - ./nginx/html:/data/wwwroot/html
      - ./nginx/nginx.conf:/usr/local/nginx/conf/nginx.conf
    environment:
      - TZ=Asia/Shanghai
    ports:
      - "80:80"
      - "443:443"
    networks:
      - frontend
networks:
  frontend:
  backend:

nginx中Dockerfile文件内容

# 拉取 CentOS
FROM centos:7.8.2003

# 作者信息
MAINTAINER "LuNan"


# 下载相关依赖
RUN yum update -y \
  && yum install -y vim git wget gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop 

# 创建用户
RUN useradd www


# 设置 nginx 版本
ENV NGINX_VERSION 1.22.0

# 下载安装及编译
RUN wget http://nginx.org/download/nginx-1.22.0.tar.gz \
  && tar -zxf nginx-$NGINX_VERSION.tar.gz \
     && cd nginx-$NGINX_VERSION \
     && ./configure  --prefix=/usr/local/nginx  --with-http_sub_module --with-http_ssl_module && make && make install
     


# 配置

RUN mkdir -p /data/wwwroot/html

COPY ./nginx.conf /usr/local/nginx/conf/nginx.conf

COPY ./html/index.html /data/wwwroot/html


# 声明要把容器的哪些端口映射到宿主机
EXPOSE 80 433


COPY run.sh /etc/run.sh
RUN chmod +x /etc/run.sh

ENTRYPOINT ["/etc/run.sh"]

nginx中run.sh文件内容

#!/bin/bash

/usr/local/nginx/sbin/nginx -g "daemon off;" 

tail -f /dev/null

nginx中html目录下的index.html文件内容

<!DOCTYPE html>
<html>
<head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title></title>
</head>
<body>
    ceshi
    nginx镜像测试文件
</body>
</html>

php中Dockerfile文件内容

# 拉取 CentOS
FROM centos:7.8.2003
# 作者信息
MAINTAINER "LuNan"


# 下载相关依赖
RUN yum update -y \
   && yum install -y vim git wget gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop \
   libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel libcurl-devel


RUN yum install -y libwebp-devel

RUN yum install -y http://down.24kplus.com/linux/oniguruma/oniguruma-6.7.0-1.el7.x86_64.rpm \
  http://down.24kplus.com/linux/oniguruma/oniguruma-devel-6.7.0-1.el7.x86_64.rpm

# 保证nginx 和php 用户相同
RUN groupadd www && useradd -g www www


# 设置 php 版本
ENV PHP_VERSION 8.2.8
#下载及编译
RUN  cd /opt \
     && wget https://www.php.net/distributions/php-$PHP_VERSION.tar.gz --no-check-certificate \
     && tar -zxf php-$PHP_VERSION.tar.gz \
     && cd php-$PHP_VERSION \
     && ./configure  --prefix=/usr/local/php \
     --with-config-file-path=/usr/local/php/etc \
     --with-openssl \
     --enable-fpm \
     --enable-gd \
     --with-curl \
     --with-zlib \
     --with-jpeg \
     --with-webp=/usr/local/include/webp  \
     --with-freetype=/usr/local/freetype \
     --without-sqlite3 \
     --without-pdo-sqlite \
     --disable-rpath \
     --enable-mbstring \
     --enable-mysqlnd \
     --with-mysqli \
     --with-pdo-mysql \
     --with-fpm-user=www \
     --with-fpm-group=www \
   && make && make install
# 执行shell命令
RUN cp /opt/php-$PHP_VERSION/php.ini-development /usr/local/php/etc/php.ini \
   && cp  /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf \
   && cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf \
   && sed -i "90a \daemonize = no" /usr/local/php/etc/php-fpm.conf \
   && sed -i "s/127.0.0.1/0.0.0.0/" /usr/local/php/etc/php-fpm.d/www.conf \
   && mkdir -p /data/wwwroot/project


COPY ./project/index.php /data/wwwroot/project/

EXPOSE 9000
COPY run.sh /etc/run.sh
RUN chmod +x /etc/run.sh

# 启动
ENTRYPOINT ["/etc/run.sh"]

php中project目录下的index.php 文件内容

<?php
echo "ce";
echo "ceshi";
echo phpinfo();

php中run.sh 文件内容

#!/bin/bash

/usr/local/php/sbin/php-fpm 

tail -f /dev/null

redis中Dockerfile文件内容

# 拉取 CentOS
FROM centos:7.8.2003

# 维护者
MAINTAINER lunan

# 设置 Redis 版本
ENV REDIS_VERSION 5.0.12

# 下载依赖
RUN yum update -y \
  && yum install -y vim wget gcc gcc-c++ make perl tar 

# 下载包和编译
RUN  cd /opt \
  && wget http://download.redis.io/releases/redis-$REDIS_VERSION.tar.gz \
  && tar -zxf redis-$REDIS_VERSION.tar.gz \
  && cd redis-$REDIS_VERSION \
  && make && make PREFIX=/usr/local/redis install

# 相关配置
RUN  cd /opt/redis-$REDIS_VERSION \
  && mkdir -p /usr/local/redis/{logs,data} \ 
  && mkdir -p /etc/redis && chmod -R 755 /etc/redis 
  #&& chmod +x redis.conf \
  #&& mv redis.conf /etc/redis/redis.conf \
  #&& sed -i "s/bind 127.0.0.1/bind 0.0.0.0/g" /etc/redis/redis.conf \
  #&& sed -i "s/daemonize no/daemonize yes/g" /etc/redis/redis.conf 
# 复制本地文件到容器中
COPY ./conf/redis.conf /etc/redis/redis.conf

# 设置端口
EXPOSE 6379

# 脚本运行
COPY run.sh /etc/run.sh
RUN chmod +x /etc/run.sh
ENTRYPOINT ["/etc/run.sh"]

redis中conf目录下的redis.conf变更

bind 0.0.0.0
daemonize yes

redis中run.sh文件内容

#!/bin/bash

/usr/local/redis/bin/redis-server /etc/redis/redis.conf > /usr/local/redis/logs/redis.log


tail -f /dev/null

执行docker-compose 命令

docker-compose up -d

在这里插入图片描述

在这里插入图片描述

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

后续…

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

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

相关文章

Carla教程一:动力学模型到LQR

Carla教程一、动力学模型到LQR 从运动学模型和动力学模型到LQR 模型就是可以描述车辆运动规律的模型。车辆建模都是基于自行车模型的设定,也就是将四个轮子抽象为自行车一样的两个轮子来建模。 1、运动学模型 运动学模型是基于几何关系分析出来的,一般适用于低俗情况下,…

【西安交通大学】:融合传统与创新的学府之旅

【西安交通大学】&#xff1a;融合传统与创新的学府之旅 引言历史与发展学校特色学科优势院系专业校园环境与设施学生生活与社团活动校友荣誉与成就未来发展展望总结&#x1f340;小结&#x1f340; &#x1f389;博客主页&#xff1a;小智_x0___0x_ &#x1f389;欢迎关注&…

【Linux】Http协议的学习

文章目录 前言一、了解HTTP协议是如何规定的总结 前言 HTTP协议&#xff08;超文本传输协议&#xff09;和我们上一篇写的网络版计算器中自己定制的协议一样&#xff0c;只不过Http协议是是一个非常好用的协议&#xff0c;所以我们可以直接用现成的不用自己再搞一套了。 一、了…

LeetCode Top100 Liked 题单(序号1~17)

01Two Sum - LeetCode 我自己写的代码【193ms】 因为不知道怎么加cmp函数&#xff0c;就只能pair的first设为值了&#xff0c;但其实这也是瞎做&#xff0c;应该也是O(n&#xff09;吧 class Solution { public:vector<int> twoSum(vector<int>& nums, int …

【观察】智能运维的“下半场”,看云智慧如何“开新局”

毫无疑问&#xff0c;随着数字化转型的加速&#xff0c;越来越多的企业正在把数字化战略提升到一个全新的高度&#xff0c;转型的进程也正从“浅层次”的数字化走向“深层次”的数字化。 也正因此&#xff0c;过去传统的人工运维方式越来越“捉襟见肘”&#xff0c;谋求运维模…

飞桨paddlespeech语音唤醒推理C定点实现

前面的文章&#xff08;飞桨paddlespeech语音唤醒推理C浮点实现&#xff09;讲了飞桨paddlespeech语音唤醒推理的C浮点实现。但是嵌入式设备通常CPU频率低和memory小&#xff0c;在嵌入式设备上要想流畅的运行语音唤醒功能&#xff0c;通常用的是定点实现。于是我就在浮点实现&…

【redis】通过配置文件简述redis的rdb和aof

redis的持久化方式有2种&#xff0c;rdb&#xff0c;即通过快照的方式将全量数据以二进制记录在磁盘中&#xff0c;aof&#xff0c;仅追加文件&#xff0c;将增量的写命令追加在aof文件中。在恢复的时候&#xff0c;rdb要更快&#xff0c;但是会丢失一部分数据。aof丢失数据极少…

HTML快速学习

目录 一、网页元素属性 1.全局属性 2.标签 2.1其他标签 2.2表单标签 2.3图像标签 2.4列表标签 2.5表格标签 2.6文本标签 二、编码 1.字符的数字表示法 2.字符的实体表示法 三、实践一下 一、网页元素属性 1.全局属性 id属性是元素在网页内的唯一标识符。 class…

207. 课程表 Python

文章目录 一、题目描述示例 1示例 2 二、代码三、解题思路 一、题目描述 你这个学期必须选修 numCourses 门课程&#xff0c;记为 0 到 numCourses - 1 。 在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出&#xff0c;其中 prerequisites[i] [ai, …

入门Linux基本指令(2)

这篇文章主要提供一些对文件操作的Linux基本指令&#xff0c;希望对大家有所帮助&#xff0c;三连支持&#xff01; 目录 cp指令(复制) mv指令(剪切) nano指令 cat指令(打印文件内容) > 输出重定向 >> 追加重定向 < 输入重定向 more指令 less指令(推荐) …

影刀下载,插件安装

1、下载 在影刀官网下载&#xff1a;www.yingdao.com 2、谷歌插件安装 参考&#xff1a; 影刀插件安装各种方式 浏览器安装插件说明 - 影刀帮助中心 安装说明&#xff1a;驱动外置 Chrome 需要安装插件&#xff0c;并且保证此插件处于开启状态 方式一&#xff1a;用户头…

利用sklearn 实现线性回归、非线性回归

代码&#xff1a; import pandas as pd import numpy as np import matplotlib import random from matplotlib import pyplot as plt from sklearn.preprocessing import PolynomialFeatures from sklearn.linear_model import LinearRegression# 创建虚拟数据 x np.array(r…

nacos安装与基础配置

源码 https://github.com/alibaba/nacos https://gitee.com/mirrors/Nacos 编译 git clone https://github.com/alibaba/nacos.git cd nacos/ mvn -Prelease-nacos -Dmaven.test.skiptrue clean install -U ls -al distribution/target/// change the $version to your ac…

24考研数据结构-队列1

目录 3.2队列&#xff08;Queue&#xff09;3.2.1队列的基本概念3.2.2队列的顺序存储结构3.2.2.1 队列存储的基本操作3.2.2.2 循环队列 基本操作和判空方式 \color{Red}{基本操作和判空方式} 基本操作和判空方式3.2.2.3 知识回顾 3.2队列&#xff08;Queue&#xff09; 3.2.1队…

解读RSAC 2021丨灵魂拷问:你的网络够“皮实”吗?

美国时间5月20日&#xff0c;RSA大会落下帷幕。大会虽已结束&#xff0c;讨论还在继续。对于大会的主题“Resilience”&#xff0c;每个厂商、每个人都有自己的解读。 山石网科新技术研究院全程关注RSA大会&#xff0c;对于“Resilience”&#xff0c;他们的解读简单易懂接地气…

Java面向对象 - 常用类——Object类

什么是Object类 Java中有一个比较特殊的类&#xff0c;就是 Object类&#xff0c;它是所有类的父类&#xff0c;如果一个类没有使用extends关键字明确标识继承另外一个类&#xff0c;那么这个类就默认继承 Object类。因此&#xff0c;Object 类是 Java 类层中的最高层类&#x…

【C语言进阶篇】指针都学完了吧!那回调函数的应用我不允许还有人不会!

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《C语言初阶篇》 《C语言进阶篇》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 &#x1f4cb; 前言&#x1f4ac; 函数指针数组&#x1f4ad; 函数指针数组的定义&#x1f4ad; 函数指针数组的…

Android性能优化之游戏引擎初始化ANR

近期&#xff0c;着手对bugly上的anr 处理&#xff0c;记录下优化的方向。 借用网上的一张图&#xff1a; 这里的anr 问题是属于主线程的call 耗时操作。需要使用trace 来获取发生anr前一些列的耗时方法调用时间&#xff0c;再次梳理业务&#xff0c;才可能解决。 问题1 ja…

Java Servlet实现下拉选择查询(双表)和单列模式

0目录 1.Servlet实现下拉选择查询&#xff08;双表&#xff09; 2.单列模式 1.Servlet实现下拉选择查询&#xff08;双表&#xff09; 新建数据库和表 实体类 接口方法 实现接方法 Servlet类 Web.xml List.jsp 页面效果 加入功能 2.单列模…

批发零售进销存哪个好?盘点5款主流批发零售进销存软件!

在我看来&#xff0c;几乎没有批发零售行业不需要做进销存管理&#xff0c;哪怕是路边一个小摊贩&#xff0c;也需要做进销存管理&#xff0c;但是传统的进销存过程中存在很多问题&#xff1a; 前后方协作困难&#xff1a;采购/销售/财务工作相互独立&#xff0c;工作入口不一…