使用docker-compose搭建lnmpr环境

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 Tair(兼容Redis),内存型 2GB
简介: 使用docker-compose搭建lnmpr环境

使用docker-compose搭建lnmpr环境

image.png

介绍

docker-compose搭建PHP8.1(含扩展)+ Nginx1.22 + MySQL8.0 + Mongo6.0 + Redis6.0 + Swoole2.0

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

Gitee地址:gitee.com/owenzhang24…

感谢

在kingsfeng的基础上添加了一些功能和插件 GitHub地址: github.com/kingsfeng/d…

软件架构

docker-compose搭建LNMP环境映射文件目录,clone到指定composer_lnmp74目录,可以一键安装

Compose 简介

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

如果你还不了解 YML 文件配置,可以先阅读 YAML 入门教程

Compose 使用的三个步骤:

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

安装教程

  1. git clone https://gitee.com/owenzhang24/docker_compose_lnmp.git lnmp
  2. cd lnmp
  3. docker-compose build
  4. docker-compose up -d

具体文件内容docker-compose.yml

version: "3.8"
# 定义四个服务nginx,php,mysql,redis
# php-fpm和php-cli可以选着1个安装,看项目,2个一起安装也可以
services:
  redis:
    image: redis:6.0
    container_name: lnmp_redis
    build: ./redis
    volumes:
      - ./redis/redis.conf/:/etc/redis.conf:ro
      - ./redis/data:/usr/local/redis/data
      - ./redis/redis.log:/usr/local/redis/redis.log
    environment:
      - TZ=Asia/Shanghai
    ports:
      - "6379:6379"
    command: [ "redis-server", "/etc/redis.conf" ]
    networks:
      - backend
  mysql:
    image: mysql:8.0
    container_name: lnmp_mysql
    volumes:
      - ./mysql/conf.d:/etc/mysql/my.cnf:ro
      - ./mysql/data:/var/lib/mysql
      - ./mysql/log:/data/mysql/logs
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - TZ=Asia/Shanghai
#    platform: linux/x86_64 #针对mac M1芯片
    ports:
      - "3306:3306"
    networks:
          - backend
  mongo:
    image: mongo:6.0
    container_name: lnmp_mongo
    volumes:
      - ./mongo/data:/data/db
      - ./mongo/log:/var/log/mongodb
    environment:
      - MONGO_INITDB_ROOT_USERNAME=owenweb
      - MONGO_INITDB_ROOT_PASSWORD=owenweb
      - TZ=Asia/Shanghai
    ports:
      - "27017:27017"
    networks:
          - backend
  php:
    image: php:8.1-fpm
    container_name: lnmp_php
    build: ./php/extension
    #防止启动php失败
    stdin_open: true
    #防止启动php失败
    tty: true
    depends_on:
      - "mysql"
      - "redis"
      - "mongo"
    volumes:
      - ./nginx/www:/var/www/html
      - ./php/log:/var/log/php
      - ./php/etc/php.ini:/usr/local/etc/php/php.ini
#      - ./php/etc/php-fpm.conf:/usr/local/etc/php-fpm.conf    # 映射配置文件
#      - ./php/etc/php-fpm.d:/usr/local/etc/php-fpm.d
    links:
      - mysql:mysql
    environment:
      - TZ=Asia/Shanghai
    ports:
      - "9000:9000"
    networks:
          - frontend
          - backend
  phpcli:
    image: php:8.1-cli
    container_name: lnmp_phpcli
    build: ./php/extension-phpcli
    #防止启动php失败
    stdin_open: true
    #防止启动php失败
    tty: true
    depends_on:
      - "mysql"
      - "redis"
      - "mongo"
    volumes:
      - ./nginx/www:/var/www/html
      - ./php/log:/var/log/php
      - ./php/etc/php.ini:/usr/local/etc/php/php.ini
    #      - ./php/etc/php-fpm.conf:/usr/local/etc/php-fpm.conf    # 映射配置文件
    #      - ./php/etc/php-fpm.d:/usr/local/etc/php-fpm.d
    links:
      - mysql:mysql
    environment:
      - TZ=Asia/Shanghai
    ports:
      - "8241:8241"
    networks:
      - frontend
      - backend
  nginx:
    image: nginx:1.22
    container_name: lnmp_nginx
    # 依赖关系 先跑php nginx必须依赖php的,所以要用depends_on
    depends_on:
      - "php"
    volumes:
      - ./nginx/ssl/:/etc/nginx/ssl/
      - ./nginx/conf:/etc/nginx/nginx/  # 主配置文件
      - ./nginx/www:/usr/share/nginx/html  # 项目目录
      - ./nginx/log:/var/log/nginx    # 日志
    links:
      - php:php
      - phpcli:phpcli
    environment:
      - TZ=Asia/Shanghai
    ports:
      - "80:80"
      - "443:443"
    networks:
          - frontend
  node:
    image: node:18.0
    container_name: lnmp_node
    volumes:
      - ./node:/node
    environment:
      - TZ=Asia/Shanghai
    ports:
       - "3000:3000"
    command: [ "tail", "-f", "/dev/null" ]
    networks:
      - backend
networks:
  frontend:
  backend:

如果安装失败了或者配置文件修改导致build失败可以执行以下步骤再进行重新build

  1. docker-compose stop

点 y 确认后删除所有containers(环境有其他containers的话谨慎执行)

  1. docker-compose rm

删除所有images(环境有其他image的话谨慎执行)

  1. docker rmi $(docker images -q)

使用说明

  1. /docker_compose_lnmp/php/extension/dockerfile  是PHP8.1的常用扩展,包括mysqli、gd、mcrypt、zip、redis、memcache、mongodb、swoole等等
  2. 在/docker_compose_lnmp/ 目录下执行安装命令



相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
17天前
|
关系型数据库 MySQL Docker
docker环境下mysql镜像启动后权限更改问题的解决
在Docker环境下运行MySQL容器时,权限问题是一个常见的困扰。通过正确设置目录和文件的权限,可以确保MySQL容器顺利启动并正常运行。本文提供了多种解决方案,包括在主机上设置正确的权限、使用Dockerfile和Docker Compose进行配置、在容器启动后手动更改权限以及使用 `init`脚本自动更改权限。根据实际情况选择合适的方法,可以有效解决MySQL容器启动后的权限问题。希望本文对您在Docker环境下运行MySQL容器有所帮助。
29 1
|
1月前
|
网络安全 虚拟化 Docker
SSH后判断当前服务器是云主机、物理机、虚拟机、docker环境
结合上述方法,您可以对当前环境进行较为准确的判断。重要的是理解每种环境的特征,并通过系统的响应进行综合分析。如果在Docker容器内,通常会有明显的环境标志和受限的资源视图;而在云主机或虚拟机上,虽然它们也可能是虚拟化的,但通常提供更接近物理机的体验,且可通过硬件标识来识别虚拟化平台。物理机则直接反映硬件真实信息,较少有虚拟化痕迹。通过这些线索,您应该能够定位到您所处的环境类型。
27 2
|
1月前
|
存储 监控 Shell
docker的底层原理二:容器运行时环境
本文深入探讨了Docker容器运行时环境的关键技术,包括命名空间、控制组、联合文件系统、容器运行时以及分离的进程树,这些技术共同确保了容器的隔离性、资源控制和可移植性。
39 5
|
1月前
|
jenkins Java 持续交付
Docker搭建jenkins环境
这篇文章详细介绍了如何利用Docker搭建Jenkins环境,包括拉取Jenkins镜像、配置端口映射及初始化设置的步骤。
138 0
Docker搭建jenkins环境
|
2月前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
2月前
|
虚拟化 Docker Windows
window 10专业版部署docker环境
本文介绍了如何在Windows 10专业版上部署Docker环境,包括安装步骤、配置镜像加速以及可能遇到的错误处理。
134 2
window 10专业版部署docker环境
|
1月前
|
Linux 持续交付 iOS开发
docker的使用(环境特殊时可以考虑使用)
docker的使用(环境特殊时可以考虑使用)
14 0
|
2月前
|
SQL 安全 数据库
Web安全漏洞专项靶场—SQL注入—docker环境—sqli-labs靶场—详细通关指南
Web安全漏洞专项靶场—SQL注入—docker环境—sqli-labs靶场—详细通关指南
341 1
|
3月前
|
Linux iOS开发 Docker
Docker技术概论(2):Docker环境的搭建
Docker技术概论(2):Docker环境的搭建
87 17
|
3月前
|
Linux 数据库 数据安全/隐私保护