zoukankan      html  css  js  c++  java
  • Docker配置PHP+Nginx+MySQL

    安装MySQL

    • 获取镜像

      docker pull mysql			      # 获取mysql镜像
      
    • 创建测试容器

      # a347a5928046 MySQL镜像ID
      # mysql_test 测试容器名称
      # /mysql/conf 宿主机mysql配置文件夹
      docker run -d -p 23306:3306 --name mysql_test a347a5928046
      # 复制/etc/mysql/my.cnf到宿主主机
      docker cp mysql_test:/etc/mysql/my.cnf /mysql/conf
      
    • 创建正式容器

      # 上面的测试容器可删除
      docker run -d -p 23306:3306 --name mysql8  
      -v $PWD/mysql/conf/my.cnf:/etc/mysql/my.cnf 
      -v $PWD/mysql/data:/var/lib/mysql 
      -e MYSQL_ROOT_PASSWORD=123456 
      --privileged=true 
      a347a5928046
      

    安装Nginx

    • 映射目录结构

      docker_www					# docker_www 主目录
      	-mysql					# mysql
      		--conf				# 放配置文件
      		--data				# 同步数据文件夹
      	-nginx					# nginx
      		--conf.d			# 扩展配置
      			--dq.conf		# 新增配置文件
      		--logs				# 日志
      		--nginx.conf		        # nginx主配置文件
      	-www					# www目录->/usr/share/html
      		--index.html		        # 测试html文件,写入 <p>hello docker nginx</p>
      		--info.php			# 写入 phpinfo
      
    • 获取镜像

      docker pull nginx		                # 获取nginx基础镜像
      
    • 创建测试容器

      # ae2feff98a0c nginx的镜像ID
      # PWD 当前目录, 我这里进入的是docker_www目录
      docker run -d -p 8080:80 -v $PWD/www:/usr/share/html --name nginx_test ae2feff98a0c
      # 测试访问
      curl 127.0.0.1:8080
      #输出
      <p>hello docker nginx</p>
      
    • 创建可挂载目录Nginx容器

      # ae2feff98a0c nginx的镜像ID
      # PWD 当前目录, 我这里进入的是docker_www目录
      # nginx.conf 可以从上一个测试容器中复制出来,操作命令如下:
      # docker cp 容器名称:/etc/nginx/nginx.conf 宿主机目录
      # docker cp new_nginx_web_1:/etc/nginx/nginx.conf .
      docker run -d -p 8080:80 --name new_nginx_web_1  /
      -v $PWD/nginx/nginx.conf:/etc/nginx/nginx.conf /
      -v $PWD/nginx/conf.d:/etc/nginx/conf.d /
      -v $PWD/www:/usr/share/nginx/html /
      -v $PWD/nginx/logs:/var/log/nginx /
      ae2feff98a0c
      

    安装PHP

    • 获取php镜像

      docker pull php:7.1-fpm		                  # 获取php基础镜像
      
    • 创建测试PHP镜像

      # 创建容器
      # 404422fc039e php镜像ID
      docker run -d -v $PWD/www:/var/www/html -p 9000:9000 --name phpfpm_test 404422fc039e
      
    • 创建正式PHP镜像

      # 先从上一个测试镜像中将配置文件都复制出来
      # 当前处于php目录下
      docker cp phpfpm_test:/usr/local/var/log log		# 复制日志
      docker cp phpfpm_test:/usr/local/etc conf		# 复制配置文件
      
      # 创建
       docker run -d -p 9000:9000  
       -v $PWD/php/conf:/usr/local/etc 
       -v $PWD/php/log:/usr/local/var/log 
       -v $PWD/www:/var/www/html 
       --link mysql8:mysql8.0				# 关联mysql8容器
       --name phpfpm_7.1 
       404422fc039e
       
       ### notcie
       ### 如果mysql无法运行,需要到容器中开启pdo扩展
      

    镜像互联

    • Nginx 链接 PHP

      # ae2feff98a0c nginx的镜像ID
      # PWD 当前目录, 我这里进入的是docker_www目录
      # php7.1设置的链接别名,在nginx容器中可以使用
      docker run -d -p 8080:80 --name new_nginx_web_1  
      -v $PWD/nginx/nginx.conf:/etc/nginx/nginx.conf  
      -v $PWD/www:/usr/share/nginx/html  
      -v $PWD/nginx/logs:/var/log/nginx  
      --link phpfpm_test:php7.1  
      ae2feff98a0c
      
    • conf.d/dq.conf文件配置

      # php7.1 就是在创建的容器时 `--link phpfpm_test:php7.1`
      # 在容器中的/etc/hosts文件中,172.17.0.3  php7.1
      server {
          charset utf-8;
          client_max_body_size 128M;
      
          listen 80; ## listen for ipv4
          #listen [::]:80 default_server ipv6only=on; ## listen for ipv6
      
          server_name mine.nginx.com;
          root        /var/www/html;
          index       index index.html index.php;
      
          location / {
              #-e表示只要filename存在,则为真
              if (!-e $request_filename){
                  rewrite  ^(.*)$  /index.php?s=$1  last;
                  break;
              }
              # Redirect everything that isn't a real file to index.php
              try_files $uri $uri/ /index.php$is_args$args;
          }
      
          # uncomment to avoid processing of calls to non-existing static files by Yii
          #location ~ .(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {
          #    try_files $uri =404;
          #}
          #error_page 404 /404.html;
      
          # deny accessing php files for the /assets directory
          location ~ ^/assets/.*.php$ {
              deny all;
          }
      
          location ~ .php$ {
              root           /var/www/html;
              fastcgi_pass   php7.1:9000;
              fastcgi_index  index.php;
              fastcgi_split_path_info  ^((?U).+.php)(/?.+)$;
              fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
              fastcgi_param  PATH_INFO  $fastcgi_path_info;
              fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_path_info;
              include        fastcgi_params;
      
              #include fastcgi_params;
              #fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
              #fastcgi_pass 172.17.0.3:9000;
              #fastcgi_pass unix:/var/run/php5-fpm.sock;
              #try_files $uri =404;
          }
      
          location ~* /. {
              deny all;
          }
      }
      
    • 测试请求

      curl 127.0.0.1:8080/info.php
      
    想生活,不想谋生
  • 相关阅读:
    Linux之安装python3.6.6
    Python之计算器
    springboot项目快速代码生成工具
    电脑忘记密码怎么办?
    HTML编辑器
    WCF的几种寄宿方式
    获取客户端IP 和 外网IP
    发送短信验证码
    动态库,服务tips
    asp.net WebService 与 WCF的区别
  • 原文地址:https://www.cnblogs.com/Daneil/p/14206522.html
Copyright © 2011-2022 走看看