Docker image for lnmp

2016-09-04 13:10:06 +08:00
 WangYan

基于 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 (外部数据库)

温馨提示:国内主机请将 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

温馨提示:国内主机请将 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 数据库时,可额外选用的变量

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中反馈。

4046 次点击
所在节点    分享创造
17 条回复
htfy96
2016-09-04 13:14:22 +08:00
不如 docker-compose …
ivmm
2016-09-04 13:21:47 +08:00
怎么办,我还是喜欢自己编译。。。

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

```
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
2016-09-04 14:28:38 +08:00
docker-compose
做编排
Bardon
2016-09-04 16:59:38 +08:00
1. docker-compose
2. alpine

楼主落伍了。
9hills
2016-09-04 17:05:58 +08:00
你把 LNMP 放到一个容器内,用 Docker 干毛啊,老老实实用 VM 不就好了么

很多人吐槽 Docker ,但大多数只是被 LZ 这种奇葩用法给误导了罢了……
icybee
2016-09-04 17:13:45 +08:00
看了楼上的吐槽,我只能说。。。。。。。。。确实有点道理
Havee
2016-09-04 17:14:24 +08:00
一个容器一个服务,不要堆砌,另外,建议容器基于 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;
}
}
Havee
2016-09-04 17:21:06 +08:00
xiqingongzi
2016-09-04 19:01:49 +08:00
@ivmm 大规模集群必须上镜像,不然会跪的。
ivmm
2016-09-04 23:21:36 +08:00
@Havee
alpinelinux 要是版本能像 archlinux 那样新就好了。 php 没有 7
WangYan
2016-09-05 02:31:12 +08:00
@ivmm

有 php7 的,所有包在官网都可以找到。 <https://pkgs.alpinelinux.org/packages>
ivmm
2016-09-05 09:16:01 +08:00
@WangYan 噗, php 竟然不能搜索出 php7 ...... 这个设计还是不怎么合理啊
yeszao
2017-10-17 12:27:56 +08:00
实用!!
一键部署就用《 Docker 搭建可一键部署的多域名 LNMP 环境》 https://www.awaimai.com/2120.html
细节讲得很到位

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/303806

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX