不积跬步无以至千里

记录精彩的程序人生

  • 首页
  • Java
  • Golang
  • PHP
  • Python
  • Nodejs
  • Lua
  • Docker
  • DevOps
  • 文章归档
  • 默认分类
  • 关于
  • 标签

  • 搜索
PostgreSQL hbase 时间同步 nexus 开机启动 nexus, 开机启动 jenkins安装配置 gitlab安装配置 gitlab安装 文件系统 fastdfs gcc切换 gcc升级 mysql8 交换空间 虚拟内存 tcp thrift lua tag test VPN SoftEtherVPN homebrew asm spring tomcat maven jdk ios mac 图案字符 figlet mysql半同步复制 mysql主从同步 一主多从 一主一从 主从同步 反向代理 密码重置 test 虚拟机扩容 swap 虚拟空间 docker ldocker grpc-gateway protobuf 微服务 go grp GRPC 授权登录 OAuth2.0 SOA supervisord supervisor RPC CentOS rabbitmq 环境变量 php-fpm php.ini error php7 lnmp 编译安装 mysql nginx linux java php python redis 字符串操作 mysql5.7 Solo

Docker部署LNMP完整教程

发表于 2021-09-28 | 分类于 Docker | 0 | 阅读次数 3075

1、安装docker

$ yum install docker-io docker-compose
$ docker -v

注意:Docker安装要求Linux 3.10以上版本

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=password -d mysql

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

3、部署Nginx

3.1、安装Nginx

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

$ docker pull nginx

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

然后,启动Nginx容器:

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

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

  • run:创建一个新的容器
  • --name:指定容器的名称(如果留空,docker会自动分配一个名称)
  • -p:导出容器端口到本地服务器,格式:-p :。在本例中,我们映射容器的80端口到本地服务器的80端口。
  • nginx:是 Dockerhub 上下载nginx镜像名称(如果本地没有可用的镜像,Docker会自动下载一个)
  • -d:后台启动。

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

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

3.2、映射HTML路径

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

$ docker run --name nginx -p 80:80 -d -v ~/www/html:/usr/share/nginx/html nginx

-v的参数格式为::。

在~/www/html下创建一个 index.html 文件,内容

here is ~/www/html/index.html

在浏览器上访问 http://localhost,刷新一下就可以看到新的内容了。

3.3、配置 Nginx

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

$ cd ~/www
$ 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 ~/www/html:/usr/share/nginx/html -v ~/www/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
$ docker cp php-fpm:/usr/local/etc/php-fpm.d/www.conf www.conf
$ docker cp php-fpm:/usr/local/etc/php/php.ini-production php.ini

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

cgi.fix_pathinfo=0

然后重新启动容器:

$ docker stop php-fpm
$ docker rm php-fpm
$ docker run --name php-fpm -p 9000:9000 --link mysql:mysql -v ~/www/html:/var/www/html -v ~/www/www.conf:/usr/local/etc/php-fpm.d/www.conf -v ~/www/php.ini:/usr/local/etc/php/php.ini -d php:fpm

这样PHP-FPM的容器就部署完成了。注意,要保证配置文件 php.ini 和 www.conf 没有错误,否则会无法启动容器。

5、让Nginx容器支持FPM

打开 nginx 的配置文件default.conf,修改内容如下:

server {
    listen       80;
    server_name  _;
    root /usr/share/nginx/html;
    index index.php index.html index.htm;

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

    location / {
        #root   /usr/share/nginx/html;
        #index  index.php index.html index.htm;
	try_files $uri $uri/ =404;
    }

    error_page  404  /404.html;
    location = /40x.html {
        root    /user/share/nginx/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$ {
        fastcgi_pass   php-fpm:9000;
        fastcgi_index  index.php;
    	fastcgi_param SCRIPT_FILENAME /var/www/html/$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;
    }
}

然后启动 nginx:

$ docker run --name nginx -p 80:80 --link php-fpm -v ~/www/html:/usr/share/nginx/html -v ~/www/default.conf:/etc/nginx/conf.d/default.conf -d nginx

在 ~/www/html 下创建 index.php 文件,内容:

<?php
phpinfo();
curl http://localhost/index.php

出现phpinfo界面即表示docker 部署 mysql/php/nginx 成功!

# lnmp # docker
TCP三次握手机制中的seq和ack详解
Centos虚拟内存创建、删除
  • 文章目录
  • 站点概览
ken

ken

记录精彩的程序人生

498 日志
9 分类
77 标签
RSS
Creative Commons
Links
  • 酷壳
0%
© 2010 — 2025 ken
由 Halo 强力驱动
鄂ICP备18013899号-1