docker下搭建LNMP环境

nginx的安装

docker run -it -d -p 80:80 -v /E_DRIVE/nginx/conf_bak/nginx.conf:/etc/nginx/conf.d/default.conf -v /E_DRIVE/nginx/html:/var/www/html --name zzh-nginx nginx
命令解析

docker run 创建并运行一个容器
格式: docker run [OPTIONS] image[tag]

参数解析

-i 以交互模式运行容器,通常与 -t 同时使用;
-t 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-d 后台运行容器并返回容器id
-p 端口映射,格式为:主机(宿主)端口:容器端口;(PS:宿主机端口不能重复,docker文档—nginx中的例子去查找容器默认端口);
–name 为容器起名字
-v 路径映射,格式为:主机(宿主)路径:容器中路径;
(PS:1.本地路径自己创建,宿主机路径自己本地创建,容器中在上面官方文档中查找
2. 映射指的是容器中相应文件随着本地文件的改变而改变,从而达到方便的控制容器内文件的作用;也就是说本地文件什么内容,容器内相应文件就是什么内容。那么有一个问题,本地文件中的初始内容如何填?先在未映射的前提下创建相同容器,进去相应文件,将内容复制出来作为本地文件的初始内容
3. 文件映射要注意文件夹对应文件夹,文件对应文件。在文档中貌似有文件映射文件夹的,想让自己创建,我尝试过一直报错)。

上面的命令:后台运行,指定端口,映射nginx配置文件,映射nginx执行目录,为容器其名字,镜像名。

php的安装

docker run -it -d -p 9000:9000 -v /E_DRIVE/nginx/html:/var/www/html -v /E_DRIVE/php/conf_bak/hosts:/etc/hosts --name zzh-php-5.5.29 php:5.5.29-fpm
命令解释:

映射php的执行目录,映射php的hosts文件(方便增加域名解析,不用的话可以不映射)

注意:因为容器中的php只是核心库,经常会报错,提示某某函数不存在,或者某某未定义,原因都是库不全,解决办法需要增加扩展。进入PHP容器执行

docker-php-ext-install pdo_mysql
docker-php-ext-install mbstring

我这里需要扩展 pdo_mysql 和 mbstring两个库

nginx和php配置的修改

  1. nginx自身配置,修改nginx默认执行目录及执行文件(一下是修改部分,未全部拉取ngin配置文件)
    location / {
        root   /var/www/html;
        index  index.html index.htm  index.php;
        autoindex  on;
    }

2.nginx中指向php容器

   location ~ \.php$ {
       root           /var/www/html;
       fastcgi_pass   192.168.99.100: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;
   }

这些配置默认注释掉的,打开后简单修改即可,路径是php执行路径,ip是自己docker的ip,每次进去时弹出的ip。

Mysql的安装

在lnmp环境中,mysql相对独立,使用时,只需要配置mysql服务器即可连接使用。

docker run --name mysql2 -p 3307:3306  -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
命令解析

-e 设置环境变量;

mysql一般不需要映射配置文件,需要的话自己映射。进入mysql容器后,执行

root@e623656e4c9d:/# mysql -u root -p
Enter password:

进入到mysql,可以执行sql语句。

注意:使用其他视图工具进行连接docker中mysql服务器的时候报错,我使用的是SQLog进行连接,报错。查了下资料,在mysql容器里面的sql执行窗口执行:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的密码';
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';
SELECT plugin FROM mysql.user WHERE User = 'root';

我这里只执行了第一句就连接成功。

猜你喜欢

转载自blog.csdn.net/qq_32142513/article/details/81304649