docker--docker网络(四)

1. docker网络模式

docker安装成功后,会自动创建三个网络,可以通过如下的方式查看:

lisen@ubuntu:~$ sudo docker network ls
[sudo] password for lisen:
NETWORK ID          NAME                DRIVER              SCOPE
8994fe397802        bridge              bridge              local
436da757b62d        host                host                local
1b2be829b666        none                null                local
lisen@ubuntu:~$

在运行容器时可以通过--net参数指定网络模式,例如:

  • host模式: --net=host 容器不会虚拟自己的网卡,使用宿主机的ip和端口
  • none模式: --net=none 该模式等同于关闭容器的网络功能,一般在不需要网络的批处理任务中才使用
  • bridge模式: --net=bridge 默认值,如果指定--net参数,则docker就会采用这种模式,这种模式也是最强大灵活,使用的最广的网络模式。

Docker每次创建容器都会同时创建一组互联的网络接口,你可以理解为一根管道的两端, 这组接口一端作为容器的eth0接口,另一端命名类似于veth966865c@if100这样的名字,作为宿主机的一个端口。可以将veth接口的理解为虚拟网线的一端,这个虚拟网线一端插在名为docker0的网桥上,另一端插到容器中。通过这种方式Docker创建了一个虚拟子网,这个虚拟子网被宿主机和所有的Docker容器共享。

注: 可以安装bridge-utils工具查看网桥信息

如: yum install bridge-utils

查看网桥信息:

brctl show

2. 连接容器的三种方法

docker的最佳实践建议为每个服务创建单独的docker容器,比例:db,redis,应用服务等等,那么不同的服务需要连接以便于作为整体为客服提供服务,例如应用服务需要连接db,redis等。常见的容器连接方法有三种:

  • Docker的内部网络
  • Docker1.9之后,可以使用Docker Networking
  • Docker 链接(Docker link)

1)这三种方式如何选择呢?

Docker的内部网络,这种方式不灵活,在重启容器需要重新配置,所以不推荐使用这种方式;如果使用Docker1.9之前的版本,则应该选择Docker link的方式; 如果使用docker1.9及更高的版本,则推荐使用Docker Networking,这种方式最灵活,功能也是最强大的。

2)Docker link和Docker Networking之间有什么区别呢?

  • Docker Networking可以连接不同的宿主机上的容器的
  • Docker Networking可以在不更新连接的情况下,停止,启动,或重启容器
  • Docker Networking不必事先创建网络,也不关心容器的启动顺序

3)也就是说只要用的docker是1.9版本之后,就应该使用Docker Networking咯?

恭喜你,答对了。

因为我们肯定会使用docker1.9之后的版本(现在docker已到19.04版本甚至更高版本了),所以我们只讲Docker Networking方式

3. Docker Networking

容器之间连接用网络创建,这个网络被称为Docker Networking,是Docker1.9版本之后的新特性。用户可以通过Docker Networking创建自己的网络,容器可以通过这个网络进行通信。

3.1 创建网络

创建一个新的网络可以使用如下的命令:

sudo docker network create app

可以使用如下的方式来查看网络的详细信息

sudo docker network inspect app

3.2 查看宿主机中创建的网络

sudo docker network ls

3.3 删除网络

sudo docker  network rm app

说明删除成功

3.3 如何使用网络

1)启动镜像时指定--net参数

sudo docker run -it --name test --net=app  imagename

2)也可以将运行中的容器加入网络

sudo docker network connect app test
  • app 需要加入的网络名
  • test 需要加入到网络的容器名

4. 网络配置示例

我们将通过在docker中部署高可能注册中心(两个配置中心相互注册到对方以实现高可用,避免单点故障),来演示网络配置。

4.1 准备注册中心jar包

1)修改配置文件

我们预先将两个注册中心一个命名我eureka01, 一个命名为eureka02,eureka01需要向eureka02注册,反之亦然。

2)使用maven执行打包

4.2 创建一个目录作为构建目录

创建一个目录作为构建目录,在该目录中创建一个Dockerfile,并准备好需要的软件包。(rgcenter.jar即为注册中心的jar包,为方便该了个短一些的名称)

Dockerfile内容:

FROM ubuntu:latest
MAINTAINER lisen "lisen@163.com"

WORKDIR /usr/local/apps

ADD jdk-8u151-linux-x64.tar.gz /usr/local/java
COPY rgcenter.jar /usr/local/apps

ENV JAVA_HOME=/usr/local/java/jdk1.8.0_151
ENV PATH=$JAVA_HOME/bin:$PATH

ENTRYPOINT ["java","-jar", "rgcenter.jar"]

4.3 将构建目录上传到linux

4.4 执行构建镜像

进入构建目录,执行构建命令

docker build -t lisen/rgcenter:v1.0 .

4.5 创建网络

docker network create appnet

4.6 启动容器

1) 启动第一个注册中心(eureka01),注意和第一步取得名字要一致

docker run -it --net=appnet  -p 8761:8761 --name eureka01 lisen/rgcenter:v1.0 --spring.profiles.active=peer1

2)启动第二个注册中心

docker run -it --net=appnet  -p 8762:8762 --name eureka02 lisen/rgcenter:v1.0 --spring.profiles.active=peer2

4.7 检查防火墙

注意检查防护墙,如果防护墙开启,则需要将8761和8762端口加入防火墙中

ufw status

ufw allow 8761
ufw allow 8762

over! 测试检查是否可以正常访问注册中心:

http://192.168.62.133:8761/

http://192.168.62.133:8762/

5. nacos使用mysql持久化数据

1)在nacos安装目录下\nacos\conf中有nacos-mysql.sql脚本,通过该脚本创建数据库

2)修改nacos安装目录下\nacos\conf中的application.properties文件,配置MySQL链接。

spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=root
db.password=123456
相关推荐
川石课堂软件测试43 分钟前
性能测试|docker容器下搭建JMeter+Grafana+Influxdb监控可视化平台
运维·javascript·深度学习·jmeter·docker·容器·grafana
龙哥说跨境1 小时前
如何利用指纹浏览器爬虫绕过Cloudflare的防护?
服务器·网络·python·网络爬虫
懒大王就是我1 小时前
C语言网络编程 -- TCP/iP协议
c语言·网络·tcp/ip
Elaine2023911 小时前
06 网络编程基础
java·网络
海绵波波1072 小时前
Webserver(4.3)TCP通信实现
服务器·网络·tcp/ip
热爱跑步的恒川5 小时前
【论文复现】基于图卷积网络的轻量化推荐模型
网络·人工智能·开源·aigc·ai编程
云飞云共享云桌面6 小时前
8位机械工程师如何共享一台图形工作站算力?
linux·服务器·网络
昌sit!7 小时前
K8S node节点没有相应的pod镜像运行故障处理办法
云原生·容器·kubernetes
追风林8 小时前
mac 本地docker-mysql主从复制部署
mysql·macos·docker
音徽编程8 小时前
Rust异步运行时框架tokio保姆级教程
开发语言·网络·rust