最近才发现ThinkPHP6.0和CI4.x都要求php版本为7.1以上了,本机的php版本还停留在7.0.3x,又懒得升级,于是考虑使用Docker来运行一个lnmp环境。

常规环境搭建的方式有两种,一种是把php、mysql、nginx分别编写一个Dockerfile,然后再使用docker-compose.yml来编写一个容器互连的配置,使用docker-compose来管理和生成容器。另外一种方式是把php、nginx、mysql都安装到一个镜像里面,简单粗暴。根据目的和可维护性来看,如果是想长期维护且对各个软件的版本要求比较灵活的话,使用docker-compose方式生成的容器和镜像更加方便。但是如果只是搭建本地环境(个人开发者,非团队),不是很频繁地调整环境,我宁愿使用第二种简单的方式。

安装专业的说法,第一种编写方式生成的容器叫thin container(瘦容器),第二种方式生成的容器叫fat container(胖容器)。fat container五脏俱全,不用再使用docker-compose去将多个容器进行配置和互连。

我由于更熟悉ubuntu,且ubuntu系统的源更加丰富和更新及时,所以考虑使用ubuntu作为容器系统。用到的系统和软件版本整理如下:

ubuntu 18.04 (长期支持版本)
php 7.4.15 (7.4.x中维护的最新版本)
mysql 5.7.33 (ubuntu18.04下默认版本)
nginx 1.18.0 (ubuntu18.04下默认版本)

根据实践,编写了Dockerfile,如下所示。

FROM ubuntu:18.04

MAINTAINER freephp "fightforphp@gmail.com"

RUN apt-get update
RUN apt-get install -y vim curl gcc
# 添加php7.4的源
RUN apt-get -y install software-properties-common
RUN add-apt-repository ppa:ondrej/php
RUN apt-get update
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
RUN apt-get install -y php7.4
RUN apt-get install -y php7.4-curl php7.4-fpm php7.4-gd php7.4-mysqlnd php7.4-mbstring php7.4-ldap php7.4-soap php7.4-mongod php7.4-soap php7.4-sqlite3 \
php7.4-xml \
php7.4-zip \
php7.4-intl \
php7.4-imagick \
php7.4-xdebug # 安装composer
RUN curl -sS https://getcomposer.org/installer | php
RUN mv composer.phar /usr/local/bin/composer
# 设置composer源为阿里云
RUN composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ # 安装mysql
RUN apt-get install -y mysql-server mysql-client
# 添加nginx配置
RUN add-apt-repository ppa:ondrej/nginx
RUN apt-get update
RUN apt-get install -y nginx # 配置nginx
COPY ./default /etc/nginx/sites-available/default # 添加启动脚本
ADD ./start.sh /start.sh
RUN chmod 755 /start.sh CMD /start.sh && tail -f # 暴露端口
EXPOSE 3306
EXPOSE 80

然后使用如下命令进行编译:

docker build -t freephp/mylnmp:v2 .

这样就得到了想要的lnmp镜像了,后面可以根据自己的需求去运行一个容器即可,例如:

docker run -id -p 80:80 -v /Users/tony/www/myphp:/var/www/html --name mylnmp2 freephp/mylnmp:v2

在Dockerfile中还有关于nginx的配置和启动脚本,其完整内容可以参考我开源在gitee上的项目lnmpdocker

Dockfile搭建极简LNMP环境的更多相关文章

  1. CentOS下使用Postfix + Dovecot + Dnsmasq搭建极简局域网邮件系统

    背景 开发环境为局域网,工作内容需要经常查看邮件文件(*.eml),可恶的Foxmail必须验证账户才能进入主界面,才能打开eml文件查看. 无奈搭一个局域网内的邮件系统吧.极简搭建,仅用于通过Fox ...

  2. 基于layui和bootstrap搭建极简后台管理框架

    年前无聊,想自己搭建一个后台管理框架,对比了easyui.Extjs.H-ui.H+UI.layui几个框架,easyui和Extjs虽然功能强大但是界面实在是接受不了,H+UI和layuiAdmin ...

  3. 1分钟搭建极简mock server

    1.无聊的背景.起源: 如今的业务系统越来越复杂庞大,各个功能直接的调用也是多如牛毛,但如果在联调的时候,恰好被调的接口正在开发,怎么办?傻傻的等么,不存在的!这时会搭建一些server来进行mock ...

  4. Cocos2d-x.3.0开发环境搭建之—— 极简式环境搭建

    配置:win7 + VS2012 + Cocos2d-x.3.0 + Cocos Studio v1.4.0.1 使用此法可以方便的创建Cocos2d-x项目.如果需要运行Cocos2d-x引擎自带的 ...

  5. 搭建阿里云lnmp环境 (centos7+nginx+MySQL5.7.9+PHP7)

    阿里云一台服务器出现问题! 我估计是一键安装包环境的原因,所以打算重新搭建下环境! 首先,当然是先做好快照!安全第一! 对系统盘做更换系统操作,装上纯净版的centos. 装好后,进入系统 一.挂载数 ...

  6. Mysql 主从复制搭建-极简版

    前言 自己在百度.Google一番踩坑搭建成功后,记录一下,也希望后来人不再被这些坑到. 这里为了方便使用 docker,不会的同学请移步相关 Docker 教程. 正文 1. 启动 mysql #启 ...

  7. 搭建lamp或者lnmp环境,本地链接mysql报错解决方法

    报错:1130-host...is not allowed to connect to this mysql server 解决方法: 1.改表法 可能是你的账号不允许从远程登录,这个时候只要进入服务 ...

  8. 用vagrant搭建一个自己的lnmp环境(一)

    用vagrant搭建自己的lnmp环境 1.工具: a.vagrant b.virtual box c.linux服务器box(此处我使用centos 7.0) 2.安装完vagrant和virtua ...

  9. CentOS 7 上搭建LNMP环境

    (转自美团云知识库Chris) 简介 LNMP是Linux.Nginx.MySQL(MariaDB)和PHP的缩写,这个组合是最常见的WEB服务器的运行环境之一.本文将带领大家在CentOS 7操作系 ...

随机推荐

  1. JavaScript学习总结(基础知识)

    js代码引入 方式1: <script> alert('欢迎来到德玛西亚!') </script> 方式2:外部文件引入 src属性值为js文件路径 <script sr ...

  2. winform 窗体中顶部标题居中显示

    在网上看了很多例子,都不能居中,都有或多或少的问题 自己根据网友的代码改编入下: 先确随便写一个标题的内容: string titleMsg ="Winfrom Title" 获取 ...

  3. jQuery 页面滚动 吸顶 和 吸底

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. In Search of an Understandable Consensus Algorithm" (https://raft.github.io/raft.pdf) by Diego Ongaro and John Ousterhout.

    In Search of an Understandable Consensus Algorithm" (https://raft.github.io/raft.pdf) by Diego ...

  5. c 越界 数组越界

    int main(int argc, char* argv[]){ int i = 0; int arr[3] = {0}; for(; i<=3; i++){ arr[i] = 0; prin ...

  6. 游戏寻路A*算法

    A*算法是一种启发式的BFS,目的就是找到到达目标位置的最短路径.启发式函数如下: f(x) = g(x) + h(x) g(x)是对出发点到达当前点距离的估约,h(x)是当前点到终点距离的估约.算法 ...

  7. Pod和容器的LimitRange原理和实践总结

    一.背景介绍 通常情况下,Pod中的容器可以无限制的使用节点上的CPU和内存资源,在共享资源和资源有限的情况下,若不加以限制,某个集群或命名空间的资源可能会消耗殆尽,导致其他节点上优先级低的Pod发生 ...

  8. 这些年来,一直不知道Code Fisrt的真实意义。

    目录 Code First 是一个糟糕的名字 放弃 EDMX,但继续实行数据库优先 Code First 是一个糟糕的名字 很多人依据它的名字认为,它是在代码定义模型,然后从模型生成数据库. Code ...

  9. (十四)整合 ClickHouse数据库,实现数据高性能查询分析

    整合 ClickHouse数据库,实现数据高性能查询分析 1.ClickHouse简介 1.1 数据分析能力 2.SpringBoot整个ClickHouse 2.1 核心依赖 2.2 配属数据源 2 ...

  10. 关于POI相关通用方法源码

    设置宽度,1个汉字的宽度 导入excel用,返回行数 sheetName是sheet,显示名 导出excel 导出excel 获得excel数据 写输出,最后用 重新单元格指定位置 移到下一行,列开头 ...