Docker 学习之部署php + nginx(一)

博主电脑系统是window 10 专业版的,所以在此记录下docker的基本使用方法。

参考地址

  https://www.runoob.com/docker/docker-install-php.html

  https://learnku.com/articles/28020

  在这里主要也就是针对上述地址做一个完整版的整合,主要方便以后查看。

一. 系统检查

1.1 检查自己的电脑是否开启了虚拟化(在任务管理器 性能 界面查看)

  进入方法:在最下方的任务栏 -> 鼠标右键 -> 任务管理器

  * 详细请参考https://jingyan.baidu.com/article/59703552811e468fc0074027.html

  

1.2 查看 Hyper-V 是否打开

  进入方法:控制面板 -> 程序 -> 程序和功能 -> 启动或关闭 Windows 功能

  详细请参考:https://jingyan.baidu.com/article/c1a3101e10c965de656debc2.html

  **注意**:如果自己的电脑虚拟化已经开启,同时 自己的电脑系统版本又是 win10 专业版及以上  Hyper-v 还是无法开启,那么楼主建议不要去纠结了直接重装系统,楼主为了这个弄了一天最终还是重装系统解决的。

 

 二。Docker 安装

2.1 docker 下载及安装

  官方下载地址:https://www.docker.com/get-started

  在下载过程中可能会需要去注册一个账号,这里就不细说,

  详细请参考https://www.runoob.com/docker/windows-docker-install.html

  

  安装完docker 以后我们需要做一个简单的设置

  

   在安装完成成功运行以后我们点击 这个小鲸鱼  -> 单击 Settings ,进入设置界面  -> 左边菜单栏 点击 Daemon  -> 点击Basic   ->  找到 "registry-mirrors":[]

  

  

  设置完成以后 点击 Apply 自动重启 docker

   

2.2 nginx 安装

  2.2.1 查找nginx

docker search nginx

2.2.2  拉取官方的nginx

docker pull nginx

  

  拉取完成以后,查看当前镜像文件

docker images nginx

 

2.2.3 启动nginx容器实例

docker run -d -p 8080:80 --name mynginx nginx
    -d:后台运行
    -p:设置端口号映射到本机,将 80 端口映射到本机的 8080 端口,外部访问8080端口即可
    --name:设置容器名称

2.2.4 查看启动的nginx实例docker ps -l

    -l:表示查看最后一个启动的容器,可以不用带
   -a:表示查询查询所有启动过的容器,包括停止的容器

docker ps: 查看当前运行中的容器

2.2.5 本机访问测试

进入到此页面表示 nginx 安装成功

三。php + nginx 部署

 3.1 在本地电脑创建如下几个文件夹方便后续将容器内文件映射到本地修改

3.2 搜索php

docker search php

3.3 拉取php

docker pull php:7.1-fpm
  # 因为PHP有多个版本,这里就以拉取7.1版本为例子

3.4 启动php 

3.4.1 随便启动一个,因为需要将php的配置文件和日志文件复制出来到本地

docker run -d -v E:dockerwww:/var/www/html -p 9000:9000 --name myphp php:7.1-fpm
  -d:后台运行
  -v E:dockerwww:/var/www/html: 将本地的html存储地址和php的html存储地址做一个映射
  --name myphp:重命名

3.4.2 复制php的配置文件和日志文件到本地

docker cp myphp:/usr/local/etc E:dockerphp-conf
docker cp myphp:/usr/local/var/log E:dockerphp-log
docker cp myphp:/var/www/html E:dockerwww
  myphp:是我们前面运行的php的名称

 复制完以后我们可以在本地对应的文件夹下面看到复制出来的文件,这个时候我们需要做一个处理,就是将这些文件夹中的文件全部复制到根目录,如下

 php-log 文件夹中没有东西是因为复制出来的log下本身就没有文件,所以不用管

3.4.3 删除原有的myphp,重新运行php

# 停止myphp 容器
docker stop myphp

# 删除myphp 容器
docker rm myphp

# 重新运行php容器,同时映射配置文件
# 全指令
docker run -d -v E:dockerphp-conf:/usr/local/etc -v E:dockerphp-log:/usr/local/var/log -v E:dockerwww:/var/www/html -p 9000:9000 --name myphp php:7.1-fpm#指令分析
docker run -d 
  -v E:dockerphp-conf:/usr/local/etc   # 指定配置文件
  -v E:dockerphp-log:/usr/local/var/log # 指定日志文件
  -v E:dockerwww:/var/www/html        # 指定html界面路径
  -p 9000:9000                  # 映射端口号
  --name myphp php:7.1-fpm           # 重命名

# 查看运行的容器
docker ps

3.4.4 复制nginx的配置文件到本地

因为光有php还不行,因为php只能帮我们编译php代码,而运行还是需要依靠服务器来完成

docker cp mynginx:/etc/nginx E:docker
ginx-conf
  # 因为我们之前就已经创建一个一个nginx容器,所以直接将里面的配置文件复制出来就可以了。
docker stop mynginx
  # 停止这个容器
docker rm mynginx
  # 删除这个容器

复制出配置文件以后,我们还需要在log文件中创建如下两个文件

3.4.4 重新启动nginx,同时指定映射文件位置

# 全命令
docker run -d -p 80:80 -v E:dockerwww:/var/www/html -v E:docker ginx-conf:/etc/nginx/ -v E:docker ginx-log:/var/log/nginx/ --link myphp:php --name mynginx nginx

# 命令分析
docker run -d -p 80:80           # 映射端口号
  -v E:dockerwww:/var/www/html     # 指定html页面位置
  -v E:docker ginx-conf:/etc/nginx/   # 指定配置文件位置
  -v E:docker ginx-log:/var/log/nginx/ # 指定日志文件位置
  --link myphp:php --name mynginx nginx  # 重命名

 指定本地html储存的位置与nginx做映射
 指定本地nginx的配置文件位置和nginx配置文件做映射

 

3.4.5 本地修改配置文件(附上配置文件,仅供参考)

文件位置是前面映射过来到本地的文件夹

server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /var/www/html;
        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           /var/www/html;
        fastcgi_pass   php:9000;
        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;
    #}
}

在配置文件中需要将 php 的注解去掉,并且修改访问的路径

3.4.6 创建index.php

3.4.7 本地测试运行

注意:在这里我们主要注意一下 nginx配置文件中的 php 下的 fastcgi_pass 和 fastcgi_param,因为如果 php 下的这两个出错 将会导致php的代码无法解析从而报错, 还有要检查配置文件是否映射正确。

原文地址:https://www.cnblogs.com/lxd-ld/p/11578467.html