声明
该公众号大部分文章来自作者日常学习笔记,也有部分文章是经过作者授权和其他公众号白名单转载。请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者和本公众号无关。
一.Docker网络
1.docker网络命令
docker网络列表显示
docker network ls
Docker网络数据源
docker network inspect XXX网络名字
删除网络
docker network rn xxx网络名字
添加Docker网络
docker network add xxx
2.Docker网络模式
查看某个容器的网络模式
# 通过inspect获取容器信息,最后20行即为容器的网络模式信息
docker inspect 容器ID | tail -n 20
Docker 服务默认会创建一个docker0网桥(其上有一个docker0内部接口),该桥接网络的名称为 docker0,它在内核层连通了其他的物理或虚拟网卡,这就将所有容器和本地主机都放到同一个物理网络。
Docker默认指定了docker0接口的IP地址和子网掩码,让主机和容器之间可以通过网桥互相通信。
查看bridge网络的详细信息,并通过grep获取名称
docker network inspect bridge | grep name
可以看到其名称为docker0。
bridge模式
docker run的时候,没有指定—network的话,默认使用的网桥模式就是bridge
例如:启动tomcat容器,进入tomcat容器后,执行 ip addr,可以看到其网卡信息
1: lo ..................
容器内的网卡为 eth0
@符号后面就是宿主机上对应的veth网卡的编号28
27: eth0@if28 ...............................
在宿主机执行 ip addr 查看宿主机网卡信息
每个veth都有个编号:vethXXXXXX
@符号后面对应就是容器内的eth0网卡编号27
28: vethXXXXXX@if27 ................
host模式
直接使用宿主机的 IP 地址与外界进行通信,不再需要额外进行 NAT 转换。
如果在 docker run 命令中同时使用了 —network host 和 -p端口映射,例如:
docker run -p 8082:8080 --network host centos
那么会出现一个警告:
WARNING: Published ports are discarded when using host network mode
因为此时已经使用了host模式,本身就是直接使用的宿主机的IP和端口,此时的-p端口映射就没有了意义,也不会生效,端口号还是会以主机端口号为主。
正确做法是:不再进行-p端口映射,或者改用bridge模式
none模式
禁用网络功能。
docker run -it --name alpine1 alpine /bin/sh
# 指定和 alpine1 容器共享网络
docker run -it --netrowk container:alpine1 --name alpine2 alpine /bin/sh
此时使用 ip addr查看两台容器的网络,会发现两台容器的eth0网卡内的IP等信息完全相同。
如果关掉了alpine1容器,因为alpine2的网络使用alpine1共享网络,所以关掉alpin1后,alpine2的eth0网卡也随之消失了。
自定义网络
容器间的互联和通信以及端口映射。
容器 IP 变动时候可以通过服务名直接网络通信而不受影响。(类似Eureka,通过服务名直接互相通信,而不是写死IP地址)。
docker中还有一个 —link 进行容器网络互联,但是已经被标记为过时的,可能会在将来的版本中移除这个功能。推荐使用自定义网络替换link。
自定义桥接网络(自定义网络默认使用的是桥接网络 bridge)
1.新建自定义网络:
docker network create tomcat_network
2.查看网络列表
docker network ls
3.创建容器时,指定加入我们自定义的网络中
docker run -d -p 8081:8080 --network tomcat_network --name tomcat1 tomcat:8.5-jdk8-corretto
docker run -d -p 8082:8080 --network tomcat_network --name tomcat2 tomcat:8.5-jdk8-corretto
此时进入tomcat1中,使用ping命令测试连接tomcat2容器名,发现可以正常连通
安装ifconfig命令
yum install -y net-tools
addr命令
yum install -y iproute
安装ping命令
yum install -y iputils
IP地址
ping tomcat2
二.Docker-compose容器编排
1.常用命令
需要在对应的docker-compose.yml文件所在目录下执行。
1、查看帮助:
docker-compose -h
2、创建并启动docker-compose服务
docker-compose up
# 后台运行
docker-compose up -d
3、停止并删除容器,网络,卷,镜像
docker-compose down
4、进入容器实例内部
docker-compose exec <yml里面的服务id> /bin/bash
5、展示当前docker-compose编排过的运行的所有容器
docker-compose ps
6、展示当前docker-compose编排过的容器进程
docker-compose top
7、查看容器输出日志
docker-compose log <yml里面的服务id>
8、检查配置
docker-compose config
# 有问题才输出
docker-compose config -q
9、重启服务
docker-compose restart
10、启动服务
docker-compose start
11、停止服务
docker-compose stop
2.Compose编排例子
# docker-compose文件版本号
version: "3"
# 配置各个容器服务
services:
microService:
image: springboot_docker:1.0
container_name: ms01 # 容器名称,如果不指定,会生成一个服务名加上前缀的容器名
ports:
"6001:6001"
volumes:
/app/microService:/data
networks:
springboot_network
depends_on: # 配置该容器服务所依赖的容器服务
redis
mysql
redis:
image: redis:6.0.8
ports:
"6379:6379"
volumes:
/app/redis/redis.conf:/etc/redis/redis.conf
/app/redis/data:data
networks:
springboot_network
command: redis-server /etc/redis/redis.conf
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: '123456'
MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
MYSQL_DATABASE: 'db_springboot'
MYSQL_USER: 'springboot'
MYSQL_PASSWORD: 'springboot'
ports:
"3306:3306"
volumes:
/app/mysql/db:/var/lib/mysql
/app/mysql/conf/my.cnf:/etc/my.cnf
/app/mysql/init:/docker-entrypoint-initdb.d
networks:
springboot_network
command: --default-authentication-plugin=mysql_native_password # 解决外部无法访问
networks:
# 创建 springboot_network 网桥网络
springboot_network:
编写完成docker-compose.yml后,进行语法检查
# 进行语法检查
docker-compose config -q
如果语法检查没有任何问题,进行创建,启动
docker-compose up -d
注:如有侵权请后台联系进行删除
觉得内容不错,请点一下"赞"和"在看"
今日互动
阅读公众号三篇文章并且"点赞+在看"即可参与活动
开奖日随机抽取一位粉丝宝贝送出渗透书籍!
活动截止6月22日中午12点
点击下方链接参与活动:
1、公众号后台回复:搜索大法,获取searchall工具下载链接。
2、公众号后台回复:靶场,获取靶场工具网盘下载链接。
3、公众号后台回复:webshell,获取webshell下载链接。
原文始发于微信公众号(嗨嗨安全):端午安康!Docker深度学习(三)
- 我的微信
- 微信扫一扫
-
- 我的微信公众号
- 微信扫一扫
-
评论