docker-compose部署php项目实例详解


Posted in PHP onJuly 30, 2019

1.制定特定扩展的PHP镜像

sudo mkdir -p /www/docker
sudo cd /www/docker
sudo vi Dockerfile
FROM php:7.2-fpm-alpine

MAINTAINER diaocheweide

RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories

RUN apk update && apk add --no-cache --virtual .build-deps \

    $PHPIZE_DEPS \

    curl-dev \

    imagemagick-dev \

    libtool \

    libxml2-dev \

    postgresql-dev \

    sqlite-dev \

    libmcrypt-dev \

    freetype-dev \

    libjpeg-turbo-dev \

    libpng-dev \

  && apk add --no-cache \

    curl \

    imagemagick \ mysql-client \

    postgresql-libs \

  && pecl install imagick \

  && pecl install mcrypt-1.0.1 \

  && docker-php-ext-install zip \

  && docker-php-ext-install pdo_mysql \

  && docker-php-ext-install opcache \

  && docker-php-ext-install mysqli \

  && docker-php-ext-enable mcrypt \

  && docker-php-ext-enable imagick \

  && docker-php-ext-install \

    curl \

    mbstring \

    pdo \

    pdo_mysql \

    pdo_pgsql \

    pdo_sqlite \

    pcntl \

    tokenizer \

    xml \

    zip \

    && docker-php-ext-install -j"$(getconf _NPROCESSORS_ONLN)" iconv \

  && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \

  && docker-php-ext-install -j"$(getconf _NPROCESSORS_ONLN)" gd \

  && pecl install -o -f redis \

  && rm -rf /tmp/pear \

  && docker-php-ext-enable redis \

  && rm -r /var/cache/apk/*

EXPOSE 9000

2.编写yml文件

sudo vi docker-compose.yml
version: '3.1'

services:

 nginx:

  image: nginx

  container_name: nginx

  restart: always

  ports:

   - "80:80"

   - "443:443"

  volumes:

   - /www/data/nginx/conf.d:/etc/nginx/conf.d

   - /www/default:/www/default

  networks:

   csl:

    ipv4_address: 172.18.0.2

 

 php:

  image: php:7.2-fpm-alpine-dcwd

  container_name: php7.2

  restart: always

  volumes:

   - /www/default:/www/default

  networks:

   csl:

    ipv4_address: 172.18.0.3 mysql5:

  image: mysql:5.7

  container_name: mysql5

  restart: always

  ports:

   - "3306:3306"

  environment:

   MYSQL_ROOT_PASSWORD: thisyourpassword

  volumes:

   - /www/data/mysql/mysql5:/var/lib/mysql #- /www/data/mysql/mysql5/conf/my.cnf:/etc/my.cnf

   #- /www/data/mysql/mysql5/init:/docker-entrypoint-initdb.d

  networks:

   csl:

    ipv4_address: 172.18.0.4 mysql8:

  image: mysql:8

  container_name: mysql8

  restart: always

  environment:

   MYSQL_ROOT_PASSWORD: thisyourpassword

  volumes:

   - /www/data/mysql/mysql8:/var/lib/mysql networks:

   csl:

    ipv4_address: 172.18.0.5

networks:

 csl:

  driver: bridge

  ipam:

   config:

    - subnet: 172.18.0.0/16

3.配置default.conf文件

sudo vi /www/data/nginx/default.conf
server {

  listen    80;

  server_name localhost;

  #charset koi8-r;

  #access_log /var/log/nginx/host.access.log main;

  location / {

    root  /www/default;

    index index.php index.html index.htm;

  }

  #error_page 404       /404.html;

  # redirect server error pages to the static page /50x.html

  #

  error_page  500 502 503 504 /50x.html;

  location = /50x.html {

    root  /usr/share/nginx/html;

  }

  # proxy the PHP scripts to Apache listening on 127.0.0.1:80

  #

  #location ~ \.php$ {

  #  proxy_pass  http://127.0.0.1;

  #}

  # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

  #

  location ~ \.php$ {

    root      /www/default;

    fastcgi_pass  php7.2:9000;#php容器名或者php容器ip

    fastcgi_index index.php;

    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

    include    fastcgi_params;

  }

  # deny access to .htaccess files, if Apache's document root

  # concurs with nginx's one

  #

  #location ~ /\.ht {

  #  deny all;

  #}

}

4.修改mysql允许远程连接并新建数据库

docker exec -it mysql5 bash

mysql -u root -p

use mysql;

update user set host='%' where user='root';

flush privileges;

5.创建并且启动容器

docker-compose up -d

6.新建index.php测试mysql连接

<?php

$con = mysqli_connect("172.18.0.4", "root", "thisyourpassword", "shop");

if ($con) {

  echo '连接 MYSQL 成功';

} else {

  echo "连接 MySQL 失败: " . mysqli_connect_error();

} mysqli_close($con);
PHP 相关文章推荐
PHP中防止SQL注入实现代码
Feb 19 PHP
php设计模式 Prototype (原型模式)代码
Jun 26 PHP
php daddslashes()和 saddslashes()有哪些区别分析
Oct 26 PHP
Could not load type System.ServiceModel.Activation.HttpModule解决办法
Dec 29 PHP
PHP中执行MYSQL事务解决数据写入不完整等情况
Jan 07 PHP
简单谈谈php中ob_flush和flush的区别
Nov 27 PHP
PHP之浮点数计算比较以及取整数不准确的解决办法
Jul 29 PHP
PHP表单提交后引号前自动加反斜杠的原因及三种办法关闭php魔术引号
Sep 30 PHP
THINKPHP3.2使用soap连接webservice的解决方法
Dec 13 PHP
PHPMailer ThinkPHP实现自动发送邮件功能
Jun 10 PHP
PHP生成二维码与识别二维码的方法详解【附源码下载】
Mar 07 PHP
PHP const定义常量及global定义全局常量实例解析
May 28 PHP
php 使用mpdf实现指定字段配置字体样式的方法
Jul 29 #PHP
laradock环境docker-compose操作详解
Jul 29 #PHP
php 根据URL下载远程图片、压缩包、pdf等文件到本地
Jul 26 #PHP
PHP中散列密码的安全性分析
Jul 26 #PHP
PHP基于timestamp和nonce实现的防止重放攻击方案分析
Jul 26 #PHP
YII2.0框架行为(Behavior)深入详解
Jul 26 #PHP
php使用socket调用http和smtp协议实例小结
Jul 26 #PHP
You might like
adodb与adodb_lite之比较
2006/12/31 PHP
简单采集了yahoo的一些数据
2007/02/14 PHP
腾讯QQ微博API接口获取微博内容
2013/10/30 PHP
Thinkphp将二维数组变为标签适用的一维数组方法总结
2014/10/30 PHP
PHP回溯法解决0-1背包问题实例分析
2015/03/23 PHP
PHP微信支付实例解析
2016/07/22 PHP
php学习笔记之mb_strstr的基本使用
2018/02/03 PHP
PHP实现的函数重载功能示例
2018/08/03 PHP
JavaScript中的作用域链和闭包
2012/06/30 Javascript
Javascript的闭包详解
2014/12/26 Javascript
解析Node.js基于模块和包的代码部署方式
2016/02/16 Javascript
bootstrap实现图片自动轮播
2016/12/21 Javascript
jQuery实现html table行Tr的复制、删除、计算功能
2017/07/10 jQuery
小程序异步问题之多个网络请求依次执行并依次收集请求结果
2019/05/05 Javascript
详解Vue的ref特性的使用
2020/01/24 Javascript
JavaScript设计模式之门面模式原理与实现方法分析
2020/03/09 Javascript
OpenLayers3实现鼠标移动显示坐标
2020/09/25 Javascript
vue3.0+vue-router+element-plus初实践
2020/12/02 Vue.js
[01:03:36]DOTA2-DPC中国联赛 正赛 VG vs Magma BO3 第二场 1月26日
2021/03/11 DOTA
itchat接口使用示例
2017/10/23 Python
python实现协同过滤推荐算法完整代码示例
2017/12/15 Python
利用python库在局域网内传输文件的方法
2018/06/04 Python
python topN 取最大的N个数或最小的N个数方法
2018/06/04 Python
Python configparser模块配置文件过程解析
2020/03/03 Python
Django用户登录与注册系统的实现示例
2020/06/03 Python
python利用paramiko实现交换机巡检的示例
2020/09/22 Python
python如何提升爬虫效率
2020/09/27 Python
python修改微信和支付宝步数的示例代码
2020/10/12 Python
Monica Vinader官网:英国轻奢珠宝品牌
2020/02/05 全球购物
美国名牌香水折扣网站:Hottperfume
2021/02/10 全球购物
销售总监岗位职责
2014/01/04 职场文书
党的群众路线对照检查材料
2014/09/22 职场文书
人身损害赔偿协议书格式
2014/11/01 职场文书
整改报告怎么写
2014/11/06 职场文书
2015年前台接待工作总结
2015/05/04 职场文书
中小学生安全教育观后感
2015/06/17 职场文书