docker发布微服务lnmp综合应用

Posted Friends of the wind

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker发布微服务lnmp综合应用相关的知识,希望对你有一定的参考价值。


环境

角色主机名IP安装服务
镜像服务器docker01172.16.0.128harbo
应用服务器docker02172.16.0.149consul、lnmp、WordPress
应用服务器docker03172.16.0.145lnmp、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镜像仓库

请参看教你轻松玩Harbor-常用的企业级私有仓库

二、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服务器环境

如何在docker里部署lnmp

原lnmp环境服务器升级为mysql+nginx+php单个docker容器构建的lnmp环境

微服务架构:基于微服务和Docker容器技术的PaaS云平台架构设计

docker学习系列:使用docker创建集成服务--lnmp

微服务架构:基于微服务和Docker容器技术的PaaS云平台架构设计(微服务架构实施原理)