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 相关文章推荐
建立文件交换功能的脚本(二)
Oct 09 PHP
php中理解print EOT分界符和echo EOT的用法区别小结
Feb 21 PHP
PHP 文本文章分页代码 按标记或长度(不涉及数据库)
Jun 07 PHP
php setcookie函数的参数说明及其用法
Apr 20 PHP
PHP正则替换函数preg_replace和preg_replace_callback使用总结
Sep 22 PHP
ThinkPHP中公共函数路径和配置项路径的映射分析
Nov 22 PHP
ThinkPHP提交表单时默认自动转义的解决方法
Nov 25 PHP
培养自己的php编码规范
Sep 28 PHP
PHP错误处理函数
Apr 03 PHP
微信网页授权(OAuth2.0) PHP 源码简单实现
Aug 29 PHP
CI框架数据库查询缓存优化的方法
Nov 21 PHP
laravel框架中控制器的创建和使用方法分析
Nov 23 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
咖啡常见的种类
2021/03/03 新手入门
php 解压rar文件及zip文件的方法
2014/05/05 PHP
destoon安装出现Internal Server Error的解决方法
2014/06/21 PHP
JavaScript中的Screen屏幕对象
2008/01/16 Javascript
非常棒的10款jQuery 幻灯片插件
2011/06/14 Javascript
jQuery调用WebService的实现代码
2011/06/19 Javascript
jquery插件制作教程 txtHover
2012/08/17 Javascript
jquery多行滚动/向左或向上滚动/响应鼠标实现思路及代码
2013/01/23 Javascript
Javascript设置对象的ReadOnly属性(示例代码)
2013/12/25 Javascript
给js文件传参数(详解)
2014/07/13 Javascript
node.js中watch机制详解
2014/11/17 Javascript
jQuery实现的数值范围range2dslider选取插件特效多款代码分享
2015/08/27 Javascript
使用纯JS代码判断字符串中有多少汉字的实现方法(超简单实用)
2016/11/12 Javascript
移动端js图片查看器
2016/11/17 Javascript
js 原型对象和原型链理解
2017/02/09 Javascript
Webpack打包css后z-index被重新计算的解决方法
2017/06/18 Javascript
JavaScript简单实现关键字文本搜索高亮显示功能示例
2018/07/25 Javascript
node实现mock-plugin中间件的方法
2019/12/25 Javascript
Vue事件处理原理及过程详解
2020/03/11 Javascript
Antd的Table组件嵌套Table以及选择框联动操作
2020/10/24 Javascript
利用Python绘制MySQL数据图实现数据可视化
2015/03/30 Python
python结合API实现即时天气信息
2016/01/19 Python
python 动态加载的实现方法
2017/12/22 Python
python 删除非空文件夹的实例
2018/04/26 Python
Linux下安装python3.6和第三方库的教程详解
2018/11/09 Python
python实现kNN算法识别手写体数字的示例代码
2019/08/16 Python
python采集百度搜索结果带有特定URL的链接代码实例
2019/08/30 Python
Python3离线安装Requests模块问题
2019/10/13 Python
如何基于Python Matplotlib实现网格动画
2020/07/20 Python
使用jupyter notebook运行python和R的步骤
2020/08/13 Python
PyCharm Ctrl+Shift+F 失灵的简单有效解决操作
2021/01/15 Python
html5本地存储 localStorage操作使用详解
2016/09/20 HTML / CSS
毕业生自我鉴定范文
2013/11/08 职场文书
售票员岗位职责
2015/02/15 职场文书
Golang的继承模拟实例
2021/06/30 Golang
mysql 8.0.27 绿色解压版安装教程及配置方法
2022/04/20 MySQL