docker发布微服务lnmp综合应用
Posted Friends of the wind
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker发布微服务lnmp综合应用相关的知识,希望对你有一定的参考价值。
目录
环境
角色 | 主机名 | IP | 安装服务 |
---|---|---|---|
镜像服务器 | docker01 | 172.16.0.128 | harbo |
应用服务器 | docker02 | 172.16.0.149 | consul、lnmp、WordPress |
应用服务器 | docker03 | 172.16.0.145 | lnmp、WordPress |
描述:三台服务器均已安装docker且版本一致,测试环境关闭防火墙、安全策略selinux,能够连接互联网,且互相可以连通。
要求:
1.搭建企业内部私有镜像仓库harbo
在ui界面中创建repository项目 项目对内部节点开放docker01-03
要求在项目中上传官方镜像 php:7.2-fpm、nginx:latest、mysql:5.7
2.跨主机网络与微服务容器应用 要求使用自定义网段和ip
指定容器自定义网段为172.16.10.0/24 网关172.16.10.1
容器ip 分别为172.16.10.10 nginx 172.16.10.20 php 172.16.10.30 mysql
三台宿主机 基于overlay跨主机搭建lnmp
在lnmp基础上搭建论坛 要求访问ip后直接进入论坛首页。
运用数据持久化,关键数据保存在本地一份
3.跨主机多网段通信overlay考核,在第2题的网络基础,再划分一个新的网段
搭建lnmp论坛,同样需要做本地持久化。
自定义网段为172.16.20.0/24 网关地址为172.16.20.1 容器ip不需要指定由网关自动分配
一、搭建harbo镜像仓库
二、docker02操作
1.docker自定义网络
Docerk overlay 网络需要一个 key-value 数据库用于保存网络状态信息,包括 Network、Endpoint、IP 等。Consul、Etcd 和 ZooKeeper 都是 Docker 支持的 key-vlaue 软件,我们这里使用 Consul。
1)载入Consul镜像:提前导出的镜像
docker load -i consul.tar
2)运行consul服务:
docker run -d -p 8500:8500 -h consul --name registry --restart always progrium/consul -server -bootstrap
3)修改docker02和docker03的docker配置文件:将节点加入到此网络集群
vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2376 --cluster-store=consul://172.16.0.149:8500 --cluster-advertise=ens33:2376
重载内核,重启docker
systemctl daemon-reload
systemctl restart docker
命令创建两个网络:只需要docker02执行
docker network create -d overlay ov_net1 --subnet 172.16.10.0/24 --gateway 172.16.10.1
docker network create -d overlay ov_net2 --subnet 172.16.20.0/24 --gateway 172.16.20.1
报错:
解决:忘记步骤,修改配置,将其添加为集群管理端,重载内核,重启docker
unix:///var/run/docker.sock -H tcp://0.0.0.0:2376 --cluster-store=consul://172.16.0.149:8500 --cluster-advertise=ens33:2376
2.容器运行服务
使用docker01搭建的私有仓库下载所需镜像
1)修改docker配置,不稳定登记,填写仓库地址
vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --insecure-registry 172.16.0.128
重载内核、重启docker
systemctl daemon reload
systemctl restart docker
2)登录并下载
docker login -u admin -p Harbor12345 172.16.0.128
docker pull 172.16.0.128/bdqn/nginx:latest
docker pull 172.16.0.128/bdqn/mysql:5.7
docker pull 172.16.0.128/bdqn/php:7.2-fpm
创建目录,一个存放配置文件、一个存放网页代码文件
mkdir /wwwroot /docker
启动php容器:注意,本地载入镜像的方式启动镜像名称要变
docker run -itd --name phpfpm -p 9000:9000 -v /wwwroot/html:/usr/share/nginx/html --network ov_net1 --ip 172.16.10.20 php:7.2-fpm
配置php容器:注意,容器内部服务连接mysql,要给容器php安装拓展插件
1)php安装拓展插件mysqli
进入php容器
语法:docker exec -it <容器ID或容器名称> /bin/bash
例如:docker exec -it phpfpm bash
进入容器内的安装程序目录:cd /usr/local/bin/
2)执行安装命令:docker-php-ext-install mysqli
成功提示:必须能连接互联网
3)重启php容器
docker restart phpfpm
启动Nginx容器
docker run -itd --name nginx1 -p 8083:80 --network=ov_net1 -v ~/nginx/www:/usr/share/nginx/html -v ~/nginx/conf/conf.d:/etc/nginx/conf.d nginx:latest
1)创建配置文件
启动一个测试版Nginx容器,将文件拷贝过来
docker run -itd --name test nginx
拷贝配置文件
docker cp test:/etc/nginx /docker/
docker cp test:/usr/share/nginx/html /wwwroot/
修改:
vim /docker/nginx/conf.d/default.conf
server {
listen 80;
server_name blog.benet.com;
省略部分内容
模块索引:添加WordPress网页文件目录
location / {
root /usr/share/nginx/html;
index index.html index.htm index.php;
}
location /wordpress {
root /usr/share/nginx/html;
index index.html index.htm index.php;
}
添加动态网页解析规则:注意,fastcgi_param原内容要改成$document_root$
location ~ /wordpress/(?<after_ali>(.*)\\.(php|php5)?$) {
root /usr/share/nginx/html;
fastcgi_pass 172.16.10.30:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
如图:fastcgi_pass填写给php容器分配的ip
2)启动Nginx容器
docker run -itd --name nginx -v /docker/nginx:/etc/nginx -v /wwwroot/html:/usr/share/nginx/html -p 80:80 --network ov_net1 --ip 172.16.10.10 nginx
3)创建测试文件(注意,如果先测试动态网页Nginx配置就要再改,删掉案例的php配置项目)
cd /wwwroot/html/
创建测试动态网页文件
vim index.php
<?php
echo phpinfo();
?>
静态页面:
echo ‘inspect’ > index.html
启动mysql容器:
docker run --name mysql -e MYSQL_ROOT_PASSWORD=123.com -v mysqldata:/var/lib/mysql
-d -p 3306:3306 --network ov_net1 --ip 172.16.10.30 mysql:5.7
参数释义:
v:以具名挂载方式挂载mysql数据目录,到宿主机
e:设置登录密码(注意:某些版本不允许空密码启动,不指定启动不了容器)
配置:为blog站点创建数据库、设置权限
1)进行mysql容器
docker exec -it mysql bash
2)数据库操作
验证:
WordPress配置
1)拷贝WordPress压缩包到服务器
2)解压WordPress到网页更目录
cd /wwwroot/html/
unzip wordpress-4.9.4-zh_CN.zip
3)赋权
chmod -R 777 wordpress
4)单步验证
外部主机访问Nginx首页:http://172.16.0.149
php能否解析:注意,要验证这个,需修改nginx配置,教程略过
172.16.0.149/index.php
3.登录网页安装WordPress
1)填写正确数据库信息,注意:登录页面地址栏填写宿主机的ip加WordPress的网页文件目录;容器的宿主机保留端口是多少填多少
2)确认信息无误,单击现在安装
3)填写站点信息
4)验证:
三、docker03操作
1.下载镜像
1)修改docker配置,确保本机信任远程仓库
vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --insecure-registry 172.16.0.128
重启docker
systemctl daemon-reload
systemctl restart docker
2)登录镜像仓库下载镜像
docker pull 172.16.0.128/bdqn/nginx:latest
docker pull 172.16.0.128/bdqn/mysql:5.7
docker pull 172.16.0.128/bdqn/php:7.2-fpm
2.容器运行服务
启动php容器:注意,本地载入镜像的方式启动容器后面名称要改
docker run -itd --name phpfpm -p 9000:9000 -v /wwwroot/html:/usr/share/nginx/html --network ov_ne2 --ip 172.16.10.30 172.16.0.128/bdqn/php:7.2-fpm
注意:容器内部服务连接mysql,要给容器内php安装拓展插件,方法同上,必须保证静态页面测试成功,php解析动态页面成功!!
查看php自动分配的ip:
docker inspect myphp-fpm
启动Nginx容器
同上
启动mysql容器并进入容器为其设置库授权
同上
3.登录网页安装WordPress
1)填写正确数据库信息,注意:登录页面地址栏填写宿主机的ip加WordPress的网页文件目录;容器的宿主机保留端口是多少填多少
2)确认信息无误,单击现在安装
3)验证
总结
注意:
如果重启系统之后,再启动php会报错
解决:但是保留的Ip是无法删除的
用php保留端口号,确定它的pid
ps -ef | grep 9000
删除:
关键点有三:
1、php容器启动之后,默认不支持连接mysql要安装插件,有两种方式,第一种,在宿主机用命令安装好重新做镜像文件,运行新容器,国内服务器,一般会失败,因为要连接国外网站更新。第二种,进入容器内使用命令安装,速度快,不出错!本例演示第二种。
2、实现本例需求,可以有多种方式,无论哪种必须做好全局规划,协调好各方面支持,例如:可以创建bridge网络,也可以创建overlay;当然,实现还有扩展的空间,我们可以给它,加个域名,blog.benet.com,真实环境一定是这种方式。
3、做单步调试,每个环节是以上一个为基础,如果不测试,出现问题,找不到突破口!
以上是关于docker发布微服务lnmp综合应用的主要内容,如果未能解决你的问题,请参考以下文章
docker安装步骤及基于docker容器部署web应用LNMP服务器环境
原lnmp环境服务器升级为mysql+nginx+php单个docker容器构建的lnmp环境
微服务架构:基于微服务和Docker容器技术的PaaS云平台架构设计