Docker image for lnmp - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
爱意满满的作品展示区。
WangYan

Docker image for lnmp

  •  
  •   WangYan
    wangyan Sep 4, 2016 4971 views
    This topic created in 3521 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     3575 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 208ms UTC 04:53 PVG 12:53 LAX 21:53 JFK 00:53
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86