一、回顾
1、拉取私有仓库镜像
# 配置docker
docker pull 10.0.0.10:5000/centosnginx:v0
2、容器网络类型
brideg(net) default
# docker启动之后会生成新的虚拟网卡,网卡的名称docker0
# 网段默认是172.17.0.1
# 所有的容器都桥接docker0,通过桥接共享网络
brctrl show
yum -y install bridge-utils
host
# 使用方便,直接使用宿主机的ip
# 无法并发运行多个同类的容器
docker run -it --network bridge|host|none centos:latest /bin/bash
none
3、跨主机容器网络(两台不同主机上的容器的连接)
# A主机上的a1容器可以访问B主机上的b1容器
# flanneld技术
# 使用flanneld分配网段,被分配的网段都可以ping通
# 步骤
node11
docker
etcd(数据库,被flanneld保存网络地址网段等信息)
yum -y install etcd
# 1、配置文件
/etc/etcd/etcd.conf
# 修改了发布服务的端口和介绍请求的端口4001,2379
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379,http://0.0.0.0:4001"
ETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.11:2379,http://10.0.0.11:4001"
# 2、启动服务
systemctl start etcd
# 3、测试服务
netstat -lntup | grep 2379
netstat -lntup | grep 4001
etcdctl set a 123
etcdctl get a
# 4、检查安全
etcdctl -C http://10.0.0.10:4001 cluster-health
flanneld
yum -y install flanneld
# 5、配置连接数据库
vim /etc/sysconfig/flanneld
FLANNEL_ETCD_ENDPOINTS="http://10.0.0.11:2379"
# 在启动之前要在etcd数据库中添加指定网段
172.20.0.0/16
etcdctl mk /atomic.io/network/config '{ "Network" : "172.20.0.0/16" }'
# 6、启动服务,在启动flanneld服务的时候,会先读取etcd中的network信息,确定要创建的网段
systemctl start flanneld
# 7、查看分配的网段
ifconfig|ip a s查看新的flannel0网卡
# 8、如果不配置docker的daemon.json文件,那么默认docker容器的IP地址是172.17.0.1,需要修改daemon.json并且重启docker服务,让docker0这个网卡的网段和flannel0网卡的网段一致
cat /run/flannld/subnet.env
vim /etc/docker/daemon.json
{
...,
"bip" : "172.20.x.x",
"mtu" : 1472
}
# 9、重启docker服务,查看docker0的网段
systemctl restart docker
ifconfig docker0
node22
# 1、安装docker
# 2、安装flanneld
yum -y install flanneld
# 3、配置/etc/sysconfig/flanneld,从node11中的etcd数据库中读取网络信息
# 4、启动flanneld
# 5、ip a s flannel0 分配了一个新的网段
# 6、修改node22下面的daemon 添加两个key bip mtu
# 7、重启docker服务
# 8、docker0的ip地址和flannel0的ip地址保持一致
二、使用docker-compose编排容器
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。
1、Docker-compose 定义
1)docker compose 是 docker 官⽅的开源项⽬,负责实现对 docker 容器集群的快速编排(容器,依赖,⽹络,挂载。。)
2)compose 是 docker 公司推出的⼀个⼯具软件,可以管理多个 docker 容器组成的应⽤
3) 需要定义⼀个 YAML 格式的配置⽂件 docker-compose.yml,写 好多个容器之间的调⽤关系
4)使⽤ compose 的步骤
使⽤ Dockerfile 定义各个微服务应⽤并构建出对应的镜像⽂件Dockerfile 的使⽤,以便可以在任何地⽅复制。
使⽤ docker-compose.yml 定义⼀个完整的业务单元,安排好整体应⽤中的各个容器服务。
最后,执⾏ docker-compose up 命令来启动并运⾏整个应⽤程序,完成⼀键部署。
2、Docker-compose 产⽣背景
1)使⽤ Dockerfile 定义镜像⽂件,再⼿动构建、运⾏容器等操作,⽽微服务架构⼀般包含若⼲个微服务,且每个微服务⼀般都会部署多个实例,所以,若每个微服务都需要⼿动启停,那么维护量会⾮常庞⼤,并且⼯作效率也会很低。
2)⽽ compose 是⽤于定义和运⾏多容器 docker 应⽤程序的⼯具。通过 compose,可以使⽤ YML ⽂件来配置应⽤程序需要的所有服务。
3)仅需使⽤⼀个命令,就可以从 YML ⽂件配置中创建并启动所有 服务。
4)Compose 可以基于 Compose ⽂件帮我们快速的部署分布式应 ⽤,⽆需⼿动⼀个个创建和运⾏容器。
5)Compose ⽂件是⼀个⽂本⽂件,通过指令定义集群中的每个容 器如何运⾏。
3、Docker-compose 核⼼概念
Docker-compose 将管理的容器分为三层:⼯程(project)、 服务(service)、容器(container)
1、⼯程:运⾏ compose 的⽬录下所有的⽂件,包括 docker-compose.yml、extends ⽂件、环境变量⽂件等组成⼀个⼯程, 若⽆特殊指定⼯程,⼯程名即为当前⽬录名。⼯程的默认配置⽂件为 docker-compose.yml,可通过环境变量 COMPOSE_FILE 或 -f 参数⾃定义配置⽂件,其定义了多个有依赖关系的服务及每个服务运⾏的容器。
2、 服务:⼀个⼯程中包含多个服务,每个服务中定义了容器运⾏的 镜像、参数、依赖等。⼀个服务中可包括多个容器实例。
3、容器:被 docker-compose 管理或部署的容器集群,调⽤ docker 服务提供的 API 来对容器进⾏管理,只要操作的平台⽀持 docker API,即可在其上进⾏ compose 的容器编排。
4、YAML ⽂件的格式和语法
1)YAML ⽂件格式
yaml 是⼀种标记语⾔很直观的数据序列化格式,可读性很⾼。 类似于 xml 描述性语⾔,语法⽐xml简单的很多。
yaml 数据结构通过缩进进⾏表示,连续的项⽬通过减号来表示,键值对⽤冒号分隔,数组⽤中括号括起来,hash⽤花括号括起来。
yaml ⽂件的基本格式由⼀系列键值对构成。每个键值对都⽤冒号“: ”分隔
key: value
在 yaml 中,键和值之间只需要⼀个空格,这是为了保证 yaml ⽂件的可读性和⼀致性
对于字符串值,可以使⽤单引号或者双引号将其括起来,这样可以避免出现特殊字符或空格等问题
name: 'Meng Mr'
age: "34"
如果值包含特殊字符(如冒号或短横线),则应该使⽤引号将其括起来
description: "This is a YAML file: good for configuation files."
2)YAML 注意事项
不⽀持制表符 tab 键缩进,需要使⽤空格缩进。
通常开头缩进 2 个空格。
字符后缩进 1 个空格,如:冒号,逗号,横杠。
⽤ # 表示注释。
如果包含特殊字符⽤单引号引起来。
布尔值(true、false、yes、no、on、off)必须使⽤“”引号括起来,这样分析器会将它们解释为字符串。
3)列表和数组
在yaml中,可以使⽤“-”符号表示⼀个列表和数组
fruits: # fruits是⼀个键,它对应⼀个列表,包含三个元素:apple、banana、orange
- apple # fruits为⼀个⼤项,下⾯的⼩项只需要缩进⼏个
空格,与其他项⽬对⻬即可
- banana
- orange
4)嵌套数据结构
yaml⽀持嵌套数据结构,可以⽤缩进来表示不同层级之间的关系, 可使⽤ # 号表示注释信息。
person:
name: 'Meng Mr' # 两个空格,name和age是person的⼀级⼦节点
age: "34"
address: # address是person的⼆级⼦节点
street: '123 Main St' # address节点包含了street、city、state和zip四个⼀级⼦节点
city: 'Anytown'
state: 'CA'
zip: '12345'
5)Docker-compose 安装
使用pip工具-------安装docker-compose
pip是python的包管理工具,和yum是redhat的关系是一样的
# 由于要使用python环境运行docker-compose,所以需要验证pyt