• 技术文章 >后端开发 >php教程

    docker-compose部署php项目

    藏色散人藏色散人2019-08-13 17:59:38转载3993
    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);

    以上就是docker-compose部署php项目的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:jikeyuan,如有侵犯,请联系admin@php.cn删除
    专题推荐:php docker-compose
    上一篇:安装docker和docker-compose 下一篇:PHP之十六个魔术方法详解(总结)
    Web大前端开发直播班

    相关文章推荐

    • Docker cpu限制分析• docker环境怎么安装WordPress• laradock环境docker-compose操作• 安装docker和docker-compose
    1/1

    PHP中文网