Docker部署LNMP完整教程

Docker中部署LNMP环境可以分为以下几个步骤:

安装Docker

创建镜像

创建Dockerfile

build Docerfile

复制/修改配置文件

运行镜像,并映射端口

为了方便分布式部署,Nginx、PHP、MySQL和Web目录会分别放在4个不同的容器中,最后我们会打包成4个镜像。

1 安装docker和docker-compose

安装docker和docker-compose自行Google吧,太多教程了,这里就不做一一介绍了。

Docker安装要求Linux 3.10以上版本

装了yum的可以执行下面的命令安装docker-compose

yum install docker-io docker-compose

安装之后,用这个命令查看版本:

docker -v 1.1 镜像仓库

Nginx、PHP、MySQL在Docker官方都提供现成的镜像仓库,这些我们是可以直接使用的,各个仓库地址如下。

Nginx仓库:https://hub.docker.com/_/nginx/

PHP仓库:https://hub.docker.com/_/php/

MySQL仓库:https://hub.docker.com/_/mysql/

1.2 Dockerfile文件

Dockerfile 文件类似 Makefile,只是前者根据规则部署容器,后者根据规则编译项目。

Dockerfile规则请参考:https://docs.docker.com/engine/reference/builder/。

接下来每个程序的部署都会用到Dockerfile,所以一定要提前了解每个命令的功能。

2 部署MySQL

因为安装MySQL相对简单,所以我们从MySQL开始。

从Docker的公共仓库 Dockerhub 下载 MySQL 镜像:

$ docker pull mysql

然后启动数据库:

$ docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql

就完成了MySQL的安装,接下来我们再在PHP-FPM容器中使用。

3 部署Nginx 安装Nginx

首先,从Docker的公共仓库 Dockerhub 下载nginx镜像:

$ docker pull nginx

这个命令会下载容器需要的所有部件,并且Docker会对它们进行缓存,所以在运行容器的时候,不需要每次都下载容器镜像。

然后,启动Nginx容器:

$ docker run --name nginx -p 80:80 -d nginx

运行成功后,终端会返回容器的ID号,上面的命令中,

run:创建一个新的容器

--name:指定容器的名称(如果留空,docker会自动分配一个名称)

-p:导出容器端口到本地服务器,格式:-p <local-port>:<container-port>。在本例中,我们映射容器的80端口到本地服务器的80端口。

nginx:是 Dockerhub 上下载nginx镜像名称(如果本地没有可用的镜像,Docker会自动下载一个)

-d:后台启动。

通过浏览器浏览: 就会看到Nginx欢迎界面。接下来可能会用到这几个命令:

$ docker ps -a # 查看正在运行的容器 $ docker stop nginx # 停止正在运行的容器 $ docker start nginx # 启动一个已经停止的容器 $ docker rm nginx # 删除容器 映射HTML路径

默认情况下,Docker nginx服务器的HTML路径(网站根目录)在容器 /usr/share/nginx/html 目录下,现在需要把这个目录映射到本地服务器的 ~/www/html 目录。在上面命令的基础上加上-v参数,具体如下:

/Users/xiaohao/Desktop/www 左边是本机项目地址 : 右边是nginx容器的项目地址 /usr/share/nginx/html

$ docker stop nginx # 停止正在运行的容器 $ docker rm nginx # 删除容器 $ docker run --name nginx -p 80:80 -d -v /Users/xiaohao/Desktop/www/:/usr/share/nginx/html -v nginx

-v的参数格式为:<local-volumes>:<container-volumes>。

在/Users/xiaohao/Desktop/www 下新建 index.html

(如果访问不到个别需要)注意:在终端上ifconfig 把ip复制到host

在host文件中设置

192.168.2.1 locohost 或者 192.168.2.1 127.0.0.1

在浏览器上访问 或者本机ip地址/或者127.0.0.1,刷新一下就可以看到新的内容了。

配置 Nginx

Nginx 的强大很大部分体现在配置文件上,对于一些高级的应用来说,自定义 Nginx 非常重要。所以,我们需要把 Nginx 的配置文件复制到本地服务器目录:

$ cd /Users/xiaohao/Desktop/www/config $ docker cp nginx:/etc/nginx/conf.d/default.conf default.conf

再加一个-v参数,把本地的配置文件映射到容器上,在重启容器:

$ docker stop nginx $ docker rm nginx $ docker run --name nginx -p 80:80 -v /Users/xiaohao/Desktop/www:/usr/share/nginx/html -v /Users/xiaohao/Desktop/www/config/default.conf:/etc/nginx/conf.d/default.conf -d nginx

如果配置文件有修改,需要重启容器生效:

$ docker restart nginx

这样就可以直接在本地修改配置文件了。

4 部署PHP-FPM

下载 PHP-FPM 镜像:

$ docker pull php:fpm $ docker run --name php-fpm -p 9000:9000 -d php:fpm $ cd ~/www #复制到本地的www/config中 $ docker cp php-fpm:/usr/local/etc/php-fpm.d/www.conf #查看容器的 containerID $docker ps -a #进入到正在运行的php-fpm容器中 $docker exec -it containerID /bin/bash #进入到src中会看到2个压缩包 root@e8f61e487bb6:/usr/src#cd /usr/src/ root@e8f61e487bb6:/usr/src#ls -ll -rw-r--r-- 1 root root 11928820 Dec 4 18:40 php.tar.xz -rw-r--r-- 1 root root 850 Dec 4 18:40 php.tar.xz.asc #解压tar.xz文件:先 xz -d xxx.tar.xz 将 xxx.tar.xz解压成 xxx.tar 然后,再用 tar xvf xxx.tar来解包。 root@e8f61e487bb6:/usr/src# xz -d php.tar.xz root@e8f61e487bb6:/usr/src#ls -ll -rw-r--r-- 1 root root 139786240 Dec 4 18:40 php.tar -rw-r--r-- 1 root root 850 Dec 4 18:40 php.tar.xz.asc root@e8f61e487bb6:/usr/src#tar xvf php.tar root@e8f61e487bb6:/usr/src#ls -ll drwxr-xr-x 14 1000 1000 4096 Dec 4 16:12 php-7.3.0 -rw-r--r-- 1 root root 139786240 Dec 4 18:40 php.tar -rw-r--r-- 1 root root 850 Dec 4 18:40 php.tar.xz.asc exit; #回到宿主机的config文件夹中,把容器里面的php.ini复制下来 $ docker cp php-fpm:/usr/src/php-7.3.0/php.ini-production php.ini

在本地服务器修改 php.ini 的内容,设置cgi.fix_pathinfo=0(要先删除前面的;注释符):

cgi.fix_pathinfo=0

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpfpzf.html