zoukankan      html  css  js  c++  java
  • Docke如何配置Nginx和PHP

    一、创建桥接网络

    想要Nginx和PHP通信的话。新版本,需要使用桥接网络。

    docker network create web-net
    

    docker network的常用命令如下:
    connect:将容器加入到指定网络中;
    create:创建网络;
    disconnect:将容器中网络中移除;
    inspect:查看指定网络的详情;
    ls:列出所有网络;
    rm:删除指定网络;

    二、PHP的部署

    1. 搜索php镜像

      docker search php
      

      实例

      [root@localhost ~]# docker search php
      INDEX       NAME                                 DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
      docker.io   docker.io/php                        While designed for web development, the PH...   5392      [OK]       
      ...
      docker.io   docker.io/bitnami/phpmyadmin         Bitnami Docker Image for phpMyAdmin             20                   [OK]
      docker.io   docker.io/phpdockerio/php72-fpm      PHP 7.2 FPM base container for PHPDocker.io.    20                   [OK]
      docker.io   docker.io/bitnami/phpbb              Bitnami Docker Image for phpBB                  16                   [OK]
      docker.io   docker.io/phpdockerio/php56-fpm      PHP 5.6 FPM base container for PHPDocker.io     16                   [OK]
      docker.io   docker.io/phpdockerio/php7-fpm       PHP 7 FPM base container for PHPDocker.io.      15                   [OK]
      ...
      

      需要使用-fpm结尾的php镜像。这里选择的是php72-fpm

    2. 拉取镜像

      docker pull phpdockerio/php72-fpm
      

      实例:

      root@localhost ~]# docker pull phpdockerio/php72-fpm
      Using default tag: latest
      Trying to pull repository docker.io/phpdockerio/php72-fpm ... 
      latest: Pulling from docker.io/phpdockerio/php72-fpm
      7595c8c21622: Pull complete 
      d13af8ca898f: Pull complete 
      70799171ddba: Pull complete 
      b6c12202c5ef: Pull complete 
      f4791a7b36d8: Pull complete 
      91077145dd92: Pull complete 
      7c27716a1667: Pull complete 
      a82735fb4433: Pull complete 
      Digest: sha256:5a0eaa3e80263a1a77c83ba0542b1520bcb6529b951d741bfbcefc18e0516d0c
      Status: Downloaded newer image for docker.io/phpdockerio/php72-fpm:latest
      
    3. 创建容器

      docker run -d --name myweb -v /www/web:/web --privileged=true  --network web-net phpdockerio/php72-fpm
      

      -v 目录映射,当前系统下的/www/web,映射到容器下的/web目录下。
      --privileged=true 应用容器 获取宿主机root权限
      【共享文件系统详情参见目录映射的官方文档
      -d 后台运行容器
      --network web-net 使用web-net网络,与nginx保持一致的网络。

      实例:

      [root@localhost web]# docker run -d --name myweb -v /www/web:/web --privileged=true  --network web-net phpdockerio/php72-fpm
      321e22d017602022bcc232bb9a7d4331b31787ae93630934f012fcd616bad46c
      [root@localhost web]# docker ps
      CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS              PORTS                NAMES
      321e22d01760        phpdockerio/php72-fpm   "/bin/sh -c /usr/b..."   23 seconds ago      Up 22 seconds       9000/tcp             myweb
      5823a87b236e        nginx                   "/docker-entrypoin..."   42 minutes ago      Up 33 minutes       0.0.0.0:80->80/tcp   jovial_engelbart
      

      这里创建了名称为myweb的php的容器。

    三、Nginx部署

    1. 创建Nginx配置文件

      mkdir -p /www/conf/conf.d
      
    2. 写入配置信息
      在该目录下添加/www/conf/conf.d/default.conf文件,写入web的配置信息,内容如下:

      server {
          listen       80;
          server_name  localhost;
      
          location / {
              root   /usr/share/nginx/html;
              index  index.html index.htm index.php;
          }
      
          error_page   500 502 503 504  /50x.html;
          location = /50x.html {
              root   /usr/share/nginx/html;
          }
      
          location ~ .php$ {
              fastcgi_pass   myweb:9000;
              fastcgi_index  index.php;
              fastcgi_param  SCRIPT_FILENAME  /web/$fastcgi_script_name;
              include        fastcgi_params;
          }
      }
      

      myweb:9000 表示使用myweb容器的9000端口。
      /web/是php 文件的存储路径,映射到本地的/www/web目录。

    3. 启动Nginx容器

      # 1.拉取容器
      docker pull nginx
      # 2.启动容器
      docker run -d -p 80:80 --network web-net --privileged=true -v /www/web:/usr/share/nginx/html -v /www/conf/conf.d:/etc/nginx/conf.d nginx
      

      -p 80:80 端口映射,把宿主机的80映射到容器的80 端口。
      /www/web 是本地html文件的存储目录,/usr/share/nginx/html是容器内html文件的存储目录
      /www/conf/conf.d 是本地nginx配置文件的存储目录,/etc/nginx/conf.d是容器内nginx配置文件的存储目录
      --network web-net 是同一个网络,保证Nginx能和php通信。

      实例:

      [root@localhost ~]# docker images
      REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
      centos              httpd               7e03de04b894        3 days ago          255 MB
      docker.io/mysql     latest              e3fcc9e1cc04        12 days ago         544 MB
      docker.io/php       latest              960551db44e4        12 days ago         405 MB
      docker.io/nginx     latest              8cf1bfb43ff5        13 days ago         132 MB
      docker.io/redis     latest              50541622f4f1        13 days ago         104 MB
      docker.io/centos    latest              831691599b88        6 weeks ago         215 MB
      [root@localhost ~]# docker run -d -p 80:80 --network web-net --privileged=true -v /www/web:/usr/share/nginx/html -v /www/conf/conf.d:/etc/nginx/conf.d nginx
      5823a87b236e112f8adea15193276042a08a533d387d2c0677dc1bfc6e503616
      [root@localhost ~]# docker ps
      CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
      5823a87b236e        nginx               "/docker-entrypoin..."   16 seconds ago      Up 16 seconds       0.0.0.0:80->80/tcp   jovial_engelbart
      c0a481658a25        php                 "docker-php-entryp..."   10 minutes ago      Up 10 minutes                            myweb
      
    4. 访问
      /www/web/的目录下,新建index.php,写入以下的内容

      <?php
      echo phpinfo();
      ?>
      

      然后,访问,即可看到php的相关信息

  • 相关阅读:
    Ubuntu下手动安装vscode
    VMware Tools安装后设置自动挂载解决共享文件夹无法显示的问题
    VMware Tools安装方法及共享文件夹设置方法
    JavaScript原始类型转换和进制转换
    Javascript的数据类型(原始类型和引用类型)
    设计模式(六)观察者模式
    设计模式(五)之适配器模式
    设计模式(四)注册模式 解决:解决全局共享和交换对象
    设计模式(三)单例模式
    设计模式(二)之策略模式
  • 原文地址:https://www.cnblogs.com/hxsen/p/13456660.html
Copyright © 2011-2022 走看看