Docker在macbook搭建lnmp环境

首先请下载Docker Desktop➡️docker.com

部署Mysql

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

$ docker pull mysql

基于该镜像启动一个Mysql容器:

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

-run 创建一个新的容器

--name指定<container_name>为mysql

-p 容器端口映射本地服务器,格式:-p <local-port>:<container-port>

-e 指定环境变量MYSQL_ROOT_PASSWORD为123456

-d 代表容器运行于后台。

nginx 镜像名称,默认下载latest

至此完成Mysql安装,接下来部署Nginx。

部署Nginx

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

$ docker pull nginx

基于该镜像启动容器:

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

运行成功后,终端会返回container_id,浏览器访问http://localhost,会看到Nginx欢迎页面。

映射路径

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

本机项目地址:/nginx容器的项目地址 Users/potato/docker/web:/usr/share/nginx/html

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

本地修改hosts文件,127.0.0.1                localhost。

配置Nginx

这一步主要是将Nginx的配置文件也映射到本地目录方便修改。

$ cd /Users/potato/docker/nginx/conf.d
$ docker cp nginx:/etc/nginx/conf.d/default.conf default.conf


$ docker stop nginx
$ docker rm nginx
$ docker run --name nginx -p 80:80 -v /Users/potato/docker/web:/usr/share/nginx/html  -v /Users/potato/docker/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf -d nginx

如修改conf文件,需重启容器生效:

$ docker restart nginx

这样就可以方便快捷的在本地修改配置文件了。

部署PHP-FPM

$ docker pull php:fpm
$ docker run --name php-fpm -p 9000:9000 -d php:fpm
$ cd /Users/potato/docker/php

#复制www.conf到本地的www/config中
$ docker cp php-fpm:/usr/local/etc/php-fpm.d/www.conf www.conf  

#查看容器的  containerID
$docker ps -a

#进入到正在运行的php-fpm容器中
$docker exec -it containerID /bin/bash

#进入到src中会看到2个压缩包
cd /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-8.3.7
-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

extension=mysqli

然后重新启动容器:

$ docker stop php-fpm
$ docker rm php-fpm
$ docker run --name php-fpm --link mysql:mysql -v /Users/potato/docker/web:/usr/share/nginx/html  -v /Users/potato/docker/php/www.conf:/usr/local/etc/php-fpm.d/www.conf -v /Users/potato/docker/php/php.ini:/usr/local/etc/php-8.3.7/php.ini -d php:fpm

进入容器安装pdo_mysql扩展

$ docker exec -it php /bin/bash

#执行安装
$ docker-php-ext-install pdo pdo_mysql

#重启容器
exit

$ docker restart php-fpm
配置Nginx支持php-fpm 

修改nginx配置文件

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  /scripts$fastcgi_script_name;
	    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;
    }
}

然后重新启动Nginx,Nginx需link php-fpm,故需先启动php-fpm后启动Nginx。

$docker stop nginx
$docker rm nginx
$ docker run --name nginx -p 80:80 --link php-fpm -v /Users/potato/docker/web:/usr/share/nginx/html -v /Users/potato/docker/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf -d nginx

在映射项目目录(/Users/potato/docker/web)下创建index.php文件:

<?php
    phpinfo();

在浏览器访问localhost,刷新一下就可以显示phpinfo啦。

相关推荐

  1. Dockermacbooklnmp环境

    2024-05-12 09:40:03       12 阅读
  2. DockerLNMP环境实战(一):前言

    2024-05-12 09:40:03       19 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-12 09:40:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-12 09:40:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-12 09:40:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-12 09:40:03       18 阅读

热门阅读

  1. jquery

    jquery

    2024-05-12 09:40:03      9 阅读
  2. 设计模式:观察者模式

    2024-05-12 09:40:03       11 阅读
  3. 第02章_MySQL环境搭建

    2024-05-12 09:40:03       7 阅读
  4. 区块链链底层架构,IPFS,DAPP

    2024-05-12 09:40:03       10 阅读
  5. MySQL从主库恢复从库

    2024-05-12 09:40:03       9 阅读
  6. MySQL主从切换测试

    2024-05-12 09:40:03       9 阅读
  7. 升级 CentOS7.9 的 sqlite-devel

    2024-05-12 09:40:03       12 阅读
  8. 基于 element-ui 表格组件 el-table 导出表格数据

    2024-05-12 09:40:03       10 阅读
  9. Vue3知识总结-2

    2024-05-12 09:40:03       10 阅读
  10. npm 常用指令介绍

    2024-05-12 09:40:03       8 阅读