暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Dockerfile搭建极简LNMP环境

成都有娃儿 2021-02-15
476
最近才发现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[1]
          后续还可以考虑内置安装swoole或者laravel,当然会打不同的tag,不会作为基线版本的镜像来发布。

          References

          [1]
           lnmpdocker: https://gitee.com/freemannow/lnmpdocker


          文章转载自成都有娃儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

          评论