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 $_SERVER详解
Jan 16 PHP
php下保存远程图片到本地的办法
Aug 08 PHP
PHP include_path设置技巧分享
Jul 03 PHP
php使用curl和正则表达式抓取网页数据示例
Apr 13 PHP
PHP操作文件的一些基本函数使用示例
Nov 18 PHP
PHP设计模式之适配器模式代码实例
May 11 PHP
laravel学习教程之关联模型
Jul 30 PHP
DEDE实现转跳属性文档在模板上调用出转跳地址
Nov 04 PHP
php获取访问者浏览页面的浏览器类型
Jan 23 PHP
PHP实现的简单sha1加密功能示例
Aug 27 PHP
Django 标签筛选的实现代码(一对多、多对多)
Sep 05 PHP
php 中的信号处理操作实例详解
Mar 04 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抓取页面的几种方法详解
2013/06/17 PHP
基于PHP后台的Android新闻浏览客户端
2016/05/23 PHP
javascript mouseover、mouseout停止事件冒泡的解决方案
2009/04/07 Javascript
Javascript 获取链接(url)参数的方法[正则与截取字符串]
2010/02/09 Javascript
基于jquery实现漂亮的动态信息提示效果
2011/08/02 Javascript
图片在浏览器中底部对齐 解决方法之一
2011/11/30 Javascript
33个优秀的 jQuery 图片展示插件分享
2012/03/14 Javascript
JavaScript中的常见问题解决方法(乱码,IE缓存,代理)
2013/11/28 Javascript
JavaScript事件用法浅析
2016/10/31 Javascript
jQuery实现鼠标滑过图片移动特效
2016/12/08 Javascript
简单实现js倒计时功能
2017/02/13 Javascript
vue2.0 实现导航守卫(路由守卫)
2018/05/21 Javascript
H5+css3+js搭建带验证码的登录页面
2020/10/11 Javascript
[58:12]Ti4第二日主赛事败者组 LGD vs iG 3
2014/07/21 DOTA
[47:42]Fnatic vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
对Python新手编程过程中如何规避一些常见问题的建议
2015/04/01 Python
python3实现读取chrome浏览器cookie
2016/06/19 Python
Python自定义类的数组排序实现代码
2016/08/28 Python
Python 3.x 连接数据库示例(pymysql 方式)
2017/01/19 Python
浅谈python日志的配置文件路径问题
2018/04/28 Python
python使用Matplotlib画条形图
2020/03/25 Python
django重新生成数据库中的某张表方法
2019/08/28 Python
CSS3 input框的实现代码类似Google登录的动画效果
2020/08/04 HTML / CSS
html5定制表单_动力节点Java学院整理
2017/07/11 HTML / CSS
HTML5 Canvas 旋转风车绘制
2017/08/18 HTML / CSS
俄罗斯香水和化妆品在线商店:Aroma-butik
2020/02/28 全球购物
工程师岗位职责
2013/11/08 职场文书
采购人员的个人自我评价
2014/01/16 职场文书
幼儿园英语教学反思
2014/01/30 职场文书
矿泉水广告词
2014/03/20 职场文书
大学生就业意向书范文
2014/04/01 职场文书
化工实习心得体会
2014/09/09 职场文书
工人先锋号事迹材料
2014/12/24 职场文书
我的兄弟姐妹观后感
2015/06/15 职场文书
React Hook用法示例详解(6个常见hook)
2021/04/28 Javascript
HTML5简单实现添加背景音乐的几种方法
2021/05/12 HTML / CSS