centOS 手动 Docker 安装 LNMP 环境 —— 命令行创建容器方式
—————— 手动安装 ————————
说明:本次的手动安装的参数如下
宿主机目录: /data (由于我们用到了$PWD,所以执行的位置是在/data 的)
宿主机项目目录: /data/www ,对应nginx容器挂载目录:/www ,对应 php 挂载目录 /www
宿主机 nginx 配置目录: /data/nginx/conf.d,对应 nginx 容器 /etc/nginx/conf.d
// 1、创建目录:
mkdir -p /data/www mkdir -p /data/nginx/conf.d
cd /data
// 2、安装 nginx 并启动 —— 在/data 目录运行,所以$PWD表示当前位置,也就是 /data
// 下载 docker pull nginx // 启动,并设置映射端口和目录 docker run -p 80:80 --name mynginx \ -v $PWD/www:/www \ -v $PWD/nginx/conf.d:/etc/nginx/conf.d \ --privileged=true \ -d nginx
—— 宿主机的 80 映射到容器 mynginx 的 80
—— 宿主机的 /data/www : /www(此为容器mynginx 的 /www 目录)
—— 宿主机的 /data/nginx/conf.d : /etc/nginx/conf.d (此为容器 mynginx 的虚拟主机配置目录)
3、安装PHP并启动 —— 在项目目录运行,$PWD表示当前位置,即 /data
// 下载php7.3-fpm docker pull php:7.3-fpm // 启动 php-fpm docker run -p 9000:9000 --name myphp \ -v $PWD/www/:/www \ --privileged=true \ -d php:7.3-fpm
———— 宿主的 /data/www 挂载到容器 myphp 的 /www ,而 /data/www 也是存放 nginx 的项目的位置,挂载的也是 /www。
4、配置 nginx:
// 使用以下命令查看IPAddress,配置nginx 的时候需要用到。返回172.17.0.3。 docker inspect myphp |grep '"IPAddress"' 或者 docker inspect --format='{{.NetworkSettings.IPAddress}}' myphp // 创建两个nginx 配置文件 touch /data/nginx/conf.d/laravel.besunway.com.conf /data/nginx/conf.d/laravel.besunway.com.conf // 1、配置第一个文件 vim /data/nginx/conf.d/laravel.besunway.com.conf
server { listen 80;
server_name laravel.besunway.com; set $root_path '/www/laravel/'
root $root_path; index index.php index.html index.htm; location ~ \.php { fastcgi_pass 172.17.0.3:9000; fastcgi_index /index.php; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~* ^/(css|img|js|flv|swf|download)/(.+)$ { root $root_path; } }
// 2、配置第二个文件 vim /data/nginx/conf.d/test.besunway.com.conf 配置与上同,修改 server_name 和 root , 注意 SCRIPT_FILENAME 即可
—— 特别注意:参数 fastcgi_param SCRIPT_FILENAME 是 php 找到文件的位置,php 需要在容器内部的指定位置找到index.php(项目下的路口文件,也可以是其他 php 文件)
因为我把/data/www 挂载给了 nginx 的 /www,也挂载给了 php 的 /www 。所以使用的是$document_root,即我们设置的 root '/www/laravel/',这样其实两个容器访问/www/laravel,访问的都是宿主机上的/data/www 。
如果你挂载的 php 和 nginx的路径是不一样的。你就需要单独设置 SCRIPT_FILENAME 为php 容器能找得到的路径。
5、创建项目目录和index.php 文件测试
mkdir /data/www/laravle /data/www/test touch /data/www/laravel/index.php /data/www/test/index.php echo "<?php echo 'this is www/laravel';" > /data/www/laravel/index.php echo "<?php echo 'this is www/test';" > /data/www/test/index.php
6、重启 nginx 服务
// 重启方式一 docker restart mynginx // 重启方式二 docker exec -it mynginx /bin/bash service nginx reload
———— 访问不同域名即可
7、 安装mysql,并配置远程登录
// 安装 docker pull mysql:5.6 // 请注意,要在项目目录下运行,项目下设置了 nginx www mysql 目录,$PWD 表示当前路径。 docker run -p 3306:3306 --name mymysql \ -v $PWD/mysql/conf:/etc/mysql/conf.d \ -v $PWD/mysql/logs:/logs \ -v $PWD/mysql/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=xxx \ -d mysql:5.6 // 进入 mysql 容器,添加远程连接账户 docker exec -it mymysql bash // 登录容器里面的mysql mysql -uroot -pxxx // 创建可以远程登录的用户 CREATE USER 'username'@'%' IDENTIFIED BY 'password'; // 授权 GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, FILE, INDEX, ALTER, SHOW DATABASES, \
CREATE TEMPORARY TABLES, CREATE VIEW, EVENT, TRIGGER, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, \
EXECUTE ON *.* TO 'username'@'%' REQUIRE NONE WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0; // 刷新权限 flush privileges; // 退出并重启服务 service mysql restart // 退出容器 exit // 启动 mysql 容器(因为此时可能容器自己挂掉了) docker start 80e1d20fea79
—————— 好了,那么接下来你可以用 navicate 连接数据库了。
—————— 配置文件,日志文件,数据文件请查看 -v 参数,不再赘述。
——————占位符