linux中利用docker和docker-compose搭建lnmp环境详解 10分钟快速完成

本文涉及的产品
云数据库 Redis 版,标准版 2GB
推荐场景:
搭建游戏排行榜
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
简介: 本文主要包括部分注意事项 重要信息提示快速执行安装的纯命令相关介绍配置文件,参考地址 1.要求说明:    linux, 安装了docker和docker compose 特别注意: 本文中提及的密码与本文的配置文件可能不一致(与新详情参考文中的密码同:123456),简单改成了mima1234...

本文主要包括部分
注意事项 重要信息提示
快速执行安装的纯命令
相关介绍
配置文件,参考地址
 
1.要求说明:    linux, 安装了docker和docker compose

特别注意:

本文中提及的密码与本文的配置文件可能不一致(与新详情参考文中的密码同:123456),简单改成了mima123456, 文中用的123456在进行说明

windows环境中,项目中mysql的连接主机为  172...和localhost都连接失败 (Linux中用宿主机ip连接成功--没探究原因,欢迎评论补全)
安装成功后, 我发现项目连接 数据库的时候连接不了, 一直是 Connection timed out(2002) ,
但是我使用 cmd , navicate, 都能够连接, 而且 localhost, 172.0.0.1, 和对应的docker ip 都是可以连接的, 就是php项目中无法连接 一直提示 连接超时. 项目运行正常, 我的其他项目连接的其他服务器的数据库也是访问正常的.
linux环境未遇到此问题,直接用服务器这个宿主机的ip就链接成功了的
windows解决记录:
项目连接数据库成功了 使用如下 注意项目中数据库主机用 host=mysql(我在linux中用的宿主机ip是可以直接访问数据库的,windows失败了)
$pdo = new PDO(‘mysql:host=mysql;dbname=site1’, ‘root’, ‘123456’);。
或者使用
$connect = mysqli_connect(‘mysql’,’root’,’123456′,’wordpress’,’3306′);
(注意 是 mysqli_connect, 不是 mysql_connect)
另外:
--强烈建议修改sql密码,配置文件中默认密码公开的
注意:

如果本地有phpstudy等环境, 注意关闭环境, 并且注意关闭mysql进程(关闭phpstudy可能还有mysql进程存在), 我的windows遇到了这个问题.

修改项目路径为自己已有项目路径(如果有,比如安装过PHPstudy的www目录),默认下载的配置文件目录下的www
注意:
配置中localhost在www/site1中,请修改site的域名配置或者localhost的配置指向
环境安装过后修改yml配置的数据库密码未能生效, 没找到解决办法, 间接解决方法是: 重新下载配置文件用新的命名,重新执行环境
参考链接中的下载的配置文件的版本号3执行失败  改成2就可以了 改成1页失败了的
注意:
如果本地有phpstudy等环境, 注意关闭环境, 并且注意关闭mysql进程(关闭phpstudy可能还有mysql进程存在),  否则启动会失败
 
2.  快速直接安装:
直接执行命令即可! 注意  个人强烈建议先根据下面贴出的个人配置中的注释进行调整修改
直接执行命令即可!(命令中有#开头的是注释部分 可以一起复制直接执行, 留意过程中是否会报错, 环境电脑不同 可能会遇到问题 ,相应解决. 我的一切顺利)

#如自己沒有什麽特殊要求,比如项目路径,mysql密码等,就直接执行命令即可!
git clone https://github.com/yeszao/dnmp.git

docker-compose up
#如果有错,检查,是否需要做上面的注意事项中说的修改版本号
#结果:然后在浏览器中访问localhost,就可以看到页面
#命令结束




如果有,参考这里:

git clone https://github.com/yeszao/dnmp.git
然后做上面的注意事项中说的修改版本号,根据下面提供的配置文件 然后执行下面合格命令即可
docker-compose up
# 特别注意, 我们的PHP代码需要某个目录的写权限。比如,Wordpress的wp-content/uploads目录,只有写权限我们才能正常上传文件,图片等.
#如果有错,检查,是否需要做上面的注意事项中说的修改版本号
#docker exec -it dlnmp_php-fpm_1 /bin/bash
#chown -R www-data:www-data /var/www/html

#但是我执行上面的失败了, 我的解决: 直接让我们服务器的宿主机中的目录可以写就可以, 因为项目目录在宿主机中.  #相应目录执行命令 (注意, WordPress我发现上传目录没有 是我自己建的, 比如 wordpress/wp-content/下面建一个uploads目录,然后执行)

chmod -R a+w ./wordpress/wp-content/uploads # (对应目录-我的是这个相对路径)
#命令结束

结果: 如果使用的配置中的默认项目目录 在浏览器中访问localhost,就可以看到页面 ,否则需要根据下面配置文件中的提示进行修改配置或者目录新建.
 
3. 错误记录:
环境安装过后修改yml配置的数据库密码未能生效, 没找到解决办法, 间接解决方法是: 重新下载配置文件用新的命名,重新执行环境
尝试过 2种方法
2.1.
docker-compose build 然后 docker-compose up -d
build会提示:
.....
Successfully built 6a55df4e9d16
redis uses an image, skipping
nginx uses an image, skipping
mysql uses an image, skipping
2.2.(以下是部分命令记录,修改的mysql密码均失败)
docker-compose down
  18 docker-compose build
  19 docker-compose ps
  20 docker-compose up -h
  21 docker-compose up --build -d
  22 docker-compose up --build -d --force-recreate
  23 docker-compose ps
  24 docker-compose down
  25 docker-compose up -d --force-recreate
(根据 docker-compose -h 参考命令执行的) 
4.详细说明:
项目目录,
项目路径指定了下载文件夹内的www目录, 如需改成其他目录或自己原有目录,直接修改目录下的文件 docker-compose.yml 内的全部 – ./www 为自己的目录, 比如 – F:/phpStudy2018/www(绝对路径) 或者 – ../phpStudy2018/www(相对路径)
 
mysql密码
windows环境中,项目中mysql的连接主机为 172...和localhost都连接失败 (Linux中用宿主机ip连接成功--没探究原因,欢迎评论补全)
安装成功后, 我发现项目连接 数据库的时候连接不了, 一直是 Connection timed out(2002) ,
但是我使用 cmd , navicate, 都能够连接, 而且 localhost, 172.0.0.1, 和对应的docker ip 都是可以连接的, 就是php项目中无法连接 一直提示 连接超时. 项目运行正常, 我的其他项目连接的其他服务器的数据库也是访问正常的.
 
我修改后添加备注后的基础配置文件内容

# 注意 这里clone的配置文件中是3 我的执行失败 我改成2就可以了 ,1也不行 各自根据情况进行修改
version: "2"
services:
  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
    #      修改此处 ./www/为自己的项目路径, 如果没有可以自定义 ,这里使用的是相对路径 就是git clone下来的目录中的www目录
      - ./www/:/var/www/html/:rw
      - ./conf/conf.d:/etc/nginx/conf.d/:ro
#  这里就是站点域名的配置文件 在相对路径 conf/conf.d/ 下面(注意 linux是反斜杠)  clone下来的配置目录中的www目录下已经有了site1 和2 的目录,所以访问没问题, 但是如果换成自己的项目目录, 就需要自己新建site1目录(因为site1配置文件中把localhost配置到了site1目录下了)或者自己修改site1里面的配置,把localhost指向到自己的项目目录,
      - ./conf/nginx.conf:/etc/nginx/nginx.conf:ro
      - ./log/:/var/log/dnmp/:rw
    networks:
      - net-php

  php:
    build: ./php/php72/
    expose:
      - "9000"
    volumes:
#      修改此处 ./www/为自己的项目路径, 如果没有可以自定义 ,这里使用的是相对路径 就是git clone下来的目录中的www目录
      - ./www/:/var/www/html/:rw
      - ./conf/php.ini:/usr/local/etc/php/php.ini:ro
#  这里就是站点域名的配置文件 在相对路径 conf/conf.d/ 下面(注意 linux是反斜杠)  clone下来的配置目录中的www目录下已经有了site1 和2 的目录,所以访问没问题, 但是如果换成自己的项目目录, 就需要自己新建site1目录(因为site1配置文件中把localhost配置到了site1目录下了)或者自己修改site1里面的配置,把localhost指向到自己的项目目录,
      - ./conf/php-fpm.conf:/usr/local/etc/php-fpm.d/www.conf:rw
      - ./log/:/var/log/dnmp/:rw
    networks:
      - net-php
      - net-mysql
      - net-redis

  mysql:
    image: mysql:8.0
    ports:
      - "3306:3306"
    volumes:
      - ./conf/mysql.cnf:/etc/mysql/conf.d/mysql.cnf:ro
      - ./mysql/:/var/lib/mysql/:rw
    networks:
      - net-mysql
    environment:
#    // todo: 修改为自己的密码,此密码github中公开的
      MYSQL_ROOT_PASSWORD: "mima123456"

  redis:
    image: redis:4.0
    networks:
      - net-redis
    ports:
      - "6379:6379"

  phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    ports:
      - "8080:80"
    networks:
      - net-mysql
    environment:
      - PMA_HOST=mysql
      - PMA_PORT=3306

  phpredisadmin:
    image: erikdubbelboer/phpredisadmin:latest
    ports:
      - "8081:80"
    networks:
      - net-redis
    environment:
      - REDIS_1_HOST=redis
      - REDIS_1_PORT=6379

networks:
  net-php:
  net-mysql:
  net-redis:

配置说明详细参考地址
http://www.cnblogs.com/xishuai/p/docker-compose.html
 
部分命令参考:
YAML 配置命令

配置 说明
build 指定 Dockerfile 所在的目录地址,用于构建镜像,并使用此镜像创建容器,比如上面配置的build: .
command 容器的执行命令
dns 自定义 dns 服务器
expose 暴露端口配置,但不映射到宿主机,只被连接的服务访问
extends 对docker-compose.yml的扩展,配置在服务中
image 使用的镜像名称或镜像 ID
links 链接到其它服务中的容器(一般桥接网络模式使用)
net 设置容器的网络模式(四种:bridge, none, container:[name or id]和host)
ports 暴露端口信息,主机和容器的端口映射
volumes 数据卷所挂载路径设置
Docker Compose 常用命令

命令 说明
docker-compose build 构建项目中的镜像,--force-rm:删除构建过程中的临时容器;--no-cache:不使用缓存构建;--pull:获取最新版本的镜像
docker-compose up -d 构建镜像、创建服务和启动项目,-d表示后台运行
docker-compose run ubuntu ls -d 指定服务上运行一个命令,-d表示后台运行
docker-compose logs 查看服务容器输出日志
docker-compose ps 列出项目中所有的容器
docker-compose pause [service_name] 暂停一个服务容器
docker-compose unpause [service_name] 恢复已暂停的一个服务容器
docker-compose restart 重启项目中的所有服务容器(也可以指定具体的服务)
docker-compose stop 停止运行项目中的所有服务容器(也可以指定具体的服务)
docker-compose start 启动已经停止项目中的所有服务容器(也可以指定具体的服务)
docker-compose rm 删除项目中的所有服务容器(也可以指定具体的服务),-f:强制删除(包含运行的)
docker-compose kill 强制停止项目中的所有服务容器(也可以指定具体的服务)
参考来源:http://www.cnblogs.com/xishuai/p/docker-compose.html 文末

阿里云服务器在搞限时活动优惠卷, 需要的自取. 注意, 领取的优惠券30天内有效,尽快使用!
领取链接:
https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=s306eooi&utm_source=s306eooi

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
6天前
|
Kubernetes Linux Docker
【Azure 应用服务】使用Docker Compose创建App Service遇见"Linux Version is too long. It cannot be more than 4000 characters"错误
【Azure 应用服务】使用Docker Compose创建App Service遇见"Linux Version is too long. It cannot be more than 4000 characters"错误
|
9天前
|
关系型数据库 Linux 应用服务中间件
在Linux中,什么是LAMP和LNMP堆栈?
在Linux中,什么是LAMP和LNMP堆栈?
|
10天前
|
运维 Kubernetes Linux
docker和kubectl客户端安装Linux
通过上述步骤,您应该已经在Linux环境中成功安装了Docker和kubectl客户端。安装完成后,您可以开始使用Docker来创建和管理容器,使用kubectl来管理Kubernetes集群。这些工具的安装和使用,对于现代云原生应用的开发和运维来说,是一个基础且关键的步骤。
11 0
|
25天前
|
关系型数据库 Linux 应用服务中间件
linux服务器下LNMP安装与配置方法
通过遵循上述步骤,你已经在Linux服务器上成功配置了LNMP环境。这只是初步设置,根据你的实际需求,可能需要进一步的调整与优化。记得经常检查每个组件的默认配置文件,并根据需要进行调整以优化性能和安全性。
20 0
|
30天前
|
存储 Linux Docker
Could not fetch/save url https://download.docker.com/linux/centos/docker-ce.repo
CentOS 安装Docker时,将 Docker 官方的 YUM 存储库添加到 CentOS 系统中出现错误。
240 0
|
2月前
|
Linux Docker 容器
linux 通过docker安装 elasticsearch-head
linux 通过docker安装 elasticsearch-head
35 0
|
3月前
|
Unix Docker 容器
使用docker 启动naocs 报错出现:standard_init_linux.go:241: exec user process caused "exec format error"
```markdown Error in Docker container startup: "standard_init_linux.go:241: exec user process caused \"exec format error\"". Occurred at 2024-06-29 09:26:19.910, followed by a failed hook with a syslog delivery error at 09:27:20.193. Seeking solutions from experts. ```
|
2月前
|
Ubuntu Linux Docker
Java演进问题之Alpine Linux创建更小的Docker镜像如何解决
Java演进问题之Alpine Linux创建更小的Docker镜像如何解决
|
3月前
|
Linux 测试技术 开发者
【Docker项目实战】使用Docker部署instantbox临时Linux系统环境搭建工具
【6月更文挑战第13天】使用Docker部署instantbox临时Linux系统环境搭建工具
60 3
|
2月前
|
Ubuntu Linux 数据安全/隐私保护
Linux系统使用Docker部署Cloudreve云盘并实现远程访问
Linux系统使用Docker部署Cloudreve云盘并实现远程访问
41 0
下一篇
云函数