爱意满满的作品展示区。
WangYan

Docker image for lnmp

  •  
  •   WangYan ·
    wangyan · Sep 4, 2016 · 5105 views
    This topic created in 3563 days ago, the information mentioned may be changed or developed.

    基于 Ubuntu 16.04 构建,一键自动安装最新版的 php7,支持使用外部MySQL数据库以及Composer组件。

    项目地址

    GitHub : https://github.com/wangyan/docker-lnmp

    国内镜像: https://git.wangyan.org/root/docker-lnmp

    一、安装 Docker

    关于 Docker 更多信息,请访问其官网。https://docs.docker.com

    debian

    apt-get update && \
    apt-get -y install curl && \
    curl -fsSL https://get.daocloud.io/docker | sh \
    update-rc.d -f docker defaults && \
    service docker start
    

    CentOS

    yum update && \
    curl -fsSL https://get.docker.com/ | sh && \
    systemctl enable docker.service && \
    systemctl start docker.service
    

    二、安装外部 MySQL 数据库

    如果你想使用内置的数据库,请忽略此步骤(二)(三),直接跳到步骤(四)

    2.1 安装 MySQL 数据库

    注意将123456换成你的 MySQL Root 密码

    docker run --name mysql \
    -v /var/lib/mysql:/var/lib/mysql \
    -e MYSQL_ROOT_PASSWORD=123456 \
    -p 3306:3306 \
    -d mysql:latest
    

    2.2 安装 phpMyAdmin (可选)

    温馨提示:国内主机请将 idiswy/phpmyadmin:latest 换成 docker.wangyan.org/root/docker-phpmyadmin:latest

    docker run --name phpmyadmin \
    --link mysql:mysql \
    -p 8080:80 \
    -P -d idiswy/phpmyadmin:latest
    

    三、安装 LNMP (外部数据库)

    • -name 容器名称
    • -link 链接步骤(二)装好的外部数据库
    • -v 左边是宿主机路径,右边是容器里的路径

    温馨提示:国内主机请将 idiswy/lnmp:latest 换成 docker.wangyan.org/root/docker-lnmp:latest

    docker run --name wangyan \
    --link mysql:mysql \
    -v /home/wangyan:/home/wangyan \
    -p 80:80 \
    -p 443:443 \
    -d idiswy/lnmp:latest
    

    四、安装 LNMP (内置数据库)

    在一个容器中,一键安装全套的LNMP,但如果你想使用外部数据库,请返回到步骤(二)开始安装

    4.1 安装 LNMP

    • -name 容器名称
    • -v 左边是宿主机路径,右边是容器里的路径
    • -MYSQL_ROOT_PASSWORD 设置 MySQL Root 密码

    温馨提示:国内主机请将 idiswy/lnmp:latest 换成 docker.wangyan.org/root/docker-lnmp:latest

    docker run --name wangyan \
    -v /home/wangyan:/home/wangyan \
    -p 80:80 \
    -p 443:443 \
    -d idiswy/lnmp:latest
    

    4.2 配置内置 MySQL 数据库

    注意将123456换成你的 MySQL Root 密码

    docker exec -it wangyan mysql-setup MYSQL_ROOT_PASSWORD=123456
    

    4.3 安装内置 MySQL 数据库时,可额外选用的变量

    • MYSQL_USER
    • MYSQL_PASSWORD
    • MYSQL_DATABASE
    docker exec -it wangyan mysql-setup \
    MYSQL_ROOT_PASSWORD=123456  \
    MYSQL_USER=wangyan \
    MYSQL_PASSWORD=123456 \
    MYSQL_DATABASE=test
    

    五、其他

    5.1 快捷进入容器

    首先,安装个小工具

    curl --fail -L -O https://github.com/phusion/baseimage-docker/archive/master.tar.gz && \
    tar xzf master.tar.gz && \
    ./baseimage-docker-master/install-tools.sh
    

    然后,进入容器

    docker-bash wangyan
    

    5.2 配置文件路径

    nginx: /etc/nginx/nginx.conf

    nginx site conf: /etc/nginx/conf.d/default.conf

    nginx site html: /var/www/

    nginx logs: /var/log/nginx/

    php5: /etc/php/fpm/php.ini

    php7: /etc/php/7.0/fpm/php.ini

    5.3 启动、重启操作

    sv start|stop|status <service_folder>
    例如: sv restart nginx
    

    via 《使用 runit 管理服务 》

    5.4.设置中国时区

    Debbian

    rm -rf /etc/localtime && \
    ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
    echo "Asia/Shanghai" > /etc/timezone && \
    apt-get -y install ntpdate && ntpdate -d cn.pool.ntp.org
    

    CentOS 7

    via http://blog.wangyan.org/linux-centos-timedatectl

    imedatectl set-timezone Asia/Shanghai
    timedatectl set-ntp yes 
    

    5.5 mail 发邮件

    dpkg-reconfigure exim4-config
    

    六、了解更多

    关于lnmp更多信息,请访问lnmp主页。http://blog.wangyan.org/docker-lnmp

    更多使用帮助请阅读wiki,其他问题欢迎在issues中反馈。

    Supplement 1  ·  Sep 5, 2016
    放在一个容器里相当于一个小型虚拟机,功能完整更加灵巧。喜欢编排 alpine 的,可以直接用 11 楼的代码,或者在 docker-compose.yml 中编排官方版的 nginx/php/mysql/都很快。青菜萝卜各有所好,不喜欢的人请默默走开吧!
    17 replies    2017-10-17 12:27:56 +08:00
    htfy96
        1
    htfy96  
       Sep 4, 2016 via Android
    不如 docker-compose …
    ivmm
        2
    ivmm  
       Sep 4, 2016
    怎么办,我还是喜欢自己编译。。。

    感觉已经跟不上时代了,真心觉得 docker 没有编译的好用。。。。。。
    crazycen
        3
    crazycen  
       Sep 4, 2016 via iPhone
    好复杂,还不如自己编译了!!!
    WangYan
        4
    WangYan  
    OP
       Sep 4, 2016
    @ivmm 刚接触 linux 的时候也是喜欢大包小包都编译,慢慢的就会觉得纯属瞎折腾...
    cxbig
        5
    cxbig  
       Sep 4, 2016
    写个 docker-compose 。。。一个个命令跑人家怎么用。。。
    WangYan
        6
    WangYan  
    OP
       Sep 4, 2016
    文档写得详细了就觉得复杂。。。其实就下面两行代码,复制粘贴两次就可以了。。

    ```
    docker run --name wangyan -p 80:80 -p 443:443 -d idiswy/lnmp:latest
    docker exec -it wangyan mysql-setup MYSQL_ROOT_PASSWORD=123456
    ```
    necpowman
        7
    necpowman  
       Sep 4, 2016
    docker-compose
    做编排
    xmgit
        8
    xmgit  
       Sep 4, 2016
    1. docker-compose
    2. alpine

    楼主落伍了。
    9hills
        9
    9hills  
       Sep 4, 2016 via iPhone
    你把 LNMP 放到一个容器内,用 Docker 干毛啊,老老实实用 VM 不就好了么

    很多人吐槽 Docker ,但大多数只是被 LZ 这种奇葩用法给误导了罢了……
    icybee
        10
    icybee  
       Sep 4, 2016
    看了楼上的吐槽,我只能说。。。。。。。。。确实有点道理
    Busy
        11
    Busy  
       Sep 4, 2016   ❤️ 1
    一个容器一个服务,不要堆砌,另外,建议容器基于 apline linux 来构建,轻量,小巧。譬如:

    https://hub.docker.com/r/registercn/php/
    https://hub.docker.com/r/registercn/nginx/
    https://hub.docker.com/r/registercn/mariadb/

    运行的时候,采用 docker-compose ,譬如

    version: '2'

    services:
    mariadb:
    container_name: mariadb
    image: registercn/mariadb
    volumes:
    - /your/mysql/path:/var/lib/mysql
    restart: always
    phpfpm:
    container_name: phpfpm
    image: registercn/php:5
    volumes:
    - /your/web/path:/var/www
    links:
    - mariadb
    restart: always
    nginx:
    container_name: nginx
    image: registercn/nginx
    ports:
    - "80:80"
    - "443:443"
    volumes:
    - /var/web/web:/var/www
    - ./nginx/conf.d:/etc/nginx/conf.d:ro
    links:
    - phpfpm
    restart: always

    web 应用中, mysql 的 host 填 mariadb
    nginx.conf 中的 fastcgi_pass 为 phpfpm:9000 ,譬如

    server {
    listen 80;
    server_name www.domain.com;
    root /var/www/www.domain.com;
    index index.html;

    location ~ .*\.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass phpfpm:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    }
    }
    Busy
        12
    Busy  
       Sep 4, 2016   ❤️ 3
    xiqingongzi
        13
    xiqingongzi  
       Sep 4, 2016 via Android
    @ivmm 大规模集群必须上镜像,不然会跪的。
    ivmm
        14
    ivmm  
       Sep 4, 2016
    @Havee
    alpinelinux 要是版本能像 archlinux 那样新就好了。 php 没有 7
    WangYan
        15
    WangYan  
    OP
       Sep 5, 2016
    @ivmm

    有 php7 的,所有包在官网都可以找到。 <https://pkgs.alpinelinux.org/packages>
    ivmm
        16
    ivmm  
       Sep 5, 2016
    @WangYan 噗, php 竟然不能搜索出 php7 ...... 这个设计还是不怎么合理啊
    yeszao
        17
    yeszao  
       Oct 17, 2017
    实用!!
    一键部署就用《 Docker 搭建可一键部署的多域名 LNMP 环境》 https://www.awaimai.com/2120.html
    细节讲得很到位
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3592 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 78ms · UTC 04:59 · PVG 12:59 · LAX 21:59 · JFK 00:59
    ♥ Do have faith in what you're doing.