docker-lnmp 多容器部署 Laravel 方案分享(转)
github 项目地址 https://github.com/March7/docker-lnmp
docker 基础
docker的基础用法请参考官方文档
docker-compose
docker-compose 是用来管理编排多个容器协作的。
通过 docker-compose.yml 来编排 nginx、php、mysql 之间的通信和协作。
在 docker-lnmp 目录下通过命令 docker-compose up 启动容器
然后通过 localhost 或者 localhost:8000 就可以访问 index.php 了
docker-compose.yml 简单介绍
Mysql
先看 Mysql,因为这个 Mysql 镜像直接来自与官方,没有做任何修改。
mysql: ### 容器名称
image: mysql:5.7 ### 官方镜像 版本号5.7
volumes:
- mysql-data:/var/lib/mysql ### 数据卷,mysql数据就存放在这里
ports:
- "3306:3306" ###端口映射,主机端口:容器对外端口
environment:
- MYSQL_ROOT_PASSWORD=123456 ### 设置环境变量,这个变量名是官方镜像定义的。
PHP
PHP 镜像也来自与官方,但是官方镜像并没有提供连接 Mysql 相关的 pdo_mysql 扩展,这里做了一点修改,所以不能直接用 image 来依赖官方镜像,需要单独写一个 Dockerfile 来自定义 PHP 镜像。
php-fpm:
build:
context: ./php ### 自定义PHP镜像的配置目录
volumes:
- ./www:/var/www/html ### 主机文件与容器文件映射共享,PHP代码存这里
expose:
- "9000" ### 容器对外暴露的端口
depends_on:
- mysql ### 依赖并链接Mysql容器,这样在PHP容器就可以通过mysql作为主机名来访问Mysql容器了
自定义 PHP 镜像的配置文件 Dockerfile
### 来自官方的PHP镜像版本为7.1-fpm.
### 该版本只包含FPM不包括CLI,所以这里并不能执行composer
### 如果需要用PHP-CLI 需要再开一个CLI容器,或者安装同时包含FPM和CLI的版本
FROM php:7.1-fpm
### 设置环境变量
ENV TZ=Asia/Shanghai
### 执行bash命令安装php所需的扩展
RUN apt-get update && apt-get install -y \
libfreetype6-dev \
libjpeg62-turbo-dev \
libmcrypt-dev \
libpng-dev \
### 这里是docker提供的安装php扩展的方法,在这里安装了pdo_mysql扩展还有GD库等
&& docker-php-ext-install -j$(nproc) iconv mcrypt mysqli pdo_mysql \
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install -j$(nproc) gd
### 扩展php.ini
COPY ./php.ini /usr/local/etc/php/conf.d/php.ini
Nginx
Nginx 需要配置一个 server, 所以也需要一点简单的定制
nginx:
build:
context: ./nginx ### 自定义Nginx镜像的配置目录
volumes:
- ./www:/var/www/html 主机文件与容器文件映射共享,PHP代码存这里
ports:
- "80:80" ### 端口映射,如果你主机80端口被占用,可以用8000:80
- "443:443"
depends_on:
- php-fpm ### 依赖并连接PHP容器,这样在Nginx容器就可以通过php-fpm作为主机名来访问PHP容器了
自定义 Nginx 镜像的配置文件 Dockerfile
FROM nginx:1.11 ### 官方镜像
ENV TZ=Asia/Shanghai ### 环境变量
COPY ./nginx.conf /etc/nginx/conf.d/default.conf ### server配置
Nginx server 配置
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
server_name localhost;
root /var/www/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
try_files $uri /index.php =404;
### 主要是这里用 php-fpm:9000来访问PHP容器
fastcgi_pass php-fpm:9000;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
volumes 数据卷
数据卷独立与容器之外专门存放数据的
### 这里定义了mysql所用到的数据卷
volumes:
mysql-data:
php 测试代码
<?php
// 建立连接
try{
//这里的mysql:host=mysql,后面这个mysql就是我们的mysql容器
//用户名 root 是默认的
//密码 123456 就是我们在mysql容器设置的环境变量
$dbh = new PDO("mysql:host=mysql;dbname=mysql", "root", 123456);
$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$dbh->exec("SET CHARACTER SET utf8");
$dbh=null; //断开连接
}catch(PDOException $e){
print"Error!:".$e->getMessage()."<br/>";
die();
}
// 错误检查S
// 输出成功连接
echo "<h1>成功通过 PDO 连接 MySQL 服务器</h1>" . PHP_EOL;
phpinfo();
?>
如何部署 laravel
部署 laravel 要用到 composer 和 git 所以需要多部署一个 php-cli 容器 ,并安装 composer 和 git
github 源码没有该配置,需要手动添加一个。
php-cli 配置如下
php-cli:
build:
context: ./php-cli
volumes:
- ../www:/var/www/html
tty: true
Dockerfile
FROM php:7.1-cli
COPY ./composer.phar /usr/local/bin/composer
RUN apt-get update && apt-get install -y git \
&& chmod 755 /usr/local/bin/composer
需要把 composer.phar 提前下载好,并放在 php-cli 目录下
进入容器
通过命令 docker exec -it dockerlnmp_php-cli_1 bash 进入容器来使用 composer 命令
dockerlnmp_php-cli_1 是 docker-compose 自动生成容器名称,你也可以自定义。
可以通过 docker-compose ps 来查看所有在运行的容器列表
docker-lnmp 多容器部署 Laravel 方案分享(转)的更多相关文章
- Docker之LNMP分布式容器部署
Docker之LNMP分布式容器部署 目录 Docker之LNMP分布式容器部署 一.项目模拟 1. 项目环境 2. 服务器环境 3. 任务需求 二.Linux系统基础镜像 三.Nginx 1. 建立 ...
- 【开源社交系统研发日记】利用 Docker 包 Laradock 服务器部署 Laravel & ThinkSNS+ 等程序实战(多项目)
什么是ThinkSNS+ ThinkSNS(简称TS),一款全平台综合性社交系统,为国内外大中小企业和创业者提供社会化软件研发及技术解决方案,目前最新版本为ThinkSNS+. 前段时间不知道抽上面疯 ...
- 利用 Docker 包 Laradock 服务器部署 Laravel & ThinkSNS+ 等程序实战(多项目)
什么是ThinkSNS+ ThinkSNS(简称TS),一款全平台综合性社交系统,为国内外大中小企业和创业者提供社会化软件研发及技术解决方案,目前最新版本为ThinkSNS+.ThinkSNS V4. ...
- docker之swarm容器部署及运维
1.概念 Docker Swarm 是 Docker 的集群管理工具.它将 Docker 主机池转变为单个虚拟 Docker 主机. Docker Swarm 提供了标准的 Docker API,所有 ...
- lnmp 环境下 部署 laravel 项目
出现错误 Warning: require(): open_basedir restriction in effect. File(/xxxx/vendor/autoload.php) is not ...
- docker容器日志收集方案(方案N,其他中间件传输方案)
由于docker虚拟化的特殊性导致日志收集方案的多样性和复杂性下面接收几个可能的方案 这个方案各大公司都在用只不过传输方式大同小异 中间件使用kafka是肯定的,kafka的积压与吞吐能力相当强悍 ...
- 容器部署解决方案Docker
容器部署解决方案Docker 课程目标 目标1:了解Docker与虚拟机的不同点,相比的优势 目标2:掌握Docker的启动方法 目标3:掌握Docker镜像操作 目标4:掌握Docker容器操作 ...
- Docker容器服务发现方案
一. 目的 在服务在容器中部署时,外部调用服务需要知道服务接口ip及端口号,这样导致部署时需要配置,从而增加部署的困难.本文档主要介绍如何使用ningx反向代理和consul进行自动化服务发 ...
- 服务器部署docker lnmp环境
一.安装dockerDocker要求运行在Centos 7上,要求系统为64位,系统内核版本3.10以上 1.uname -an 查看当前系统版本 2.yum -y install docker 下载 ...
随机推荐
- mybatis源码探索笔记-5(拦截器)
前言 mybatis中拦截器主要用来拦截我们在发起数据库请求中的关键步骤.其原理也是基于代理模式,自定义拦截器时要实现Interceptor接口,并且要对实现类进行标注,声明是对哪种组件的指定方法进行 ...
- 浅谈Java三大特性之继承
前言 简单用伪代码去介绍一些 父类与子类的构造函数问题 others 前言 类的继承性是面向对象语言的基本特性,多态性前提是继承性.Java 支持继承性和多态性.——Java从小白到大牛 继承:三大特 ...
- 解决PLSQL 查询后显示中文为问号(???)问题
我的问题已解决,在装oracle的服务器上配置了下面的两个环境变量后,重启服务器,重新录入中文,在查询即可正确显示中文. 原因: 本机(装oracle的服务器)没有配置数据库字符集环境变量,或是与数据 ...
- MySQL高级-索引1
1.索引是什么 索引(Index)是帮助MySQL高效获取数据的数据结构.可以得到索引的本质:索引是数据结构. 可以理解为“排好序的快速查找数据结构” 在数据之外,数据库系统还维护着满足特定查找算法的 ...
- Linux下给mysql创建用户并分配权限
// fe_group 用户名// fe 数据库名// 123456 密码 1.新建用户 //登录MYSQL @>mysql -u root -p @>密码 //创建用户 mysql> ...
- Codeforces Round #594 (Div. 2) - C. Ivan the Fool and the Probability Theory(思维)
题意:给n*m的网格涂黑白两种颜色,保证每个格子上下左右的四个格子中最多只有一个格子与自己颜色相同,问有多少种涂法?结果$mod1000000007$ 思路:先只考虑一行有多少种涂法 $dp[i][0 ...
- Linux centosVMware php-fpm的pool、php-fpm慢执行日志、open_basedir
一.php-fpm的pool vim /usr/local/php/etc/php-fpm.conf//在[global]部分增加 include = etc/php-fpm.d/*.conf mkd ...
- [RoarCTF2019]forensic
拿到raw文件拖到kali里,首先看镜像信息. volatility -f /root/mem.raw imageinfo 用建议的profile,Win7SP1x86.先查看下内存中的进程 vola ...
- 「BOI2007」Mokia
「BOI2007」Mokia 传送门 把查询拆成四部分然后容斥计算答案(二维前缀和) 然后 \(\text{CDQ}\) 分治算答案. 参考代码: #include <algorithm> ...
- 「CH6202」黑暗城堡
「CH6202」黑暗城堡 传送门 这道题是要让我们求以点 \(1\) 为源点的最短路树的方案数. 我们先跑一遍最短路,然后考虑类似 \(\text{Prim}\) 的过程. 当我们把点 \(x\) 加 ...