博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
3分钟构建开发、测试、生产L(Alpine Linux ) + N(Nginx) + M(MariaDB) + P(PHP) Docker
阅读量:7120 次
发布时间:2019-06-28

本文共 7973 字,大约阅读时间需要 26 分钟。

LNMP Docker - 为国内环境更快构建镜像

3分钟构建开发、测试、生产L(Alpine Linux ) + N(Nginx) + M(MariaDB) + P(PHP) Docker 容器应用环境。

容器升级日志

More upgrade: https://github.com/bravist/lnmp-docker/releases

2017-07-14

  • 建立容器虚拟网络,为Nginx Web容器配置静态IP,并且优化nginx虚拟主机之间通信规则。
  • 新增MongoDB 容器,支持NoSQL 数据库。

2017-06-19

  • 新增 php-crond 周期性任务容器服务,采用crontab命令实现,支持宿主机上任意添加定时脚本(PS:cp default.example default

主要特性

  • 使用PHP7 大版本,更多PHP 7扩展包采用Alpine Linux扩展包仓库安装。

  • 基于 与 构建不同基础镜像。master分支基于 加速,在国内环境,5分钟快速完成构建容器集群,alpine 分支基于 官方镜像,适应非国内环境。debian 分支基于 Docker 官方 debian基础镜像,整体镜像尺寸相对较大。

  • 构建干净、轻量级PHP依赖环境、安装常用PHP扩展与Composer,支持PHP CLI 与 PHP FPM 模式。PHP CLI 适用于命令行交互的项目,PHP FPM 搭配 Nginx,构建PHP Web应用环境。另外,PHP FPM镜像基于 PHP CLI基础镜像,最小化PHP容器镜像,高效利用资源。

  • 保留不同Linux版本、不同地域环境的PHP基础镜像。为提高在国内Docker image 构建速度,PHP容器基于阿里巴巴开源镜像服务 - 快速完成容器构建。非国内环境,建议克隆实现快速构建,同样也可以尝试debain分支。

  • 提供PHP CLI模式独立运行容器:call-websocktphp-superviosrcall-websockt运行基于 的PHP Socket服务。php-supervior 实现基于Supervisor的队列服务。

  • 独立配置容器运行时文件、容器运行日志与数据与宿主机分离,方便调试与再次构建容器。

  • 支持Nginx 虚拟站点、SSL证书服务。配置参考Nginx中certconf.d目录文件。

  • 支持多个虚拟站点之间的程序互通。了解多个项目间的通信问题。

  • 使用Docker Compose 编排容器,支持在开发、测试、生产环境中快速完成服务器搭建任务。

安装LNMP Docker

项目依赖

  • CentOS 7
  • Docker 1.12 (Docker要求64位的系统且内核版本至少为3.10)
  • Docker Compose

安装Docker

​ 安装Docker 在不同平台、不同地域环境、不同操作系统中的方式不尽相同,这里还是推荐使用安装方式,其他方法请自行搜索,另外,特别推荐使用阿里云提供的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# 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镜像站点加速

,需要开通阿里云账户,每一个账户拥有专属加速地址。

$ 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 官方安装方式,请先选择一个版本。

$ 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复制代码

    如果系统未安装git, 可以下载进行安装。

  2. 拷贝.env.example文件,配置项目环境变量,注意,在容器运行成功后,需要再次修改.env 文件,保证多个项目之间的程序互通。

    # 生成.env文件$ cd lnmp-docker$ cp .env.example .env# 生成cron配置$ cd php-crond/crontabs/$ cp default.example default复制代码
  3. 构建容器集群。

    $ docker-compose build && docker-compose up -d复制代码
  4. 等待5分钟左右,查看容器是否完成。如果遇到问题,请不要客气的发布你的issue。

    ➜  ~ docker psCONTAINER ID        IMAGE                                   COMMAND                  CREATED             STATUS              PORTS                                                               NAMESf4452c868dcc        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-nginx15182399966b        lnmpdocker_php-supervisor               "supervisord --nodaem"   2 hours ago         Up 2 hours                                                                              lnmp-php-supervisora68c55c28995        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-fpmeff86b31f2ba        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-websocketbd3cecff945e        mariadb                                 "docker-entrypoint.sh"   2 hours ago         Up 2 hours          0.0.0.0:3306->3306/tcp                                              lnmp-mariadb279b2f995b2a        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仓库中的远程镜像,而 则是在容器镜像构建软件包的过程中使用它进行快速下载。

  • 全新安装与调试时,尽量将本地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 查询容器占用资源

可以用于查询容器资源占用情况,推荐安装,比如我们的服务器安装了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 imagesREPOSITORY                                    TAG                 IMAGE ID            CREATED             SIZElnmpdocker_nginx                              latest              8ed67b3d522c        2 hours ago         15.5 MBlnmpdocker_php-supervisor                     latest              28d1689ec35b        2 hours ago         160.4 MBlnmpdocker_redis                              latest              61cedd081dd7        2 hours ago         12.63 MBlnmpdocker_call-websocket                     latest              47883e0cc4cd        2 hours ago         117.9 MBdocker.io/bravist/php-fpm-alpine-aliyun-app   1.5                 1c98507f2de3        2 hours ago         124 MBdocker.io/bravist/php-cli-alpine-aliyun-app   1.3                505a11124094        24 hours ago        117.9 MBdocker.io/redis                               3.0-alpine          1fbae20f0017        24 hours ago        12.63 MBdocker.io/mariadb                             latest              ea0322bb4096        9 days ago          395.1 MBdocker.io/nginx                               1.13.1-alpine       7ebd6770d0d6        10 days ago         15.49 MB复制代码

参考

​- - - 原文:

转载于:https://juejin.im/post/5aa7704d518825558001e7ac

你可能感兴趣的文章
优化体系结构 - 算法外置优化计算结构
查看>>
JS中的call、apply、bind方法详解
查看>>
启动时间知多少?8款音视频类应用测评报告分析
查看>>
码农张的Bug人生 - 见面之礼
查看>>
JS异步编程之Promise
查看>>
【算法专栏】-- 谈谈时间复杂度
查看>>
元数据治理框架Atlas研究——JanusGraph图数据库对象关系映射
查看>>
力扣(LeetCode)155
查看>>
sas 做 titanic 未完待续
查看>>
区块链是一个公共数据库,要放在一个块内
查看>>
jqGrid的rowNum属性默认值、-1情况的介绍
查看>>
一步步学会用docker部署应用(nodejs版)
查看>>
分享10个免费H5模版(主题)资源网站
查看>>
RabbitMQ预研
查看>>
机器学习之分类结果的评价
查看>>
理解五个基本概念,让你更像机器学习专家
查看>>
你应该知道的数据库数据类型及其设计原则
查看>>
解决vue报错Failed to mount component
查看>>
[LeetCode] 124. Binary Tree Maximum Path Sum
查看>>
活学活用! 用Local Storage实现多人聊天室
查看>>