最近才發現ThinkPHP6.0和CI4.x都要求php版本爲7.1以上了,本機的php版本還停留在7.0.3x,又懶得升級,因而考慮使用Docker來運行一個lnmp環境。php
常規環境搭建的方式有兩種,一種是把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做爲容器系統。用到的系統和軟件版本整理以下:html
ubuntu 18.04 (長期支持版本) php 7.4.15 (7.4.x中維護的最新版本) mysql 5.7.33 (ubuntu18.04下默認版本) nginx 1.18.0 (ubuntu18.04下默認版本)
根據實踐,編寫了Dockerfile,以下所示。mysql
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
而後使用以下命令進行編譯:nginx
docker build -t freephp/mylnmp:v2 .
這樣就獲得了想要的lnmp鏡像了,後面能夠根據本身的需求去運行一個容器便可,例如:git
docker run -id -p 80:80 -v /Users/tony/www/myphp:/var/www/html --name mylnmp2 freephp/mylnmp:v2
在Dockerfile中還有關於nginx的配置和啓動腳本,其完整內容能夠參考我開源在gitee上的項目lnmpdocker。sql