Docker(四):部署PHP7 + Nginx +MySQL

安装Nginx

先切换到root,防止权限不够

 sudo -i

查看本地镜像是否有nginx

[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
php                 7.1-fpm             478a9922ffc7        2 months ago        358MB
nginx               latest              719cd2e3ed04        2 months ago        109MB
hello-world         latest              fce289e99eb9        8 months ago        1.84kB

此处已经拉取过镜像,如果没有的执行命令,没有带上版本号是拉取最新的,版本显示为 latest,也可指定版本号

docker pull nginx

执行以上命令之后再次查看镜像这时已经拉取nginx镜像下来,接下来用此镜像启动一个容器

[root@localhost ~]# docker run -p 80:80 --name lnmp_nginx -d nginx
ccf88c7c619fccea35baa30cd11cd3d07bcd0979774cf16b2dc7c3955a09e85b

返回一个字符串表示创建容器成功,即为该容器的id

命令选项说明:

  • -p 80:80 表示将 docker 容器的 80 端口映射的主机的 80 端口
  • –name 表示给这个容器取个名字
  • -d 表示让容器运行在后台,这样就不会占用你的窗口

命令查看容器运行状态

[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                NAMES
ccf88c7c619f        nginx               "nginx -g 'daemon of…"   About a minute ago   Up About a minute   0.0.0.0:80->80/tcp   lnmp_nginx

可以看到容易是运行中的,浏览器访问看是否成功,此处用的虚拟机,先查看虚拟机IP,使用命令

ifconfig

Docker(四):部署PHP7 + Nginx +MySQL_第1张图片
可以看到虚拟机IP是 192.168.33.11,浏览器访问,出现以下界面表示成功,如果没有成功可能是没有开启服务器80端口
Docker(四):部署PHP7 + Nginx +MySQL_第2张图片

安装php7

先查看本地是否已有 PHP 镜像,如果没有则拉取,方法同上面的 nginx 一样
先查看都有哪些版本的 PHP 镜像,命令

docker search php

Docker(四):部署PHP7 + Nginx +MySQL_第3张图片
这里安装 php 7.1-fpm 版本

docker pull php:7.1-fpm

等一会就拉取镜像成功了,如果太慢可能是镜像地址是国外的,配置国内加速地址即可,前面的文章也有介绍,这里不在赘述

[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
php                 7.1-fpm             7cc44ffec1f5        2 weeks ago         392MB
php                 <none>              478a9922ffc7        2 months ago        358MB
nginx               latest              719cd2e3ed04        2 months ago        109MB
hello-world         latest              fce289e99eb9        8 months ago        1.84kB

可以看到 php 7.1-fpm 已经拉取成功

部署nginx

创建目录 nginx,用于存放后面的相关东西

切换到虚拟机挂载目录

cd /vagrang/docker
mkdir -p nginx/www nginx/logs nginx/conf
  • www: 目录将映射为 nginx 容器配置的虚拟目录。
  • logs: 目录将映射为 nginx 容器的日志目录。
  • conf: 目录里的配置文件将映射为 nginx 容器的配置文件。

可以看到目录下有刚创建的目录
Docker(四):部署PHP7 + Nginx +MySQL_第4张图片
拷贝容器内 Nginx 默认配置文件到本地当前目录下的 conf 目录,容器 ID 可以通过 docker ps 命令查看

[root@localhost docker]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
865dda10743f        nginx               "nginx -g 'daemon of…"   7 minutes ago       Up 7 minutes        0.0.0.0:80->80/tcp   lnmp_nginx

复制配置文件

[root@localhost docker]# pwd
/vagrant/docker
[root@localhost docker]# docker cp 865dda10743f:/etc/nginx/nginx.conf nginx/conf
[root@localhost docker]#

此时conf目录多了一个文件
Docker(四):部署PHP7 + Nginx +MySQL_第5张图片

执行nginx命令

先把刚才的容器删除,在重新创建一个容器
列出现有容器

[root@localhost docker]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                    PORTS                NAMES
865dda10743f        nginx               "nginx -g 'daemon of…"   17 minutes ago      Up 17 minutes             0.0.0.0:80->80/tcp   lnmp_nginx

找到需要删除的容器ID,执行删除,如删除容器 lnmp_nginx,先停止运行的容器,在执行删除

[root@localhost docker]# docker stop 865dda10743f
865dda10743f
[root@localhost docker]# docker rm 865dda10743f
865dda10743f
开始部署nginx
docker run -d -p 80:80 --name lnmp-nginx -v /vagrant/docker/nginx/www:/usr/share/nginx/html -v /vagrant/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /vagrant/docker/nginx/logs:/var/log/nginx nginx

返回容器ID说明创建成功

选项说明:

  • -p 80:80: 将容器的 80 端口映射到主机的 8082 端口。
  • –name lnmp-nginx:将容器命名为 lnmp-nginx。
  • -v /vagrant/docker/nginx/www:/usr/share/nginx/html:将我们自己创建的 www 目录挂载到容器的 /usr/share/nginx/html。
  • -v /vagrant/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:将我们自己创建的 nginx.conf 挂载到容器的 /etc/nginx/nginx.conf。
  • -v /vagrant/docker/nginx/logs:/var/log/nginx:将我们自己创建的 logs 挂载到容器的 /var/log/nginx。

进入www目录,创建文件index.html

[root@localhost docker]# cd nginx/www
[root@localhost www]# pwd
/vagrant/docker/nginx/www

输入以下内容


<html>
<head>
<meta charset="utf-8">
<title>dockertitle>
head>
<body>
    <h1>nginx 服务--indexh1>
	<p>docker 部署lnmpp>
body>
html>

浏览器访问是否成功:192.168.33.11
Docker(四):部署PHP7 + Nginx +MySQL_第6张图片

部署nginx + php

先用前面的 php 7.1-fpm 镜像创建一个容器

docker run --name  lnmp-php -v /vagrant/docker/nginx/www:/www  -d php:7.1-fpm

返回一串字符即表示成功,这串字符是该容器ID

选项说明:

  • –name lnmp-php : 将容器命名为 lnmp-php。
  • -v /vagrant/docker/nginx/www:/www : 将主机中项目的目录 www 挂载到容器的 /www

创建 /vagrant/docker/nginx/conf/conf.d 目录:

mkdir /vagrant/docker/nginx/conf/conf.d 

在此目录 /vagrant/docker/nginx/conf/conf.d 创建文件 nginx.conf,添加如下内容

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   php:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /www/$fastcgi_script_name;
        include        fastcgi_params;
    }
}

配置文件说明:

  • php:9000: 表示 php-fpm 服务的 URL。
  • /www/: 是 lnmp-php 中 php 文件的存储路径,映射到本地的 /vagrant/docker/nginx/www 目录。
启动nginx

这次启动一个新的容器

docker run --name lnmp -p 8080:80 -d \
    -v /vagrant/docker/nginx/www:/usr/share/nginx/html:ro \
    -v /vagrant/docker/nginx/conf/conf.d:/etc/nginx/conf.d:ro \
    --link lnmp-php:php \
    nginx

接下来我们在 /vagrant/docker/nginx/www 目录下创建 index.php,并把之前的 index.html 删掉,index.php 输入以下内容


echo phpinfo();

浏览器访问,注意这个容器映射的是 8080 端口,http://192.168.33.11:8080/
输出以下界面代表 nginx +php 安装配置成功
Docker(四):部署PHP7 + Nginx +MySQL_第7张图片

你可能感兴趣的:(系统与服务器)