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的相关信息

posted @ 2020-08-08 10:36  houxin  阅读(362)  评论(0编辑  收藏  举报