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在页面中调用fckeditor编辑器的方法
Jun 10 PHP
使用phpQuery采集网页的方法
Nov 13 PHP
php实现的支持断点续传的文件下载类
Sep 23 PHP
Thinkphp将二维数组变为标签适用的一维数组方法总结
Oct 30 PHP
php常用数学函数汇总
Nov 21 PHP
详解Grunt插件之LiveReload实现页面自动刷新(两种方案)
Jul 31 PHP
Symfony2联合查询实现方法
Mar 18 PHP
ThinkPHP静态缓存简单配置和使用方法详解
Mar 23 PHP
浅析PHP中的i++与++i的区别及效率
Jun 15 PHP
PHP搭建大文件切割分块上传功能示例
Jan 04 PHP
用php实现分页效果的示例代码
Dec 10 PHP
PHP RabbitMQ消息列队
May 11 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
PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等)
2014/04/21 PHP
浅析PHP文件下载原理
2014/12/25 PHP
详解PHP匿名函数与注意事项
2016/03/29 PHP
关于laravel 子查询 &amp; join的使用
2019/10/16 PHP
js 巧妙去除数组中的重复项
2010/01/25 Javascript
JS 文件大小判断的实现代码
2010/04/07 Javascript
有关于eclipse配置spket需要注意的一些地方
2013/04/07 Javascript
js replace(a,b)之替换字符串中所有指定字符的方法
2016/08/17 Javascript
JS+HTML5 FileReader对象用法示例
2017/04/07 Javascript
通过命令行生成vue项目框架的方法
2017/07/12 Javascript
详解js类型判断
2018/05/22 Javascript
QQ跳转支付宝并自动领红包脚本(最新)
2018/06/22 Javascript
JS事件绑定的常用方式实例总结
2019/03/02 Javascript
python 随机打乱 图片和对应的标签方法
2018/12/14 Python
python使用zip将list转为json的方法
2018/12/31 Python
python实现两张图片的像素融合
2019/02/23 Python
Python math库 ln(x)运算的实现及原理
2019/07/17 Python
基于h5py的使用及数据封装代码
2019/12/26 Python
python操作redis数据库的三种方法
2020/09/10 Python
使用pandas实现筛选出指定列值所对应的行
2020/12/13 Python
css3的transition效果和transfor效果示例介绍
2013/10/30 HTML / CSS
CSS3 实现的火焰动画
2020/12/07 HTML / CSS
html5 canvas手势解锁源码分享
2020/01/07 HTML / CSS
加拿大最大的箱包及旅游配件零售商:Bentley Leathers
2017/07/19 全球购物
德国家具购物网站:Möbel Höffner
2019/08/26 全球购物
中专生毕业自我鉴定
2013/11/01 职场文书
工作时间上网检讨书
2014/02/03 职场文书
班主任经验交流会主持词
2014/04/01 职场文书
意向书范本
2014/07/29 职场文书
教师廉洁自律个人总结
2015/02/10 职场文书
2015年医院创卫工作总结
2015/04/22 职场文书
经典哲理警句:志不真则心不热,心不热则功不贤
2019/11/14 职场文书
如何用JavaScript学习算法复杂度
2021/04/30 Javascript
Python中for后接else的语法使用
2021/05/18 Python
SpringBoot整合Minio文件存储
2022/04/03 Java/Android
vue3引入highlight.js进行代码高亮的方法实例
2022/04/08 Vue.js