3分鐘構(gòu)建開(kāi)發(fā)之景、測(cè)試斤富、生產(chǎn)L(Alpine Linux ) + N(Nginx) + M(MariaDB) + P(PHP) Docker 容器應(yīng)用環(huán)境

docker.png

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 LinuxDebian 構(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-websocktphp-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中certconf.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ù)巡语。

阿里云ECS安裝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

# 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

  1. 克隆項(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)行安裝。

  2. 拷貝.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
    
  3. 構(gòu)建容器集群蕊唐。

    $ docker-compose build && docker-compose up -d
    
  4. 等待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
    

    ?

  5. 修改配置文件中的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

參考

Docker -- 從入門到實(shí)踐

?- - -
原文:https://github.com/bravist/lnmp-docker

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末清寇,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子护蝶,更是在濱河造成了極大的恐慌华烟,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件持灰,死亡現(xiàn)場(chǎng)離奇詭異盔夜,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)堤魁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門喂链,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人妥泉,你說(shuō)我怎么就攤上這事椭微。” “怎么了盲链?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵蝇率,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我刽沾,道長(zhǎng)本慕,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任侧漓,我火速辦了婚禮锅尘,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘火架。我一直安慰自己鉴象,他們只是感情好忙菠,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布何鸡。 她就那樣靜靜地躺著,像睡著了一般牛欢。 火紅的嫁衣襯著肌膚如雪骡男。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,821評(píng)論 1 290
  • 那天傍睹,我揣著相機(jī)與錄音隔盛,去河邊找鬼犹菱。 笑死,一個(gè)胖子當(dāng)著我的面吹牛吮炕,可吹牛的內(nèi)容都是我干的腊脱。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼龙亲,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼陕凹!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起鳄炉,我...
    開(kāi)封第一講書(shū)人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤杜耙,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后拂盯,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體佑女,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年谈竿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了团驱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡空凸,死狀恐怖店茶,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情劫恒,我是刑警寧澤贩幻,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站两嘴,受9級(jí)特大地震影響丛楚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜憔辫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一趣些、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧贰您,春花似錦坏平、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至杠园,卻和暖如春顾瞪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工陈醒, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留惕橙,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓钉跷,卻偏偏與公主長(zhǎng)得像弥鹦,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子爷辙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容