Dockerfile搭建極簡LNMP環境

2021-03-02 成都有娃兒
最近才發現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下默認版本)

FROM ubuntu:18.04
MAINTAINER freephp "fightforphp@gmail.com"
RUN apt-get updateRUN apt-get install -y vim curl gcc# 添加php7.4的源RUN apt-get -y install software-properties-commonRUN add-apt-repository ppa:ondrej/phpRUN apt-get updateRUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezoneRUN apt-get install -y php7.4RUN 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
# 安裝composerRUN curl -sS https://getcomposer.org/installer | phpRUN mv composer.phar /usr/local/bin/composer# 設置composer源為阿里雲RUN composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
# 安裝mysqlRUN apt-get install -y mysql-server mysql-client# 添加nginx配置RUN add-apt-repository ppa:ondrej/nginxRUN apt-get updateRUN apt-get install -y nginx
# 配置nginxCOPY ./default /etc/nginx/sites-available/default
# 添加啟動腳本ADD ./start.sh /start.shRUN chmod 755 /start.sh

CMD /start.sh && tail -f
# 暴露埠EXPOSE 3306EXPOSE 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

相關焦點

  • 使用 Docker 搭建 Laravel 本地環境
    也就是一個虛擬機,但是跟 docker 比,它佔用體積太大,啟動速度慢,同時響應速度很慢,現在有了 docker 這種更好的方式,可以輕鬆方便的搭建整套 PHP 開發環境。本文就介紹如何使用 docker 搭建 Laravel 本地環境。安裝 docker首先安裝 docker。
  • LNMP環境一鍵安裝包
    LNMP一鍵安裝包可以在當前所有主流的Linux上安裝LNMP生產環境,無需值守,一鍵自動實現編譯、安裝、提高性能、優化配置參數,一鍵搭建LNMP環境。首先根據Windows利用Xshell連接Linux或者Mac遠程連接VPS(Linux)連上你的VPS。
  • 解析 Dockerfile
    啟動容器時執行的 Shell 命令,同 CMD 類似,只是由 ENTRYPOINT 啟動的程序不會被 docker run 命令行指定的參數所覆蓋,而且,這些命令行參數會被當作參數傳遞給ENTRYPOINT 指定指定的程序,例如:PS:Dockerfile 文件中也可以存在多個 ENTRYPOINT 指令,但僅有最後一個會生效
  • Docker搭建pwn環境
    本文為看雪論壇優秀文章看雪論壇作者ID:直木其實以前就想搭建一個docker環境,但是那時候想用dockfile來一步到位
  • Docker+Selenium Grid+Python搭建分布式測試環境
    於是搭建了一個分布式的測試環境來試試。Web兼容性的環境。  既然Docker現在已經如此流行,此次嘗試著在Docker的環境中搭建用於兼容性Web測試的分布式測試環境。  目標:  1.成功搭建docker結合selenium構建分布式測試環境。  2.編寫腳本執行web的自動化測試分布式測試。
  • 使用Docker高效搭建開發環境
    ,今天給大家帶來的是奇虎360的開發是如何使用Docker高效搭建開發環境的。公司雖然有專門負責部署、運維這些服務的同學,但我在開發的時候,還是喜歡自己來搭建這些東西,因為這樣通常可以對使用到的服務有更多的認識,也能幫助自己使用的更好。今天我就來和大家分享下我是如何高效的搭建好自己的開發環境的。
  • LNMP環境搭建
    ##LNMP環境搭建雙十一又買了一臺阿里雲學生機,美滋滋,上一臺用鏡像把自己挖了好多坑.話不多說,先試試自己搭建
  • Dockerfile構建beego鏡像
    Beego是Go語言下用戶使用比較多的Web框架,國人開發,中文文檔完善,本文通過Docker搭建一個簡單的Beego鏡像,記錄一次學習的摸索流程。
  • Dockerfile編寫指北
    和docker run等簡單命令即可,但是為了滿足更多需求,一些個人應用的docker鏡像,就需要用dockerfile來創建。Dockerfile入門Dockerfile的幾個核心命令FROMMAINTAINERRUN
  • 經驗分享|使用code-server為Docker容器搭建在線開發環境
    我們在日常的開發任務中可以利用Docker容器快速地搭建實驗環境或對項目進行遷移部署。下面先簡單介紹一些Docker的常用指令:docker build:根據Dockerfile文件創建鏡像docker start/stop/restart:啟動/停止/重啟容器docker ps:查看容器列表,默認顯示正在運行的容器,-a顯示所有容器更多更詳細的指令可以查閱:www.runoob.com/docker/docker-command-manual.html
  • 用docker搭建一個固件分析環境
    前言現在對智能硬體的安全研究越來越火,很多新人上手的時候往往需要在搭建環境上踩一些坑,在這種無關緊要的事情上浪費很多時間。本文旨在指導如何用docker搭建一個開箱即用的分析環境,或許文中的很多做法不是docker的最佳實踐,但是對於那些想快速開始又對docker所知不多的人會有些用處,可以省去摸索的過程直奔固件的核心問題。
  • PyCharm使用之利用Docker鏡像搭建Python開發環境
    在我們平時使用PyCharm的過程中,一般都是連接本地的Python環境進行開發,但是如果是離線的環境呢?
  • Docker學習之Dockerfile詳解
    上一篇學習了docker的基礎,知道docker有三大概念,鏡像,容器和倉庫。使用第三方鏡像不是學習docker的最終目的,最想要的還是要自己構建鏡像。    將自己的程序、文件、環境等構建成自己想要的應用鏡像、方便後續部署、啟動、維護。
  • 利用docker輕鬆搭建Redis-Cluster集群環境
    在這裡使用docker容器來搭建一套6節點(3主,3從)Redis-Cluster集群環境。環境準備作業系統版本:CentOS Linux release 7.6.1810 (Core)docker版本:19.03.13伺服器IP位址:192.168.112.136redis版本:5.0.9redis實例埠:8001--8006docker安裝首先需要在CentOS
  • 基於Docker搭建輕量的私有構建環境
    這種工程實踐在為研發和交付帶來極大便利的同時,對應用本身的架構、配置管理以及本地環境的資源利用有效性都提出了很高的要求。我們的分享將解釋如何基於Docker搭建一套輕量級的私有構建環境並及集成到持續集成系統中。Docker技術的應用談的比較多的是改變伺服器管理和運維模式,在日常開發工作中如何使用Docker看到的實踐比較少。
  • 基於 Docker 搭建 PHP 開發環境
    我剛進入的公司恰好需要使用 Docker 作為開發環境,所以也就不得不學習 Docker 的使用。今天寫一下搭建 PHP 開發環境的過程,也是一個記錄。本人使用的是 Docker Desktop for Mac,Docker 安裝需要拉取鏡像,使用原始鏡像拉取會非常慢。不過我們可以使用國內鏡像資源,而且多數是免費,我使用的是阿里雲的鏡像加速連結,速度非常快。
  • LNMP安裝的前期準備(LNMP一鍵安裝包下載)
    不過,現在網上非常流行的 LNMP 環境的搭建過程是採用 LNMP 一鍵安裝包直接安裝。這個一鍵安裝包實際上就是一個事先寫好的安裝腳本,按照這個安裝腳本,只要指定一些基本的選項,就可以完全自動安裝,所以安裝過程會大大簡化。下面,我們就使用一鍵安裝包來搭建 LNMP 環境。不過在安裝之前還是要做一些準備工作的。
  • 微服務中的容器技術---Docker(一),Docker的安裝和使用
    Docker安裝安裝環境如下:※這裡出現一個錯誤,因為伺服器中之前安裝過lnmp,所以啟動docker中的nginx的時候,提示80埠被佔用了,這裡需要關閉原來的nginxdocker]# docker run -d -p 1222:22 -p 80:80 centos6-httpd /init.sh 46fa6a06644e31701dc019fb3a8c3b6ef008d4c2c10d46662a97664f838d8c2cDockerfile自動構建docker鏡像可以參考官方的dockerfile文件:https://github.com
  • Docker精髓講解(容器數據卷、Dockerfile、Docker網絡)
    docker精髓什麼是容器數據卷docker的理念   :        將應用和運行的環境打包形成容器運行,運行可以伴隨著容器,但是我們對於數據的要求,是希望能夠持久化的!        發命令# copy  類似於add ,將我們文件拷貝到鏡像中# env   構建的時候設置環境變量
  • Docker 極簡入門指南,10 分鐘就能看懂
    四、核心概念Build, Ship and Run(搭建、運輸、運行);Build once, Run anywhere(一次搭建,處處運行);Docker 本身並不是容器,它是創建容器的工具,是應用容器引擎;Docker 三大核心概念,分別是:鏡像 Image,容器 Container、倉庫 Repository;Docker