zoukankan      html  css  js  c++  java
  • docker搭建php环境

    前言

    本文根据参考文章,自己动手试了搭建PHP环境,对里面的Dockerfile的编写
    做了最新的修改,以此记录,完整代码查看传送门
    说明:

    • 镜像下载过慢,可使用国内镜像加速,具体可自行查询
    • 根据此方法是 用了四个镜像,生成了四个容器,容器之间的启动,根据docker-compose管理
      当然也可以 用一个基础镜像,在此镜像的基础上 安装 nginx php等软件,容器也只有一个,就像本机安装一样

    目录结构

    app # 项目目录
    	index.php
    	test
    		-test.php
    data # 数据目录
    	mysql
    	redis
    
    logs # 日志目录
    	nginx
    	mysql
    	php-fpm
    
    docker_self # docker目录
    	docker-compose.yml
    	mysql
    		-Dockerfile
    		-conf.d
    			-my.conf
    	nginx
    		-Dockerfile
    		-nginx.conf
    		-conf.d
    			-www.conf
    	php
    		-Dokcerfile
    		-php-fpm.conf
    		-php-fom.d
    			-www.conf
    		-idc.ini
    	redis
    		-Dockerfile
    

    php的dockerfile

    FROM php:7.2-fpm
    
    # 设置时区
    ENV TZ=Asia/Shanghai
    RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
    
    # 更新安装依赖包和PHP核心拓展
    RUN apt-get update && apt-get install -y 
            git 
            libfreetype6-dev 
            libjpeg62-turbo-dev 
            libpng-dev 
        && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ 
        && docker-php-ext-install -j$(nproc) gd 
        && docker-php-ext-install zip 
        && docker-php-ext-install pdo_mysql 
        && docker-php-ext-install opcache 
        && docker-php-ext-install mysqli 
        && rm -r /var/lib/apt/lists/*
    
    
    # 安装 PECL 拓展,这里我们安装的是redis psr
    # 最新的phalcon扩展,需要 psr
    RUN pecl install redis-5.0.2 
        && pecl install psr 
        && docker-php-ext-enable redis psr
    
    # 安装第三方拓展,这里是 Phalcon 拓展
    RUN cd /home 
        && git clone --depth=1 git://github.com/phalcon/cphalcon.git 
        && cd cphalcon/build 
        && ./install 
        && echo "extension=phalcon.so" > /usr/local/etc/php/conf.d/phalcon.ini 
        && rm -rf /home/*
    
    # 添加配置文件,新添加的phalcon项目需要
    COPY idc.ini /data/app/idc/idc.ini
    
    WORKDIR /data
    
    • 我们使用了 php:7.2-fpm 的镜像
    • php的扩展安装分为 核心扩展 和 pcel扩展 以及源代码的安装
      具体可参考官方文档
    • phalcon的扩展,利用了git下载源文件的方式
      git在api-get时已安装

    其他的dockerfile

    nginx:

    FROM nginx:alpine
    
    # set timezome
    ENV TZ=Asia/Shanghai
    RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
    
    

    mysql:

    FROM mysql:5.7
    
    # set timezome
    ENV TZ=Asia/Shanghai
    RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
    
    

    redis:

    FROM redis:alpine
    
    # set timezome
    ENV TZ=Asia/Shanghai
    RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
    

    注意:

    • nginx的配置文件中 php-fpm 不为本机 127.0.0.1
      而且 docker-compose.yml中的名称 php-fpm

    docker-compose的编写

    version: '3.2'
    services:
      php-fpm:
        build: ./php
        ports:
          - "9000:9000"
        links:
          - mysql-db:mysql-db
          - redis-db:redis-db
        volumes:
          - ../app:/data/www:rw
          - ./php/php.ini:/usr/local/etc/php/php.ini:ro
          - ./php/php-fpm.conf:/usr/local/etc/php/php-fpm.conf:ro
          - ./php/php-fpm.d:/usr/local/etc/php/php-fpm.d:ro
          - ../logs/php-fpm:/var/logs/php-fpm
          - ../logs/contento:/data/logs/contento:rw
        restart: always
        command: php-fpm
    
      nginx:
        build: ./nginx
        depends_on:
          - php-fpm
        links:
          - php-fpm:php-fpm
        volumes:
          - ../app:/data/www:rw
          - ./nginx/conf.d:/etc/nginx/conf.d:ro
          - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
          - ../logs/nginx:/var/logs/nginx
        ports:
          - "80:80"
          - "8080:8080"
          - "443:443"
        restart: always
        command: nginx -g 'daemon off;'
    
      mysql-db:
          build: ./mysql
          ports:
            - "3306:3306"
          volumes:
            - ../data/mysql:/var/lib/mysql:rw
            - ../logs/mysql:/var/lib/mysql-logs:rw
            - ./mysql/conf.d:/etc/mysql/conf.d:ro
          environment:
            MYSQL_ROOT_PASSWORD: root
            MYSQL_DATABASE: test
            MYSQL_USER: test
            MYSQL_PASSWORD: test123
          restart: always
          command: "--character-set-server=utf8"
    
      redis-db:
          build: ./redis
          ports:
            - "6379:6379"
          volumes:
            - ../data/redis:/data
          restart: always
    
    • php以及nginx等的配置文件映射为外部文件
      方便修改其配置
    • 项目的日志文件以及nginx和php的日志文件映射为外部目录
      防止容器重启后,无日志的情况

    启动与停止

    • 编写好完毕后,可使用 docker-compose up 启动
      有错误,则根据输出调试
    • 启动没问题后,以后可使用 docker-compose up -d 后台启动
      docker container ls 查看启动容器
      docker image ls 查看镜像列表
    • 停止服务,可使用 docker-compose stop

    缺点

    • 镜像太大
      FROM php:7.2-fpm
      非 alpine的镜像,默认是以 ubanutu 为基础的,
      可以使用 apt-get,docker-php-ext-* 等命令
      但生成的镜像 非常大
      alpine镜像 只能 使用 apk 的方式安装软件包

    待做

    • alpine镜像的制作
    • laradock的使用

    参考

    参考文章
    官方文档
    传送门

  • 相关阅读:
    Java SE(2)
    Java SE(1)
    第二次作业
    Markdown 进阶
    关于主题
    Markdown入门指南
    网络游戏架构与微服务架构简单对比
    微服务框架的存储架构
    轻量级微服务框架的通信架构
    页面静态化
  • 原文地址:https://www.cnblogs.com/fanfan259/p/11526432.html
Copyright © 2011-2022 走看看