Dockfile搭建極簡LNMP環境

freephp發表於2021-02-15

最近才發現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

相關文章