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 参数,不再赘述。

 

 

 

 

 

 

 

 

 

 

——————占位符

 

posted @ 2018-12-13 15:21  小寒1206  阅读(223)  评论(0编辑  收藏  举报