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 Mysql日期和时间函数集合
Nov 16 PHP
php daodb插入、更新与删除数据
Mar 19 PHP
使用cookie实现统计访问者登陆次数
Jun 08 PHP
PHP生成随机密码类分享
Jun 25 PHP
PHP 快速排序算法详解
Nov 10 PHP
php去除数组中重复数据
Nov 18 PHP
PHP获取网页所有连接的方法(附demo源码下载)
Mar 30 PHP
php 静态属性和静态方法区别详解
Apr 09 PHP
php简单实现单态设计模式的方法分析
Jul 28 PHP
php生成条形码的图片的实例详解
Sep 13 PHP
Laravel的Auth验证Token验证使用自定义Redis的例子
Sep 30 PHP
如何在centos8自定义目录安装php7.3
Nov 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
索尼ICF-SW100收音机评测
2021/03/02 无线电
.htaccess文件保护实例讲解
2011/02/06 PHP
php + ajax 实现的写入数据库操作简单示例
2020/05/16 PHP
PHP获取类私有属性的3种方法
2020/09/10 PHP
Javascript中的var_dump函数实现代码
2009/09/07 Javascript
Jquery判断IE6等浏览器的代码
2011/04/05 Javascript
js 代码优化点滴记录
2012/02/19 Javascript
jQuery中用dom操作替代正则表达式
2014/12/29 Javascript
jQuery实现3D文字特效的方法
2015/03/10 Javascript
JavaScript中的原始值和复杂值
2016/01/07 Javascript
JavaScript中数组去除重复的三种方法
2016/04/22 Javascript
详解JavaScript中this关键字的用法
2016/05/26 Javascript
JS实现给对象动态添加属性的方法
2017/01/05 Javascript
jQuery阻止移动端遮罩层后页面滚动
2017/03/15 Javascript
浅谈angularjs中响应回车事件
2017/04/24 Javascript
jquery+ajax实现省市区三级联动 (封装和不封装两种方式)
2017/05/15 jQuery
docker中编译nodejs并使用nginx启动
2017/06/23 NodeJs
Vue的MVVM实现方法
2017/08/16 Javascript
浅谈js的解析顺序 作用域 严格模式
2017/10/23 Javascript
基于vue-cli vue-router搭建底部导航栏移动前端项目
2018/02/28 Javascript
vue路由组件按需加载的几种方法小结
2018/07/12 Javascript
记录一篇关于redux-saga的基本使用过程
2018/08/18 Javascript
nodejs 使用 js 模块的方法实例详解
2018/12/04 NodeJs
详解ES6 export default 和 import语句中的解构赋值
2019/05/28 Javascript
如何解决vue在ios微信&quot;复制链接&quot;功能问题
2020/03/26 Javascript
全面解析JavaScript Module模式
2020/07/24 Javascript
JavaScript获取时区实现过程解析
2020/09/24 Javascript
[01:42]辉夜杯战队访谈宣传片—FANTUAN
2015/12/25 DOTA
[01:15]PWL S2开团时刻第二期——他们杀 我就白给
2020/11/25 DOTA
浅析Python中的序列化存储的方法
2015/04/28 Python
对pyqt5之menu和action的使用详解
2019/06/20 Python
python如何导出微信公众号文章方法详解
2020/08/31 Python
解决pycharm不能自动保存在远程linux中的问题
2021/02/06 Python
美国机场停车位预订:About Airport Parking
2018/03/26 全球购物
2015年度酒店客房部工作总结
2015/05/25 职场文书
Django项目如何获得SSL证书与配置HTTPS
2021/04/30 Python