Docker-08 Docker网络

100 阅读2分钟

一、概述

目前企业中大部分都是基于K8s来搭建容器化集群平台,其网络环境都配置好了,使用十分方便。但是我们在自己电脑上学习的时候,搭建一个K8s环境有点大材小用,我可能只是为了方便部署一些应用,来协助我完成学习的过程,使用Docker就足够了。基于Docker搭建多个应用,多个应用可能存在网络之间的访问,这时候就可以用Docker的网络功能来方便的实现这个需求。
Docker的网络有四种模式:

  • bridge
  • host
  • container
  • none
    这里推荐bridge模式,本文章也仅介绍下bridge模式,借用如下图片,说明了bridge模式的

image.png

通过bridge模式,在host主机上能通过容器的名称访问对应的服务,举例来说,我有一个microservicedb名称的数据库,在我的docker应用中,就可以使用如下链接来访问数据库,跟K8s中的服务访问类似。

spring.datasource.url=jdbc:mysql://microservicedb:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai

二、常用命令

# 创建名称为localnet,类型为bridge的网络
docker network create -d bridge localnet
# 查看当前所有的网络
docker network ls
# 删除某个网络
docker network remove [网络ID]
# 如果容器初始化没有指定网络,可以通过connect命令再进行指定网络
docker network connect localnet [容器名称]
# 查看网络详情,可以看到关联的容器
docker network inspect localnet
# 指定网络运行busybox,注意,这里如果没有显示指定网络方式,容器内部无法通过名称访问
docker run -it --name busybox1 --net localnet busybox:1.35 sh
docker run -it --name busybox2 --net localnet busybox:1.35 sh

三、应用场景

对我来说Docker网络更多是学习使用,在我的学习电脑上搭建一些第三方应用,或者基础应用,比如Mysql,RabbitMq,这些应用之间可能存在网络访问,用容器名称访问会比IP访问更友好一些。
在企业里面基本都有K8s了,已经包含了通过服务名称访问服务的网络功能了。
为什么突然会去学习这个工作中基本不会用到的知识,是因为我再学习过程中发现,一些基础应用打包成镜像,使用容器化部署更方便。就在我的一个应用通过服务名或者通过localhost访问mysql的时候,我发现无法访问才去学习了下这个冷门的知识点。