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 相关文章推荐
PHP4中实现动态代理
Oct 09 PHP
一个数据采集类
Feb 14 PHP
PHP函数常用用法小结
Feb 08 PHP
PHP关于htmlspecialchars、strip_tags、addslashes的解释
Jul 04 PHP
php ci框架中加载css和js文件失败的原因及解决方法
Jul 29 PHP
PHP文件上传处理案例分析
Oct 15 PHP
php+croppic.js实现剪切上传图片功能
Aug 14 PHP
thinkPHP和onethink微信支付插件分享
Aug 11 PHP
tp5框架的增删改查操作示例
Oct 31 PHP
php 使用expat方式解析xml文件操作示例
Nov 26 PHP
php redis setnx分布式锁简单原理解析
Oct 23 PHP
PHP实现rar解压读取扩展包小结
Jun 03 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
cache_lite试用
2007/02/14 PHP
ZF等常用php框架中存在的问题
2008/01/10 PHP
PHP中的array数组类型分析说明
2010/07/27 PHP
PHP屏蔽蜘蛛访问代码及常用搜索引擎的HTTP_USER_AGENT
2013/03/06 PHP
php使用google地图应用实例
2014/12/31 PHP
Yii2验证器(Validator)用法分析
2016/07/23 PHP
laravel5实现微信第三方登录功能
2018/12/06 PHP
JavaScript Timer实现代码
2010/02/17 Javascript
jquery中防刷IP流量软件影响统计的一点对策
2011/07/10 Javascript
关于event.cancelBubble和event.stopPropagation()的区别介绍
2011/12/11 Javascript
使用jquery hover事件实现表格的隔行换色功能示例
2013/09/03 Javascript
关于JS数组追加数组采用push.apply的问题
2014/06/09 Javascript
JavaScript拆分字符串时产生空字符的解决方案
2014/09/26 Javascript
跟我学习javascript的循环
2015/11/18 Javascript
Jquery zTree 树控件异步加载操作
2016/02/25 Javascript
js获取页面及个元素高度、宽度的代码
2016/04/26 Javascript
非常实用的js验证框架实现源码 附原理方法
2016/06/08 Javascript
Mac下安装vue
2018/04/11 Javascript
axios 封装上传文件的请求方法
2018/09/26 Javascript
微信小程序云开发之数据库操作
2019/05/18 Javascript
springboot+vue+对接支付宝接口+二维码扫描支付功能(沙箱环境)
2020/10/15 Javascript
跨平台python异步回调机制实现和使用方法
2013/11/26 Python
Python操作mongodb的9个步骤
2018/06/04 Python
python定位xpath 节点位置的方法
2019/08/27 Python
Python中的单下划线和双下划线使用场景详解
2019/09/09 Python
用Python在Excel里画出蒙娜丽莎的方法示例
2020/04/28 Python
Python try except finally资源回收的实现
2021/01/25 Python
阿联酋网上花店:Ferns N Petals
2018/02/14 全球购物
越南综合购物网站:Lazada越南
2019/06/10 全球购物
戴尔荷兰官方网站:Dell荷兰
2020/10/04 全球购物
给老婆的搞笑检讨书
2014/01/12 职场文书
2015年全国“爱牙日”宣传活动总结
2015/03/23 职场文书
转正申请报告格式
2015/05/15 职场文书
Css预编语言及区别详解
2021/04/25 HTML / CSS
详解Mysql和Oracle之间的误区
2021/05/18 MySQL
前端JS获取URL参数的4种方法总结
2022/04/05 Javascript