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阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容