5 分鐘構建國內 Docker LNMP 容器集群

LNMP Docker

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

快速構建開發、測試、生產L(Alpine Linux ) + N(Nginx) + M(MariaDB) + P(PHP) Docker 容器應用環境。

主要特性

  • 基于Alpine LinuxDebian 構建不同基礎鏡像。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-websocktphp-superviosrcall-websockt運行基于workman 的PHP Socket服務。php-supervior 實現基于Supervisor的隊列服務。
  • 獨立配置容器運行時文件、容器運行日志與數據與宿主機分離,方便調試與再次構建容器。
  • 支持Nginx 虛擬站點、SSL證書服務。配置參考Nginx中certconf.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

  1. 克隆項目Git倉庫,非國內用戶請在克隆后,切換到本地alpine分支。

    $ git clone https://github.com/bravist/lnmp-docker
    
  2. 拷貝.env.example文件,配置項目環境變量,注意,在容器運行成功后,需要再次修改.env 文件,保證多個項目之間的程序互通。

    $ cd lnmp-docker 
    $ cp .env.example .env
    
  3. 構建容器集群。

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

    ?

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

特別引用

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,835評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,676評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,730評論 0 380
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,118評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,873評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,266評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,330評論 3 443
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,482評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,036評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,846評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,025評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,575評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,279評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,684評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,953評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,751評論 3 394
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,016評論 2 375

推薦閱讀更多精彩內容