5 分鐘構(gòu)建國內(nèi) Docker LNMP 容器集群

LNMP Docker

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

快速構(gòu)建開發(fā)、測試、生產(chǎn)L(Alpine Linux ) + N(Nginx) + M(MariaDB) + P(PHP) Docker 容器應(yīng)用環(huán)境。

主要特性

  • 基于Alpine LinuxDebian 構(gòu)建不同基礎(chǔ)鏡像。master分支基于Ali-OSM 加速,在國內(nèi)環(huán)境,5分鐘快速完成構(gòu)建容器集群,alpine 分支基于 Alpine Linux 官方鏡像,適應(yīng)非國內(nèi)環(huán)境。debian 分支基于 Docker 官方 debian基礎(chǔ)鏡像,整體鏡像尺寸相對較大。
  • 構(gòu)建干凈、輕量級PHP依賴環(huán)境、安裝常用PHP擴展,支持PHP CLI 與 PHP FPM 模式。PHP CLI 適用于命令行交互的項目,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ǔ)鏡像。為提高在國內(nèi)Docker image 構(gòu)建速度,PHP容器基于阿里巴巴開源鏡像服務(wù) -ALi-OSM Alpine 快速完成容器構(gòu)建。非國內(nèi)環(huán)境,建議克隆項目 alpine 分支實現(xiàn)快速構(gòu)建,同樣也可以嘗試debain分支。
  • 提供PHP CLI模式獨立運行容器:call-websocktphp-superviosrcall-websockt運行基于workman 的PHP Socket服務(wù)。php-supervior 實現(xiàn)基于Supervisor的隊列服務(wù)。
  • 獨立配置容器運行時文件、容器運行日志與數(shù)據(jù)與宿主機分離,方便調(diào)試與再次構(gòu)建容器。
  • 支持Nginx 虛擬站點、SSL證書服務(wù)。配置參考Nginx中certconf.d目錄文件。
  • 支持多個虛擬站點之間的程序互通。參考這里了解多個項目間的通信問題。
  • 使用Docker Compose 編排容器,支持在開發(fā)、測試、生產(chǎn)環(huán)境中快速完成服務(wù)器搭建任務(wù)。

安裝LNMP Docker

項目依賴

  • CentOS 7
  • Git
  • Docker 1.12 (Docker要求64位的系統(tǒng)且內(nèi)核版本至少為3.10)
  • Docker Compose

安裝Docker

? 安裝Docker 在不同平臺、不同地域環(huán)境、不同操作系統(tǒng)中的方式不盡相同,這里還是推薦使用官方CentOS安裝方式,其他方法請自行搜索,另外,特別推薦使用阿里云提供的Docker Hub 鏡像站點,為你提供專屬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

## 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倉庫,非國內(nèi)用戶請在克隆后,切換到本地alpine分支。

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

    $ cd lnmp-docker 
    $ cp .env.example .env
    
  3. 構(gòu)建容器集群。

    $ docker-compose build && docker-compose up -d
    
  4. 等待5分鐘左右,查看容器是否完成。如果遇到問題,請不要客氣的發(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.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 配置參數(shù),這里先要通過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
    

維護

在構(gòu)建過程中,如果出現(xiàn)問題請第一時間發(fā)布issue,這里特別提示:

  • 構(gòu)建過程中,有兩類加速服務(wù),使用阿里云提供的專屬鏡像加速是為了快速拉取Docker Hub倉庫中的遠程鏡像,而Ali-OSM 則是在容器鏡像構(gòu)建軟件包的過程中使用它進行快速下載。

  • 全新安裝與調(diào)試時,盡量將本地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 查詢?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.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

特別引用

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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