docker搭建lnmp环境
一 安装 nginx
1 查看可用版本
docker search nginx
2 获取nginx镜像
docker pull nginx[:版本]
3 查看本地镜像
docker images
4 运行容器
docker run --name my-nginx -v ~/nginx/www:/usr/share/nginx/html:ro -p 81:80 -d nginx
参数说明:
--name my-nginx:容器名称命名为my-nginx
-p 81:80:端口进行映射,将本地81端口映射到容器内部的80端口 [左边本地:右边容器]
-d nginx:设置容器在后台一直运行
5 安装成功
docker ps
6 测试
浏览器访问:127.0.0.1:81
二 安装 php
1 查看可用版本
docker search php
2 安装镜像
docker pull php[:版本]
注意:下载php最好指定版本号,如 pull php:7.1-fpm ,默认最新的php版本没有fpm
3 查看本地镜像
docker images
4 运行容器
docker run -p 9000:9000 --name my-php -v ~/nginx/php-log:/usr/local/var/log -v ~/nginx/www:/usr/share/nginx/html:ro -itd php:7.1-fpm
参数说明:
--name my-php:容器名称命名为my-php
-p 9000:9000:端口进行映射,将本地81端口映射到容器内部的80端口
-v ~/nginx/www:/usr/share/nginx/html:挂载,将主机项目中的目录挂载到容器的/usr/share/nginx/html
-it:参数交互运行
-d:参数后台运行
ro:只读权限
注意:docker机制,docker容器运行必须有一个前台进程,如果没有前台进程执行,容器认为空闲就会自行退出。
常规后台运行php,一运行会立马退出,所以加入-it参数。
5 安装成功
docker ps
三 安装 mysql
1 查看可用版本
docker search mysql
2 拉取mysql镜像
docker pull mysql[:版本]
3 查看本地镜像
docker images
4 运行容器
docker run -itd --name my-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql
参数说明:
-itd:后台交互运行
--name my-mysql:容器名称命名为
-p 3306:3306:映射容器服务的3306端口到宿主机的3306
-e MYSQL_ROOT_PASSWORD:设置容器内环境变量,root的用户密码为root
5 安装成功
docker ps
6 测试
6.1 进入容器
docker exec -it [容器名称|容器ID] bash
6.2 进入mysql
mysql -h localhost -u root -p
四 php+mysql部署
1 启动php+mysql容器
docker run --name php-mysql -p 9002:9000 -v ~/nginx/www:/usr/share/nginx/html:ro -v ~/nginx/php-log:/usr/local/var/log --link my-mysql:mysql -itd php:7.1-fpm
参数说明:
--name php-mysql:容器名称命名为php-mysql
-p 9002:9000:端口映射,将本地9002端口映射到容器内部的9000端口
-v :挂载,将主机项目中的目录挂载到容器的/usr/share/nginx/html,将nginx配置文件挂载到/etc/nginx/conf.d,将nginx日志文件挂载到/var/log/nginx
--link my-mysql:php:php链接mysql,把my-mysql的网络并入php
2 安装成功
docker ps
注意:
如果mysql版本是8.0以上,需要做一些调整
常见问题:
请看链接:https://www.cnblogs.com/jingxiaoniu/p/12566883.html
五 nginx+php部署
1 创建核心文件夹方便后续将容器内文件映射到本地,以便查看/修改
mkdir ~/nginx/nginx-conf ~/nginx/nginx-log ~/nginx/php-conf ~/nginx/php-log ~/nginx/www
2 复制php以及nginx的配置和日志文件到本地
2.1 复制php的配置文件
docker cp my-php:/usr/local/etc ~/nginx/php-conf
2.2 复制php的日志
docker cp my-php:/usr/local/var/log ~/nginx/php-log
2.3 复制nginx的配置文件
docker cp my-nginx:/etc/nginx/conf ~/nginx/nginx-conf
2.4 创建nginx的日志文件
touch ~/nginx/nginx-log/error.log ~/nginx/nginx-log/access.log
注意:
复制出来的目录可能多一级,把配置文件全部复制到根目录下
3 重新运行启动nginx容器
docker run --name php-nginx -p 82:80 -d -v ~/nginx/www:/usr/share/nginx/html -v ~/nginx/nginx-conf/conf.d:/etc/nginx/conf.d -v ~/nginx/nginx-log:/var/log/nginx --link php-mysql:php -d nginx
参数说明:
--name php-nginx:容器名称命名为php-nginx
-p 82:80:端口映射,将本地82端口映射到容器内部的80端口
-v :挂载,将主机项目中的目录挂载到容器的/usr/share/nginx/html,将nginx配置文件挂载到/etc/nginx/conf.d,将nginx日志文件挂载到/var/log/nginx
--link my-php:php:nginx链接php,把php-mysql的网络并入nginx
4 安装成功
docker ps
5 测试
127.0.0.1:82
6 修改本地配置文件解析php文件
配置文件中需要将解析php的注解去掉,修改root路径
注意:
核心是php配置文件的fastcgi_pass和fastcgi_param,如果这两个参数错误,会导致php的代码无法解析
常见问题:
https://www.cnblogs.com/jingxiaoniu/p/12560115.html
六 容器互联
说明:上面的nginx+php+mysql我们是使用--link的方式,共享多个容器的网络,不是经常用,开发中我们通常使用--network实现多个容器共享。
1 新建一个自定义网络
docker network create -d bridge test-net
create部分常用参数说明:
-d/--driver:-d bridge 使用桥接网络,
--gateway:网关设置 192.168.0.1
--subnet:网段设置 192.168.0.0./16
2 查看创建的网络
docker network ls
3 需要互联的容器,运行时加上--network参数,这样容器之间就可以实现网络互联
docker run --name my-nginx --network test-net -p 81:80 -d nginx
七 docker-compose 启动(内含Dockerfile)
详情请看链接:https://www.cnblogs.com/jingxiaoniu/p/15148382.html
以上就是本次的全部内容!