LNMP Docker
快速構建開發、測試、生產L(Alpine Linux ) + N(Nginx) + M(MariaDB) + P(PHP) Docker 容器應用環境。
主要特性
- 基于Alpine Linux 與 Debian 構建不同基礎鏡像。master分支基于Ali-OSM 加速,在國內環境,5分鐘快速完成構建容器集群,alpine 分支基于 Alpine Linux 官方鏡像,適應非國內環境。debian 分支基于 Docker 官方 debian基礎鏡像,整體鏡像尺寸相對較大。
- 構建干凈、輕量級PHP依賴環境、安裝常用PHP擴展,支持PHP CLI 與 PHP FPM 模式。PHP CLI 適用于命令行交互的項目,PHP FPM 搭配 Nginx,構建PHP Web應用環境。另外,PHP FPM鏡像基于 PHP CLI基礎鏡像,最小化PHP容器鏡像,高效利用資源。
- Docker Hub 官網保留不同Linux版本、不同地域環境的PHP基礎鏡像。為提高在國內Docker image 構建速度,PHP容器基于阿里巴巴開源鏡像服務 -ALi-OSM Alpine 快速完成容器構建。非國內環境,建議克隆項目 alpine 分支實現快速構建,同樣也可以嘗試debain分支。
- 提供PHP CLI模式獨立運行容器:
call-websockt
與php-superviosr
。call-websockt
運行基于workman 的PHP Socket服務。php-supervior
實現基于Supervisor的隊列服務。 - 獨立配置容器運行時文件、容器運行日志與數據與宿主機分離,方便調試與再次構建容器。
- 支持Nginx 虛擬站點、SSL證書服務。配置參考Nginx中
cert
與conf.d
目錄文件。 - 支持多個虛擬站點之間的程序互通。參考這里了解多個項目間的通信問題。
- 使用Docker Compose 編排容器,支持在開發、測試、生產環境中快速完成服務器搭建任務。
安裝LNMP Docker
項目依賴
- CentOS 7
- Git
- Docker 1.12 (Docker要求64位的系統且內核版本至少為3.10)
- Docker Compose
安裝Docker
? 安裝Docker 在不同平臺、不同地域環境、不同操作系統中的方式不盡相同,這里還是推薦使用官方CentOS安裝方式,其他方法請自行搜索,另外,特別推薦使用阿里云提供的Docker Hub 鏡像站點,為你提供專屬Docker加速服務。
$ sudo yum install -y yum-utils
$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
$ sudo yum makecache fast
$ sudo yum -y install docker-ce
## start up docker
$ sudo systemctl enable docker
$ sudo systemctl start docker
# Add user to docker group
$ sudo usermod -aG docker $USER
安裝Docker Compose
推薦Docker Compose 官方Gtihub倉庫安裝方式,請先選擇一個版本。
$ curl -L https://github.com/docker/compose/releases/download/1.13.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose
安裝LNMP Docker
-
克隆項目Git倉庫,非國內用戶請在克隆后,切換到本地alpine分支。
$ git clone https://github.com/bravist/lnmp-docker
-
拷貝
.env.example
文件,配置項目環境變量,注意,在容器運行成功后,需要再次修改.env
文件,保證多個項目之間的程序互通。$ cd lnmp-docker $ cp .env.example .env
-
構建容器集群。
$ docker-compose build && docker-compose up -d
-
等待5分鐘左右,查看容器是否完成。如果遇到問題,請不要客氣的發布你的issue。
? ~ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f4452c868dcc lnmpdocker_nginx "nginx -g 'daemon off" 2 hours ago Up 2 hours 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp lnmp-nginx 15182399966b lnmpdocker_php-supervisor "supervisord --nodaem" 2 hours ago Up 2 hours lnmp-php-supervisor a68c55c28995 bravist/php-fpm-alpine-aliyun-app:1.2 "/usr/sbin/php-fpm7 -" 2 hours ago Up 2 hours 0.0.0.0:9000->9000/tcp lnmp-php-fpm eff86b31f2ba lnmpdocker_call-websocket "/usr/bin/php /usr/sh" 2 hours ago Up 2 hours 0.0.0.0:8190-8191->8190-8191/tcp lnmp-call-websocket bd3cecff945e mariadb "docker-entrypoint.sh" 2 hours ago Up 2 hours 0.0.0.0:3306->3306/tcp lnmp-mariadb 279b2f995b2a lnmpdocker_redis "docker-entrypoint.sh" 2 hours ago Up 2 hours 0.0.0.0:6379->6379/tcp lnmp-redis
?
-
修改配置文件中的
DOCKER_HOST_IP
配置參數,這里先要通過docker inspect
查詢nginx 容器獲取。$ docker inspect lnmp-nginx | grep IPAddress "SecondaryIPAddresses": null, "IPAddress": "", "IPAddress": "192.168.32.7", $ vi .env ... DOCKER_HOST_IP = 192.168.32.7 ... :wq $ docker-compose build && docker-compose up -d
維護
在構建過程中,如果出現問題請第一時間發布issue,這里特別提示:
構建過程中,有兩類加速服務,使用阿里云提供的專屬鏡像加速是為了快速拉取Docker Hub倉庫中的遠程鏡像,而Ali-OSM 則是在容器鏡像構建軟件包的過程中使用它進行快速下載。
-
全新安裝與調試時,盡量將本地Docker 已有容器與鏡像清理干凈后再嘗試。
# 查看所有運行和者退出的容器 $ docker ps -a # 刪除停止的容器 $ docker rm -f contianer_name ... # 快速停止與刪除容器集群 $ docker-compose down # 刪除本地docker 鏡像 $ docker rmi -f image_name ....
-
進入容器時需要使用
sh
shell登錄,因為所有的容器基于Alpine Linux ,默認使用sh
shell。$ docker exec -it lnmp-nginx sh
使用ctop 查詢容器占用資源
ctop可以用于查詢容器資源占用情況,推薦安裝,比如我們的服務器安裝了Gitlab與LNMP docker 后的使用情況:
$ ctop
ctop - 15:36:35 CST 10 containers
NAME CID CPU MEM NET RX/TX IO R/W PIDS
? gitlabdocker_gitlab_1 97d5ba4b4918 5% 1.99G / 7.64G 948M / 1.6G 120M / 776K 0
? gitlabdocker_postgresql_1 146b662e4d62 0% 75M / 7.64G 897K / 8M 24M / 0B 0
? gitlabdocker_redis_1 3bcf1582f892 2% 14M / 7.64G 1.6G / 940M 5M / 0B 0
? lnmp-call-websocket eff86b31f2ba 0% 66M / 7.64G 3K / 648B 20M / 0B 0
? lnmp-mariadb bd3cecff945e 0% 179M / 7.64G 90K / 276K 27M / 0B 0
? lnmp-nginx f4452c868dcc 0% 8M / 7.64G 14M / 5M 5M / 0B 0
? lnmp-php-fpm a68c55c28995 0% 72M / 7.64G 1M / 13M 20M / 0B 0
? lnmp-php-supervisor 15182399966b 1% 1.8G / 7.64G 92M / 145M 26M / 0B 0
? lnmp-redis 279b2f995b2a 0% 8M / 7.64G 62M / 16M 2M / 0B 0
? lnmp-www 09c684094c18 - - - - -
查看容器鏡像大小
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
lnmpdocker_nginx latest 8ed67b3d522c 2 hours ago 15.5 MB
lnmpdocker_php-supervisor latest 28d1689ec35b 2 hours ago 160.4 MB
lnmpdocker_redis latest 61cedd081dd7 2 hours ago 12.63 MB
lnmpdocker_call-websocket latest 47883e0cc4cd 2 hours ago 117.9 MB
docker.io/bravist/php-fpm-alpine-aliyun-app 1.2 1c98507f2de3 2 hours ago 124 MB
docker.io/bravist/php-cli-alpine-aliyun-app 1.0 505a11124094 24 hours ago 117.9 MB
docker.io/redis 3.0-alpine 1fbae20f0017 24 hours ago 12.63 MB
docker.io/mariadb latest ea0322bb4096 9 days ago 395.1 MB
docker.io/nginx 1.13.1-alpine 7ebd6770d0d6 10 days ago 15.49 MB