Docker高级管理(实例演示!!!)

Docker网络通信

Docker单机网络拓扑图:

端口映射:

  • 端口映射机制将容器内的服务提供给外部网络访问
  • 可随机或指定映射端口范围
docker run -d -P httpd:centos
docker run -d -p 49888:80 httpd:centos

容器互联

  • 在源容器和接收容器间建立一条网络通信隧道
  • 使用docker run命令–link选项实现容器间互联通信

实现容器互联

docker run -d -P --name web1 httpd:centos
docker run -d -P --name web2 --link web1:web1
httpd:centos
docker exec -it web2 /bin/bash
ping web1

Docker Compose容器编排

  • Docker Compose的前身是Fig,它是一个定义及运行多个Docker容器的工具
  • 使用Docker Compose不再需要使用shell脚本来启动容器
  • Docker Compose非常适合组合使用多个容器进行开发的场景

Docker Compose环境安装

[[email protected] ~]# curl -Lhttps://github.com/docker/compose/releases/download/1.21.1 /docker-compose-`uname -s`-`uname -m`-o /usr/local/bin/docker-compose
[[email protected] ~ ]# chmod +x /usr/local/bin/docker-compose
[[email protected] ~ ]# docker-compose -v

Docker Compose文件结构

[[email protected] compose_ Inmp]# vim docker-compose.yml
  • YAML是一种标记语言很直观的数据序列化格式
  • 文件格式及编写注意事项
    1.不支持制表符tab键缩进,需要使用空格缩进
    2.通常开头缩进2个空格
    3.字符后缩进1个空格,如冒号、逗号、横杠
    4.用井号注释
    5.如果包含特殊字符用单引号引起来
    6.布尔值必须用引号括起来

Docker Compse配置常用字段:

字段 描述
build dockerfile context 指定Dockerfile文件名构建镜像上下文路径
image 指定镜像
command 执行命令,覆盖默认命令
container name 指定容器名称,由于容器名称时唯一的,如果指定自定义名称,则无法scale
deploy 指定部署和运行服务相关配置,只能在Swarm模式使用
environment 添加环境变量
networks 加入网络
ports 暴露容器端口,与-p相同,但端口不能低于60
volumes 挂载宿主机路径或命令卷
restart 重启策略,默认no,always,no -failure,unless-stoped
hostname 容器主机名

Docker Compse常用命令:

字段 描述
build 重新构建服务
ps 列出容器
up 创建和启动容器
exec 在容器里面执行命令
scale 指定一个服务容器启动数量
top 显示容器进程
logs 查看容器输出
down 删除容器/网络/数据卷和镜像
stop/start/restart 停止/启动/重启服务

Compose命令说明

  • 基本的使用格式
docker-compose [options] [COMMAND] [ARGS...]
  • docker-compose选项

    --verbose输出更多调试信息
    --version打印版本并退出
    -f, --file FILE使用特定的compose模板文件,默认为docker-compose.yml
    -p, --project-name NAME指定项目名称,默认使用目录名称

Docker consul容器服务更新与发现

  • 容器服务更新与发现拓扑图

Consul

  • Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置
  • Consul的特性
    1.Consul支持健康检查,允许存储键值对
    2.一致性协议采用Raft算法,用来保证服务的高可用
    3.成员管理和消息广播采用GOSSIP协议,支持ACL访问控制
  • 方便部署,与Docker等轻量级容器可无缝配合
  • 构建自动发现的Docker服务架构
  • 建立Consul服务
    1.每个提供服务的节点上都要部署和运行Consul的agent
    2.Consul agent有两种运行模式
    Server
    Client
    3.Server和Client只是Consul集群层面的区分,与搭建在Cluster之上的应用服务无关
  • Consul常用的命令
    -v 数据卷
    -d 放在后台执行
    -i 标准性输入
    -t 分配伪终端
  • Consul的作用
    1.做编排时需要修改配置文件,实现多配置文件同时修改
    2.扩展性的文件放在vhost中,节偶的方式

一、安装Docker-ce引擎

#安装依赖包
yum install yum-utils device-mapper-persistent-data lvm2 -y

#设置阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#安装Docker-ce
yum install -y docker-ce

#关闭防火墙及增强型安全功能
systemctl stop firewalld.service
setenforce 0

#启动Docker并设置为开机自启动
systemctl start docker.service
systemctl enable docker.service

#检查相关进程开启情况
ps aux | grep docker

#重载守护进程
systemctl daemon-reload

#重启服务
systemctl restart docker

二、部署docker-compose

#下载安装compose
curl -L https://github.com/docker/compose/releases/download/1.25.1-rc1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

#提权方便调用
chmod +x /usr/local/bin/docker-compose

#建立compose站点
mkdir /root/docker_compose

三、部署nginx+Tomcat

#建立compose文件
vim /root/docker-compose/docker-compose.yml
#compose版本号,有1、2、3
version: ‘3.3‘
#服务名称
services:
  nginx:
#主机名
    hostname: nginx
#建立镜像需要的目录、dockerfile脚本名
    build:
      context: ./nginx
      dockerfile: Dockerfile
#映射宿主机端口
    ports:
     - 1216:80
     - 1200:443
#工作组:同一集群一个名字
    networks:
     - test
#建立数据集的目录
    volumes:
     - ./wwwroot:/usr/local/nginx/html
  tomcat:
    hostname: tomcat
    build:
      context: ./tomcat
      dockerfile: Dockerfile
    ports:
     - 888:8080
    networks:
     - test
networks:
  test:

#需要建立新镜像的服务需要放在compose工作站点中
[[email protected] docker_compose]# ls
docker-compose.yml  nginx  tomcat

#建立容器
“-f”  指定compose文件
docker-compose -f docker-compose.yml up -d

四、docker-consul+template

实验环境

名称 角色 IP地址 所需环境包
centos7-1 master 192.168.142.128 Docker-ce、Compose 、Consul、Consul-template
centos7-2 slave1 192.168.142.129 Docker-ce、registrator
centos7-min slave2 192.168.142.130 Docker-ce、registrator
  • master端操作

    
    #安装Consul
    [[email protected] ~]# mkdir consul
    [[email protected] ~]# cd consul/
    [[email protected] consul]# unzip consul_0.9.2_linux_amd64.zip
    [[email protected] consul]# ls
    consul  consul_0.9.2_linux_amd64.zip

#移动文件,方便识别
[[email protected] consul]# mv consul /usr/bin/

#设定代理并后台启动
[[email protected] consul]# consul agent \
-server \
-bootstrap \
-ui \
-data-dir=/var/lib/consul-data \
-bind=192.168.142.128 \
-client=0.0.0.0 \
-node=consul-server01 &> /var/log/consul.log &

#查看后台进程
[[email protected] consul]# jobs
[1]+ 运行中 consul agent -server -bootstrap -ui -data-dir=/var/lib/consul-data -bind=192.168.142.128 -client=0.0.0.0 -node=consul-server01 &>/var/log/consul.log &

“agent” 使用agent代理功能

“-server” 提供server功能

“-bootstrap” 参与选举为领袖

“-ui” 提供用户界面

“-data-dir” 参数存储位置

“-bind” 绑定地址

“-node” 定义节点名称

- 检查群集状态
```shell
#查看群集信息
[[email protected] consul]# consul members
Node             Address              Status  Type    Build  Protocol  DC
consul-server01  192.168.142.128:8301  alive   server  0.9.2  2         dc1

#过滤leader信息
[[email protected] consul]# consul info | grep leader
        leader = true
        leader_addr = 192.168.142.128:8300
  • 通过httpd api 获取集群信息
curl 127.0.0.1:8500/v1/status/peers #查看集群server成员

curl 127.0.0.1:8500/v1/status/leader #集群Raf leader

curl 127.0.0.1:8500/v1/catalog/services #注册的所有服务。

curl 127.0.0.1:8500/v1/catalog/nginx #查看nginx服务信息

curl 127.0.0.1:8500/v1/catalog/nodes #集群节点详细信息
  • 使节点服务器中的容器自动加入
#安装registrator(注册器)
#该工具可检查容器运行状态自动 进行注册,还可注销docker容器的服务
[[email protected] ~]# docker run -d --name=registrator --net=host -v /var/run/docker.sock:/tmp/docker.sock --restart=always gliderlabs/registrator:latest -ip=192.168.142.129 consul:#192.168.142.128:8500
  • 测试功能是否正常
[[email protected] ~]# docker run -itd -p:83:80 --name test-01 -h test01 nginx
[[email protected] ~]# docker run -itd -p:84:80 --name test-02 -h test02 nginx
[[email protected] ~]# docker run -itd -p:85:80 --name test-03 -h test03 httpd
[[email protected] ~]# docker run -itd -p:86:80 --name test-04 -h test04 httpd
  • 验证群集是否建立成功

    浏览器中输入http:#192.168.142.128:8500,单击“NODES”,然后点击“consurl-seerver01”,即可看到五个服务(图形化界面)


    五、建立template进行代理

  • 手工编译安装nginx1.12.0
    (前面博客有详细的)
  • 安装consul-template
    template属于守护进程,用于实时查询consul集群信息,并实时使用模板进行配置文件的生成。
    [[email protected] ~]# unzip consul-template_0.19.3_linux_amd64.zip
    #启用template命令
    [[email protected] ~]# mv consul-template /usr/bin/
  • 撰写nginx配置文件模板
    
    [[email protected] consul]# vim nginx.ctmpl        #nginx配置文件的模板
    upstream http_backend {         #服务器池的名称
    {{range service "nginx"}}
    server {{.Address}:{{.Port}};     #调用变量:服务器节点的地址和端口
    {{end}}
    }

server {
listen 110;
server_name localhost 192.168.142.128; #master端地址
access_log /var/log/nginx/kgc.cn-access.log;
index index.html index.php;
location / { #请求头部信息的设定
proxy_set_header HOST $host;
proxy_set_header X-Real-IP $remote_addr; #后端服务器IP
proxy_set_header Client-IP $remote_addr; #client的IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #forward跳转地址
proxy_pass http:#http_backend; #请求跳转给http_backend服务器池
}
}


- 修改配置文件

```shell
#更改nginx配置文件
[[email protected] nginx-1.12.0]# vim /usr/local/nginx/conf/nginx.conf
#在18行下插入以下内容
include     vhost/\*.conf;                    #添加include方便nginx识别模板生成的配置文件

#此时还没有这个文件,需要去创建
[[email protected] nginx-1.12.0]# cd /usr/local/nginx/conf/
[[email protected] conf]# mkdir vhost      #创建虚拟机目录

#启用template模板(启用后会进入监控模式)
[[email protected] ~]# consul-template -consul-addr 192.168.142.128:8500 -template "/root/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/kgc.conf:/usr/local/nginx/sbin/nginx -s reload" --log-level=info
“-consul-addr” #指定consul端地址

“-template” #后方从左到右分别为:模板文件路径、生成的配置文件名称、重载nginx

“–log-level” #写入日志的等级

谢谢阅读!!!

原文地址:https://blog.51cto.com/14449521/2468267

时间: 2024-10-15 05:07:59

Docker高级管理(实例演示!!!)的相关文章

docker高级管理(docker-compose编排工具,consul架构)

本章知识点概括: Docker Compose容器编排构建自动发现的Docker服务架构实现容器服务自动加入Nginx集群 **Docker Compose容器编排功能** Docker compose的前身是Fig,它是一个定义及运行多个docker容器的工具 使用Docker Compose不再需要使用shell脚本来启动容器 Docker Compose非常适合组合是同多个容器进行开发的场景 可以执行多个容器的操作 **Docker Compose容器编排** YAML是一种标记语言很直观

Docker私有仓库部署---Harbor(实例演示!!!)

Harbor概述 Harbor是VMware公司开源的企业级Docker Registry项目 Harbor的优势 基于角色控制 基于镜像的复制策略 支持LDAP/AD 图像删除和垃圾收集 图形UI 审计 RESTful API Harbor架构组成 Proxy 通过一个前置的反向代理统一接受浏览器,Docker客户端的请求,并将请求转发给后端不同的服务 Registry 负责存储Docker镜像.并处理docker push/pull 命令 Core services Harbor的核心功能,

Ansible角色管理-Roles(实例演示!!!)

Roles的概述 Roles能够根据层次型结构自动装载变量文件.task以及handlers等. 简单来讲,Roles就是通过分别将变量.文件.任务.模块及处理器放置于单独的目录中,并可以便捷地include它们. Roles一般用于基于主机构建服务的场景中,但也可以用于构建守护进程等场景中. Roles的目录 目录名称 具体含义 files 用来存放由copy模块或script模块调用的文件 templates 用来存放j正则模板,template模块会自动在此目录中寻找正则模板文件 task

ORACLE 11G DataGuard的一些高级管理案例研究

搭建完了ORACLE 11G dataguard后,也做了角色切换的实验,有switchover已经failover,感觉受益颇多,而后继续研究了下dataguard的一些高级管理功能,所谓冰山一角,ORACLE果然博大精深,总结记录如下:1,ORACLE 11G dataguard的高级管理1.1.READ ONLY/WRITE模式打开物理STANDBY一般standby都是可以设置为mount状态的,于物理standby 可以有效分担primary 数据库压力,提升资源利用,实际上说的就是这

docker专题(2):docker常用管理命令(上)

http://segmentfault.com/a/1190000000751601 本文只记录docker命令在大部分情境下的使用,如果想了解每一个选项的细节,请参考官方文档,这里只作为自己以后的备忘记录下来. 根据自己的理解,总的来说分为以下几种: 容器生命周期管理 — docker [run|start|stop|restart|kill|rm|pause|unpause] 容器操作运维 — docker [ps|inspect|top|attach|events|logs|wait|ex

实例演示如何使用RDIFramework.NET 框架的工作流组件进行业务流程的定义—请假申请流程

实例演示如何使用RDIFramework.NET 框架的工作流组件 进行业务流程的定义-请假申请流程 RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架,给用户和开发者最佳的.Net框架部署方案. 参考文章: RDIFramework.NET - 基于.NET的快速信息化系统开发框架 - 系列目录 RDIFramework.NET ━ .NET快速信息化系统开发框架 ━ 工作流程组件介绍 RDIFramework.NET ━ .NET快速信息化系统开发框架 ━ 工作流程

学习ASP.NET MVC框架揭秘笔记-实例演示:SC模式的应用

实例演示:SC模式的应用 为了对SC模式下的MVP,尤其是该模式下的View和Presenter之间的交互方式有一个深刻的认识,我们现在来做一个实例演示.我们采用员工查询的场景,用ASP.NET Web Forms来建立这个简单的应用. 我们先来定义员工的数据类型,Employee来表示一个员工,有5个属性:ID.姓名.性别.出生日期和部门. public class Employee { public string Id { get; private set; } public string

jmeter实例演示

Jmeter 是比较轻便的性能测试工具,下面根据一个实例演示下jmeter的常见用法 一.前期准备,在使用之前,先分析测试需求,比如:需不要登录?需不需要监视服务器性能?多线程还是多循环?需不需根据流量回放设计不同接口的请求数?有了目标后,可根据需求设计对应的测试方案. 1.  为了简单展示jmeter的使用,本实例设计如下:需求登录,登录一次即可 2.  需同时监控服务器性能 3.  需查看接口的性能,比如响应时间,吞吐量等 4.  线程数设置为1,循环数为10 二.实例演示 1.启动jmet

审核流(3)低调奢华,简单不凡,实例演示-SNF.WorkFlow--SNF快速开发平台3.1

下面我们就从什么都没有,结合审核流进行演示实例.从无到有如何快速完美的实现,然而如此简单.低调而奢华,简单而不凡. 从只有数据表通过SNF.CodeGenerator代码生成器快速生成单据并与审核流进行结合案例. 现在我只有这样一个表如下:(下面介绍单表,多表原理是一样的) 1.审核流结合代码生成器快速实现 1.用代码生成器生成单据(选择启用审核流) 之后点击“生成“并把对应代码拷贝到相应的位置,执行脚本把菜单预制进去,详见“06.SNF.CodeGenerator代码生成器使用说明.docx”