LNMP Docker - 為國(guó)內(nèi)環(huán)境更快構(gòu)建鏡像
3分鐘構(gòu)建開(kāi)發(fā)、測(cè)試锻狗、生產(chǎn)L(Alpine Linux ) + N(Nginx) + M(MariaDB) + P(PHP) Docker 容器應(yīng)用環(huán)境满力。
容器升級(jí)日志
More upgrade: https://github.com/bravist/lnmp-docker/releases
2017-07-14
- 建立容器虛擬網(wǎng)絡(luò),為
Nginx Web
容器配置靜態(tài)IP轻纪,并且優(yōu)化nginx
虛擬主機(jī)之間通信規(guī)則脚囊。 - 新增
MongoDB
容器,支持NoSQL 數(shù)據(jù)庫(kù)桐磁。
2017-06-19
- 新增
php-crond
周期性任務(wù)容器服務(wù)悔耘,采用crontab
命令實(shí)現(xiàn),支持宿主機(jī)上任意添加定時(shí)腳本(PS:cp default.example default
)
PHP 升級(jí)日志
主要特性
使用PHP7 大版本我擂,更多PHP 7擴(kuò)展包采用Alpine Linux擴(kuò)展包倉(cāng)庫(kù)安裝衬以。
基于Alpine Linux 與 Debian 構(gòu)建不同基礎(chǔ)鏡像缓艳。master分支基于Ali-OSM 加速,在國(guó)內(nèi)環(huán)境看峻,5分鐘快速完成構(gòu)建容器集群阶淘,alpine 分支基于 Alpine Linux 官方鏡像,適應(yīng)非國(guó)內(nèi)環(huán)境互妓。debian 分支基于 Docker 官方 debian基礎(chǔ)鏡像溪窒,整體鏡像尺寸相對(duì)較大。
構(gòu)建干凈冯勉、輕量級(jí)PHP依賴環(huán)境澈蚌、安裝常用PHP擴(kuò)展與Composer,支持PHP CLI 與 PHP FPM 模式灼狰。PHP CLI 適用于命令行交互的項(xiàng)目宛瞄,PHP FPM 搭配 Nginx,構(gòu)建PHP Web應(yīng)用環(huán)境交胚。另外份汗,PHP FPM鏡像基于 PHP CLI基礎(chǔ)鏡像,最小化PHP容器鏡像蝴簇,高效利用資源杯活。
Docker Hub 官網(wǎng)保留不同Linux版本、不同地域環(huán)境的PHP基礎(chǔ)鏡像熬词。為提高在國(guó)內(nèi)Docker image 構(gòu)建速度旁钧,PHP容器基于阿里巴巴開(kāi)源鏡像服務(wù) -ALi-OSM Alpine 快速完成容器構(gòu)建。非國(guó)內(nèi)環(huán)境荡澎,建議克隆項(xiàng)目 alpine 分支實(shí)現(xiàn)快速構(gòu)建均践,同樣也可以嘗試debain分支晤锹。
提供PHP CLI模式獨(dú)立運(yùn)行容器:
call-websockt
與php-superviosr
摩幔。call-websockt
運(yùn)行基于workman 的PHP Socket服務(wù)。php-supervior
實(shí)現(xiàn)基于Supervisor的隊(duì)列服務(wù)鞭铆。獨(dú)立配置容器運(yùn)行時(shí)文件或衡、容器運(yùn)行日志與數(shù)據(jù)與宿主機(jī)分離,方便調(diào)試與再次構(gòu)建容器车遂。
支持Nginx 虛擬站點(diǎn)封断、SSL證書(shū)服務(wù)。配置參考Nginx中
cert
與conf.d
目錄文件舶担。支持多個(gè)虛擬站點(diǎn)之間的程序互通坡疼。參考這里了解多個(gè)項(xiàng)目間的通信問(wèn)題。
使用Docker Compose 編排容器衣陶,支持在開(kāi)發(fā)柄瑰、測(cè)試闸氮、生產(chǎn)環(huán)境中快速完成服務(wù)器搭建任務(wù)。
安裝LNMP Docker
項(xiàng)目依賴
- CentOS 7
- Docker 1.12 (Docker要求64位的系統(tǒng)且內(nèi)核版本至少為3.10)
- Docker Compose
安裝Docker
? 安裝Docker 在不同平臺(tái)教沾、不同地域環(huán)境蒲跨、不同操作系統(tǒng)中的方式不盡相同,這里還是推薦使用官方CentOS安裝方式授翻,其他方法請(qǐng)自行搜索或悲,另外,特別推薦使用阿里云提供的Docker Hub 鏡像站點(diǎn)堪唐,為你提供專屬Docker加速服務(wù)巡语。
$ 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
# Add docker group
$ sudo groupadd docker
# Add user to docker group
$ sudo usermod -aG docker $USER
## start up docker
$ sudo systemctl enable docker
$ sudo systemctl start docker
阿里云Docker Hub鏡像站點(diǎn)加速
阿里云Docker Hub加速器,需要開(kāi)通阿里云賬戶羔杨,每一個(gè)賬戶擁有專屬加速地址捌臊。
$ sudo mkdir -p /etc/docker
$ sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://muehonsf.mirror.aliyuncs.com"]
}
EOF
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
安裝Docker Compose
推薦Docker Compose 官方Gtihub倉(cāng)庫(kù)安裝方式,請(qǐng)先選擇一個(gè)版本兜材。
$ 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
-
克隆項(xiàng)目Git倉(cāng)庫(kù)理澎,非國(guó)內(nèi)用戶請(qǐng)?jiān)诳寺『螅袚Q到alpine分支曙寡。
$ git clone https://github.com/bravist/lnmp-docker
如果系統(tǒng)未安裝git糠爬, 可以下載源碼壓縮包進(jìn)行安裝。
-
拷貝
.env.example
文件举庶,配置項(xiàng)目環(huán)境變量执隧,注意,在容器運(yùn)行成功后户侥,需要再次修改.env
文件镀琉,保證多個(gè)項(xiàng)目之間的程序互通。# 生成.env文件 $ cd lnmp-docker $ cp .env.example .env # 生成cron配置 $ cd php-crond/crontabs/ $ cp default.example default
-
構(gòu)建容器集群蕊唐。
$ docker-compose build && docker-compose up -d
-
等待5分鐘左右屋摔,查看容器是否完成。如果遇到問(wèn)題替梨,請(qǐng)不要客氣的發(fā)布你的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.5 "/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
配置參數(shù),這里先要通過(guò)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
維護(hù)
在構(gòu)建過(guò)程中弓熏,如果出現(xiàn)問(wèn)題請(qǐng)第一時(shí)間發(fā)布issue,這里特別提示:
構(gòu)建過(guò)程中糠睡,有兩類加速服務(wù)挽鞠,使用阿里云提供的專屬鏡像加速是為了快速拉取Docker Hub倉(cāng)庫(kù)中的遠(yuǎn)程鏡像,而Ali-OSM 則是在容器鏡像構(gòu)建軟件包的過(guò)程中使用它進(jìn)行快速下載。
-
全新安裝與調(diào)試時(shí)信认,盡量將本地Docker 已有容器與鏡像清理干凈后再嘗試串稀。
# 查看所有運(yùn)行和者退出的容器 $ docker ps -a # 刪除停止的容器 $ docker rm -f contianer_name ... # 快速停止與刪除容器集群 $ docker-compose down # 刪除本地docker 鏡像 $ docker rmi -f image_name ....
-
進(jìn)入容器時(shí)需要使用
sh
shell登錄,因?yàn)樗械娜萜骰贏lpine Linux 狮杨,默認(rèn)使用sh
shell母截。$ docker exec -it lnmp-nginx sh
使用ctop 查詢?nèi)萜髡加觅Y源
ctop可以用于查詢?nèi)萜髻Y源占用情況,推薦安裝橄教,比如我們的服務(wù)器安裝了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.5 1c98507f2de3 2 hours ago 124 MB
docker.io/bravist/php-cli-alpine-aliyun-app 1.3 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
參考
?- - -
原文:https://github.com/bravist/lnmp-docker