最近才发现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作为容器系统。用到的系统和软件版本整理如下:
根据实践,编写了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。