当前位置:首页 > PHP教程 > php环境安装 > 列表

docker-compose部署php项目实例详解

发布:smiling 来源: PHP粉丝网  添加日期:2021-12-08 10:33:59 浏览: 评论:0 

在本篇文章里小编给大家整理了关于docker-compose部署php项目的相关实例以及代码内容,有需要的朋友们可以学习参考下。

1.制定特定扩展的PHP镜像

sudo mkdir -p /www/docker

sudo cd /www/docker

sudo vi Dockerfile

  1. FROM php:7.2-fpm-alpine 
  2.  
  3. MAINTAINER diaocheweide 
  4.  
  5. RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories 
  6.  
  7. RUN apk update && apk add --no-cache --virtual .build-deps \ 
  8.  
  9.     $PHPIZE_DEPS \ 
  10.  
  11.     curl-dev \ 
  12.  
  13.     imagemagick-dev \ 
  14.  
  15.     libtool \ 
  16.  
  17.     libxml2-dev \ 
  18.  
  19.     postgresql-dev \ 
  20.  
  21.     sqlite-dev \ 
  22.  
  23.     libmcrypt-dev \ 
  24.  
  25.     freetype-dev \ 
  26.  
  27.     libjpeg-turbo-dev \ 
  28.  
  29.     libpng-dev \ 
  30.  
  31.   && apk add --no-cache \ 
  32.  
  33.     curl \ 
  34.  
  35.     imagemagick \ mysql-client \ 
  36.  
  37.     postgresql-libs \ 
  38.  
  39.   && pecl install imagick \ 
  40.  
  41.   && pecl install mcrypt-1.0.1 \ 
  42.  
  43.   && docker-php-ext-install zip \ 
  44.  
  45.   && docker-php-ext-install pdo_mysql \ 
  46.  
  47.   && docker-php-ext-install opcache \ 
  48.  
  49.   && docker-php-ext-install mysqli \ 
  50.  
  51.   && docker-php-ext-enable mcrypt \ 
  52.  
  53.   && docker-php-ext-enable imagick \ 
  54.  
  55.   && docker-php-ext-install \ 
  56.  
  57.     curl \ 
  58.  
  59.     mbstring \ 
  60.  
  61.     pdo \ 
  62.  
  63.     pdo_mysql \ 
  64.  
  65.     pdo_pgsql \ 
  66.  
  67.     pdo_sqlite \ 
  68.  
  69.     pcntl \ 
  70.  
  71.     tokenizer \ 
  72.  
  73.     xml \ 
  74.  
  75.     zip \ 
  76.  
  77.     && docker-php-ext-install -j"$(getconf _NPROCESSORS_ONLN)" iconv \ 
  78.  
  79.   && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \ 
  80.  
  81.   && docker-php-ext-install -j"$(getconf _NPROCESSORS_ONLN)" gd \ 
  82.  
  83.   && pecl install -o -f redis \ 
  84.  
  85.   && rm -rf /tmp/pear \ 
  86.  
  87.   && docker-php-ext-enable redis \ 
  88.  
  89.   && rm -r /var/cache/apk/* 
  90.  
  91. EXPOSE 9000 

2.编写yml文件

sudo vi docker-compose.yml

  1. version: '3.1' 
  2.  
  3. services: 
  4.  
  5.  nginx: 
  6.  
  7.   image: nginx 
  8.  
  9.   container_name: nginx 
  10.  
  11.   restart: always 
  12.  
  13.   ports: 
  14.  
  15.    - "80:80" 
  16.  
  17.    - "443:443" 
  18.  
  19.   volumes: 
  20.  
  21.    - /www/data/nginx/conf.d:/etc/nginx/conf.d 
  22.  
  23.    - /www/default:/www/default 
  24.  
  25.   networks: 
  26.  
  27.    csl: 
  28.  
  29.     ipv4_address: 172.18.0.2 
  30.  
  31.    
  32.  
  33.  php: 
  34.  
  35.   image: php:7.2-fpm-alpine-dcwd 
  36.  
  37.   container_name: php7.2 
  38.  
  39.   restart: always 
  40.  
  41.   volumes: 
  42.  
  43.    - /www/default:/www/default 
  44.  
  45.   networks: 
  46.  
  47.    csl: 
  48.  
  49.     ipv4_address: 172.18.0.3 mysql5: 
  50.  
  51.   image: mysql:5.7 
  52.  
  53.   container_name: mysql5 
  54.  
  55.   restart: always 
  56.  
  57.   ports: 
  58.  
  59.    - "3306:3306" 
  60.  
  61.   environment: 
  62.  
  63.    MYSQL_ROOT_PASSWORD: thisyourpassword 
  64.  
  65.   volumes: 
  66.  
  67.    - /www/data/mysql/mysql5:/var/lib/mysql #- /www/data/mysql/mysql5/conf/my.cnf:/etc/my.cnf 
  68.  
  69.    #- /www/data/mysql/mysql5/init:/docker-entrypoint-initdb.d 
  70.  
  71.   networks: 
  72.  
  73.    csl: 
  74.  
  75.     ipv4_address: 172.18.0.4 mysql8: 
  76.  
  77.   image: mysql:8 
  78.  
  79.   container_name: mysql8 
  80.  
  81.   restart: always 
  82.  
  83.   environment: 
  84.  
  85.    MYSQL_ROOT_PASSWORD: thisyourpassword 
  86.  
  87.   volumes: 
  88.  
  89.    - /www/data/mysql/mysql8:/var/lib/mysql networks: 
  90.  
  91.    csl: 
  92.  
  93.     ipv4_address: 172.18.0.5 
  94.  
  95. networks: 
  96.  
  97.  csl: 
  98.  
  99.   driver: bridge 
  100.  
  101.   ipam: 
  102.  
  103.    config: 
  104.  
  105.     - subnet: 172.18.0.0/16 

3.配置default.conf文件

sudo vi /www/data/nginx/default.conf

  1. server { 
  2.  
  3.   listen    80; 
  4.  
  5.   server_name localhost; 
  6.  
  7.   #charset koi8-r; 
  8.  
  9.   #access_log /var/log/nginx/host.access.log main; 
  10.  
  11.   location / { 
  12.  
  13.     root  /www/default
  14.  
  15.     index index.php index.html index.htm; 
  16.  
  17.   } 
  18.  
  19.   #error_page 404       /404.html; 
  20.  
  21.   # redirect server error pages to the static page /50x.html 
  22.  
  23.   # 
  24.  
  25.   error_page  500 502 503 504 /50x.html; 
  26.  
  27.   location = /50x.html { 
  28.  
  29.     root  /usr/share/nginx/html; 
  30.  
  31.   } 
  32.  
  33.   # proxy the PHP scripts to Apache listening on 127.0.0.1:80 
  34.  
  35.   # 
  36.  
  37.   #location ~ \.php$ { 
  38.  
  39.   #  proxy_pass  http://127.0.0.1; 
  40.  
  41.   #} 
  42.  
  43.   # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 
  44.  
  45.   # 
  46.  
  47.   location ~ \.php$ { 
  48.  
  49.     root      /www/default
  50.  
  51.     fastcgi_pass  php7.2:9000;#php容器名或者php容器ip 
  52.  
  53.     fastcgi_index index.php; 
  54.  
  55.     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name
  56.  
  57.     include    fastcgi_params; 
  58.  
  59.   } 
  60.  
  61.   # deny access to .htaccess files, if Apache's document root 
  62.  
  63.   # concurs with nginx's one 
  64.  
  65.   # 
  66.  
  67.   #location ~ /\.ht { 
  68.  
  69.   #  deny all; 
  70.  
  71.   #} 
  72.  

4.修改mysql允许远程连接并新建数据库

  1. docker exec -it mysql5 bash 
  2.  
  3. mysql -u root -p 
  4.  
  5. use mysql; 
  6.  
  7. update user set host='%' where user='root'
  8.  
  9. flush privileges; 

5.创建并且启动容器

docker-compose up -d

6.新建index.php测试mysql连接

  1. <?php 
  2.  
  3. $con = mysqli_connect("172.18.0.4""root""thisyourpassword""shop"); 
  4.  
  5. if ($con) { 
  6.  
  7.   echo '连接 MYSQL 成功'
  8.  
  9. else { 
  10.  
  11.   echo "连接 MySQL 失败: " . mysqli_connect_error(); 
  12.  
  13. } mysqli_close($con);

Tags: docker-compose

分享到: