docker发布微服务lnmp综合应用(代码片段)

Friendsofthewind Friendsofthewind     2023-01-28     369

关键词:


环境

角色主机名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学习系列:使用docker创建集成服务--lnmp(代码片段)

在掌握了docker的基本命令之后,我也是想着去用docker做一点实际的配套环境,就拿自己最常用的lnmp环境来做测试。配套环境运行的顺序依次是mysql->php->nginx,至于为什么,在下面会解释。1.MySQL之后服务运行的镜像如无特别... 查看详情

如何使用urlos进行docker应用开发(代码片段)

使用Docker技术可以帮助企业快速水平扩展服务,从而到达弹性部署业务的能力。在云服务概念兴起之后,Docker的使用场景和范围进一步发展,如今在微服务架构越来越流行的情况下,微服务+Docker的完美组合,更加方便微服务架... 查看详情

docker:搭建年轻人第一个lnmp网站平台(代码片段)

...sql服务、php服务)组合而成,本次练习所使用的镜像均为docker官方镜像源https://hub.docker.com,镜像介绍如下:镜像名称官方镜像地址nginxphp镜像https://hub.docker.com/r/richarvey/nginx-php-fpm/mysql镜像https://hub.docker.com/_/ 查看详情

2020系统综合实践(代码片段)

...够小,代码容易理解;2、服务独立测试、部署、升级、发布;3、按需定制的DFX,资源利用率,每个服务可以各自进行x扩展和z扩展,而且,每个服务可以根据自己的需要部署到合适的硬件服务器上;4、每个服务按需要选择HA的... 查看详情

docker一键打包微服务(代码片段)

...,是有的,我们可以直接通过idea将我们的微服务打包成Docker镜像,并推送到Docker仓库中这里我们采用jib-maven-plugin来进行来构建容器化的springboot应用程序,Jib可以让不写Dockerfile就能实现Docker打包什么是JibJib带来的是,它允许您... 查看详情

docker-部署lnmp(代码片段)

...何生成可参考右边的帮助文档文章目录一、环境二、安装docker1、安装docker源2、安装docker三、部署docker-lnmp1、创建nginx-php、mysql目录2、创建nginx-dockfile、php3、构建nginx-php镜像和开启服务4、创建mysql-Dockerfile5、构建mysql镜 查看详情

docker-部署lnmp(代码片段)

...何生成可参考右边的帮助文档文章目录一、环境二、安装docker1、安装docker源2、安装docker三、部署docker-lnmp1、创建nginx-php、mysql目录2、创建nginx-dockfile、php3、构建nginx-php镜像和开启服务4、创建mysql-Dockerfile5、构建mysql镜 查看详情

零基础用docker部署微服务(代码片段)

1. docker架构 这里的Client和DOCKER_HOST(docker server)都是在本地的,docker仓库Registry是在远程的;Client的docker命令通过Dockerdaemon与docker server镜像交互;images镜像是由应用已经被docker打包好的镜像,如java、nginx的镜像,... 查看详情

使用docker容器搭建lnmp架构(代码片段)

使用Docker搭建LNMP架构服务Docker官方镜像源:https://hub.docker.com/search?q=&type=image1.拉取镜像dockerpullmysql:5.7dockerpullnginx2.生成mysql容器#-d:以守护进程的方式运行(在后台运行)-e:设置容器内部的环境变量#MYSQL_ROOT_PASSWORD&# 查看详情

lnmp综合配置(代码片段)

Nginx默认虚拟主机vim/usr/local/nginx/conf/nginx.conf//增加includevhost/*.confmkdir/usr/local/nginx/conf/vhostcd!$;vimdefault.conf//加入如下内容serverlisten80default_server;//有这个标记的就是默认虚拟主机server_nameaaa.com;indexi 查看详情

第3次系统综合实践(代码片段)

(1)完成Docker-compose的安装首先用了官方文档中的方法,但是实在是太慢啦于是百度换了一种方法,安装成功(2)Dockerfile编写选择lnmp来搭建:先来看整体最终的结构:docker-compose.yml:version:"3"services:nginx:build:./nginxports:-"81:8808"#暴... 查看详情

docker部署lnmp-wordpress(代码片段)

目录一、实验环境二、安装docker源三、安装docker四、部署Nginx和PHP1、上传/解压软件包和配置文件2、创建dockerfile文件3、构建镜像4、创建容器并运行5、开启服务五、部署MySQL1、创建MySQL的dockerfile文件2、构建镜像3、创建容器并运... 查看详情

springcloud之微服务实用篇3-docker(代码片段)

...天继续学习微服务的知识,今天的主要任务就是学习Docker,包括了解docker的工作原理、基本操作、Dockerfile自定义镜像,Docker-Compose对镜像进行集群部署,以及Docker镜像服务等。目录一、初识Docker1.1、Docker的工作原... 查看详情

springcloud之微服务实用篇3-docker(代码片段)

...天继续学习微服务的知识,今天的主要任务就是学习Docker,包括了解docker的工作原理、基本操作、Dockerfile自定义镜像,Docker-Compose对镜像进行集群部署,以及Docker镜像服务等。目录一、初识Docker1.1、Docker的工作原... 查看详情

springboot微服务打包为docker镜像(代码片段)

1、构建springboot项目2、打包应用3、编写dockerfileFROMjava:8COPY*.jar/app.jarCMD["--server.port=8080"]EXPOSE8080ENTRYPOINT["java","-jar","/app.jar"]4、构建镜像dockerbuild-tspringbootd 查看详情

关于docker那点事儿——dockercompose简介(代码片段)

dockercompose简介前言一、dockercompose概念二、dockercompose安装三、dockercompose常用命令四、docker-compose.yml文件详解1、文件结构2、示例:docker-compose管理微服务前言  微服务架构的应用系统一般包含若干个微服务,每个微服务... 查看详情

docker微服务教程(代码片段)

Docker是一个容器工具,提供虚拟环境。很多人认为,它改变了我们对软件的认识。站在Docker的角度,软件就是容器的组合:业务逻辑容器、数据库容器、储存容器、队列容器......Docker使得软件可以拆分成若干个标准化容器,然后... 查看详情

黑马四docker服务编排&docker私有仓库(代码片段)

一、Dockerfile1.1、服务编排微服务架构的应用系统中一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,维护的工作量会很大。要从Dockerfilebuildimage或者去dockerhub拉取image要创建... 查看详情