本章结构
1.Docker网络原理
2.Docker Compose容器编排(yml)
3.构建自动发现的Docker服务架构(群集)
4.实现容器服务自动加入Nginx集群
Docker网络通信
Docker单机网络拓扑图:
端口映射:
1.端口映射机制将容器内的服务提供给外部网络访问
2.可随机或指定映射端口范围
docker run -d -P httpd:centos
docker run -d -p 49888:80 httpd:centos(两个端口号)
容器互联
1.在源容器和接收容器间建立一条网络通信隧道
2.使用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容器编排
1.Docker Compose的前身是Fig,它是一个定义及运行多个Docker容器的工具
2.使用Docker Compose不再需要使用shell脚本来启动容器
3.Docker Compose非常适合组合使用多个容器进行开发的场景
4.Docker Compose环境安装
[root@localhost ~]# curl -L
https://github.com/docker/compose/releases/download/1.21.1 /docker-compose-uname -s
-uname -m
-o /usr/local/bin/docker-compose[root@localhost ~ ]# chmod +x /usr/local/bin/docker-compose
[root@localhost ~ ]# docker-compose -v`
5.Docker Compose文件结构
[root@localhost compose_ Inmp]# vim docker-compose.yml
6.YAML是一种标记语言很直观的数据序列化格式
7.文件格式及编写注意事项
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容器服务更新与发现
容器服务更新与发现拓扑图:
Demo:docker-compose部署
先安装Docker引擎
[root@localhost ~]# yum install yum-utils device-mapper-persistent-data lvm2 -y
[root@localhost ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@localhost ~]# yum install -y docker-ce
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
[root@localhost ~]# systemctl start docker.service
[root@localhost ~]# systemctl enable docker.service
[root@localhost ~]# tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://w1ogxqvl.mirror.aliyuncs.com"]
}
EOF
[root@localhost ~]# echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.cnf
[root@localhost ~]# sysctl -p
[root@localhost ~]# service network restart
Restarting network (via systemctl): [ 确定 ]
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart docker
[root@localhost ~]