docker网络,docker容器编排【compose】、搭建consul群集
一、docker网络
当你开始大规模使用Docker时,你会发现需要了解很多关于网络的知识。Docker作为目前最火的轻量级容器技术,有很多令人称道的功能,如Docker的镜像管理。然而,Docker同样有着很多不完善的地方,网络方面就是Docker比较薄弱的部分。因此,我们有必要深入了解Docker的网络知识,以满足更高的网络需求。
【1】Docker自身的4种网络工作方式
【安装Docker时,它会自动创建三个网络,bridge(创建容器默认连接到此网络)、 none 、host】
(1)Host 容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。
(2)Bridge 此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥,通过docker0网桥以及Iptables nat表配置与宿主机通信。
(3)None 该模式关闭了容器的网络功能。
(4)Container 创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围。
【2】自定义网络固定ip的配置
docker network create --subnet=172.18.0.0/24 mynamenetwork
docker run -itd --name test --net mynamenetwork --ip 172.18.0.11 centos:7 /bin/bash
二、compose容器编排
Compose是一个用于定义和运行多容器Docker应用程序的工具,前身是fig。使用Compose,您可以使用Compose文件来配置应用程序的服务。然后,使用单个命令,您可以从配置中创建并启动所有服务。Compose非常适合开发,测试和登台环境以及CI工作流程。它是一个定义及运行多个docker容器的工具,使用docker compose不再需要使用shell脚本来启动容器,docker compose非常适合组合使用多个进行开发的场景。
【1】使用Compose基本上是一个三步过程
(1) 定义您的应用程序环境,Dockerfile以便可以在任何地方进行复制。
(2)定义构成应用程序的服务,docker-compose.yml以便它们可以在隔离环境中一起运行。
(3)最后,运行docker-compose up和Compose将启动并运行整个应用程序。
【2】compose的文件格式注意事项
yaml是一种标记语言很直观的数据序列格式,文件格式要注意的事项:
————————————————————————————
不支持制表符tab键缩进,需要使用空格缩进
通常开头缩进2个空格
字符后缩进1个空格,如冒号、逗号、横杆
使用#注释
如果包含特殊字符用单引号引起来
布尔值必须使用引号括起来
————————————————————————————
【3】docker compose配置常用的字段
——————————————————————————————————————
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:容器主机名
————————————————————————————————————
【4】docker compose常用命令
——————————————————————————————————
build:重新构建服务
ps:列出容器
up:创建和启动容器
exec:在容器里面执行命令
scale:指定一个服务容器启动数量
top:显示容器进程
logs:查看容器输出
down:删除容器、网络、数据卷和镜像
stop|start|restart:停止|启动|重启服务
————————————————————————————————————
【5】compose命令说明
基本的使用格式;
docker-compose [options] [COMMAND] [ARGS.....]
docker-compose选项
--version:打印版本并退出
--verbose:输出更多调试信息
-f,--file FILE :使用特定的compose模板文件,默认为docker-compose.yml
-p,--project-name NAME :指定项目名称,默认使用目录名称
三、consul介绍
consul是hashicorp公司推出的开源工具,用于实现分布式系统的服务发现与配置。Consul是一个服务管理软件。支持多数据中心下,分布式高可用的,
服务发现和配置共享。采用 Raft 算法,用来保证服务的高可用。
【1】consul的特性
支持健康检查,允许存储键值对
基于golong语言,可移植性强
支持ACL访问控制
四、搭建consul之docker群集
项目说明:使用docker-compose搭建consul集群环境
项目需求:
两台服务器consul和regisrator
【1】192.168.60.10:docker、compose、consul、consul-template
【2】192.168.60.100:docker、registrator
实现单机网络下容器与容器之间的互通
使用docker compose创建容器
搭建consul服务实现自动发现和更新
项目步骤:
【1】部署docker环境
(1)安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
#yum-utils提供了yum-config-manager
#device mapper存储驱动程序需要device-mapper-persistent-data和lvm2
#device mapper是Linux2.6内核中支持逻辑卷管理的通用设备映射机制,它为实现用于存储资源管理的块设备提供了一个高度模块化的内核架构
(2)设置阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
(3)安装docker并设置为开机自启动
systemctl stop firewalld
setenforce 0
yum install docker-ce docker-ce-cli containerd.io
systemctl start docker
systemctl enable docker
(4)镜像加速【在自己的阿里云账号中有镜像加速,复制到下面目录即可】
您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://730ykxsw.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker
(5)网络优化
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p
service network restart
systemctl restart docker
【2】下载compose,上传,给权限
cp -p docker-compose /usr/local/bin
chmod +x /usr/local/bin/docker-compose
【3】创建服务的站点及配置文件
yum install -y tree
(1)创建站点
mkdir /opt/compose_nginx
cd /opt/compose_nginx
(2)创建服务站点
mkdir nginx
cd nginx
——————————————————————————
vim Dockerfile
FROM centos:7
MAINTAINER nginx
RUN yum install -y pcre-devel zlib-devel gcc gcc-c++ make
RUN useradd -M -s /sbin/nologin nginx
ADD nginx-1.12.2.tar.gz /usr/local/
WORKDIR /usr/local/nginx-1.12.2
RUN ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module && make && make install
ENV PATH /usr/local/nginx/sbin:$PATH
EXPOSE 80
EXPOSE 443
RUN echo "daemon off;">>/usr/local/nginx/conf/nginx.conf
ADD run.sh /run.sh
RUN chmod 755 /run.sh
CMD ["/run.sh"]
——————————————————————————
vim run.sh
#!/bin/bash
/usr/local/nginx/sbin/nginx
——————————————————————————
上传nginx软件包
(3)创建配置文件
cd ..
vim docker-compose.yml【注意格式,尤其是空格,service下面可以包含多个服务】
version: '3'
service:
nginx:
hostname: nginx
build:
context: ./nginx
dockerfile: Dockerfile
ports:
- 1216:80
- 1217:443
networks:
- yun
volumes:
- ./wwwroot:/usr/local/nginx/html
networks:
yun:
(4)指定配置文件启动
docker-compose -f docker-compose.yml up -d
(5)编写web站点
cd wwwroot
vim index.html
<h1>this is compose web</h1>
(6)使用tree查看docker-compose目录
[root@localhost compose_nginx]# tree ./
./
├── docker-compose.yml
├── nginx
│ ├── Dockerfile
│ ├── nginx-1.12.2.tar.gz
│ └── run.sh
└── wwwroot
【4】清空防火墙策略
iptables -F
【因为在两个桥接docker网络之间联通要使用nat表,所以不能关闭防火墙】
setenforce 0