0
点赞
收藏
分享

微信扫一扫

Docker 之容器互联实践及问题总结

49路末班车 2022-04-16 阅读 48
docker

简介

概述

Docker 中存在多个容器时,容器与容器之间经常需要进行通讯,例如nacos访问mysql,redis集群中各个节点之间的通讯。

解决方案

Docker 中容器与容器之间进行通讯的解决方案一般有两种:
第一种:两个容器通过宿主机进行通讯(容器中的端口会映射到宿主机上)
第二种:两个容器之间直接通过虚拟网络进行连接,但是需要我们在docker中创建网络。

初始化网路

架构设计

 

新建网络

例如:创建名字为t-net的网络

docker network create -d bridge t-net  #t-net为自己起的网络名称

其中,-d driver,网络类型,默认 bridge。
说明,创建好这个网络以后,在网落上添加容器,容器就可以通讯了

查看网络信息

列出所属有网络

docker network ls

查看网络信息

docker inspect 67d #67d 为创建的网络id

实现容器互联

创建容器

打开终端,基于centos:7这个镜像启动容器,并加入到t-net这个网络

docker run -it --name app1 --network t-net centos:7

新开终端执行,基于centos:7这个镜像再启动容器,同时也加入到t-net网络

docker run -it --name app2 --network t-net centos:7

测试网络互通

在两个终端中分别执行:

ping app1
ping app2

显示如下:

[root@35569c623c4c /]# ping app1
PING app1 (172.18.0.2) 56(84) bytes of data.
64 bytes from 35569c623c4c (172.18.0.2): icmp_seq=1 ttl=64 time=0.577 ms
64 bytes from 35569c623c4c (172.18.0.2): icmp_seq=2 ttl=64 time=0.061 ms
64 bytes from 35569c623c4c (172.18.0.2): icmp_seq=3 ttl=64 time=0.066 ms
......

总结(summary)

重难点分析

  • 容器互联方案
  • 创建网络方式
  • 应用网络

FAQ分析

  • 什么是容器互联?
  • 为什么需要创建网络?
  • 如何创建网络?
  • 如何应用网络?
  • 如何测试网络是否是通的?

Docker技术的基础应用

核心知识点

Docker 诞生的背景(服务多了,维护困难了)
Docker 平台基本架构(Client/Server,参考官方的架构图)
Docker 平台核心对象(镜像-image,容器-Container)
Docker 平台的安装(在CentOS系统上离线安装、在线安装)
Docker 服务的基本操作(status,start,stop ,restart,enable,disable,docker info,docker -v)
Docker 镜像(Image)基本操作(pull,images,rm,save,load,inspect,history,…)
Docker 容器基本操作(run,ps,ps -a,stop,start,restart,exec,logs,exit,rm,rm -f,prune)
Docker 中的数据管理(数据卷-volume,直接的目录挂载)
Docker 平台下镜像(Image)的制作(文件系统~软件+Dockerfile,build)
常见问题分析
Docker是什么?(虚拟引擎,容器化技术平台,基于docker创建镜像,启动容器,运行镜像程序)
Docker用于解决什么问题?(简化部署-例如sentinel镜像,运维,提高其服务的可维护性)
Docker的基本架构是怎样的?(Client/Server,pull,run,build都属于客户端指令,通过这些指令向docker服务发起请求)
Docker中有哪些核心对象?(Image/Container/…)
如何理解docker中的镜像(Image)?(一套文件系统,是静态,需要放到容器中去运行。类似一个jar包,需要JVM解释执行)
如何理解Docker中的容器(Container)?(一个进程,拥有独立的namespace,通过namaspace实现容器隔离)
是否可以基于同一个镜像启动多个容器?(可以,但是指定的容器名不能相同)
什么数据卷,为什么要使用数据卷,如何使用数据卷?
为什么我们要自己制作镜像?制作镜像的步骤是怎样的?
Dockerfile的作用是什么?(描述镜像文件的内容,制作镜像时是参考Dockerfile中内容制作)
常见Bug分析

  • 虚拟机系统没有ip地址?(确保vmvare服务已启动,在虚拟机网络编辑器中尝试还原vnet8)
  • 容器使用着镜像时,不能删除镜像,例如

 不要在容器(Container)内部使用docker指令,例如:

 Docker容器进入失败,例如:

 

  • Dockerfile的大小写以及文件内容的不完整(注意拷贝时,单词要拷贝完整)
  • 容器已经存在,但还要再创建,要注意名字重复.(可能你创建过这个容器,但是启动失败了)

Docker平台技术应用进阶

核心知识点

  • Docker平台下启动Mysql镜像,Redis镜像,Nginx镜像,Nacos镜像。
  • Docker平台下容器之间的互联(虚拟网络network)。

常见问题分析
如何从远程镜像仓库下载镜像?(docker pull)
如何从本地磁盘去加载镜像文件?(docker load)
如何基于docker运行常用的镜像文件?(MySql,Redis,Nginx,Naocs等)
如何查看容器启动或运行日志?(docker logs 容器id)
退出容器后想再进入容器怎么办?(首先docker ps查看容器是否在运行,假如没有运行要start启动)
进入正在运行的容器的指令?(docker exec -it 容器名或容器id bash)
每次执行Docker run指令都会创建新的容器吗?(假如没有名字相同的则创建)
如何实现Docker中容器的互联?(可以基于宿主机,也可以建立虚拟网络)
Nacos创建时配置的是连接mysql数据库,那nacos启动时,需要启动mysql吗?(需要)
常见Bug分析
容器已经存在,但还要再创建,要注意名字重复.(可能你创建过这个容器,但是启动失败了)
假如有容器使用着这个镜像,镜像删除会失败。
基于镜像执行了docker run操作,但是通过docker ps看不到运行容器?(一定要容器日志)
假如容器日志中出现No Datasource Set,可能的原因是什么?

 连接被拒绝,例如

 页面根本打不开,例如:

 

举报

相关推荐

0 条评论