什么,容器太多操作不过来?我选择Docker Compose梭哈

接上一篇:面试官:你说你精通 Docker,那你来详细说说 Dockerfile 吧

一、容器之间通信

1、单向通信

1.1、什么意思

mysql和tomcat是两个独立的容器,但是tomcat需要和mysql通信,而mysql完全不用和tomcat通信,这就叫容器之间的单向通信。

1.2、怎么通信

要谈通信,就需要谈一下ip,因为不知道ip是无法通信的。最简单的例子你jdbc要连接mysql数据库,你也需要配置mysql的ip地址。容器之间也不例外,都是靠虚拟ip来完成的。

何为虚拟ip?

虚拟ip:容器创建完成后都会生成一个唯一的ip,这个ip外界不能直接访问,他只用于容器之间进行通信交互用。这就是虚拟ip。

容器之间的虚拟ip是互通的。

通信是什么意思、靠什么通信我们都知道了,那还不抓紧实战一把?

1.3、实战演示

1.3.1、创建tomcat容器
docker run -d --name mytomcat tomcat
# --name指定的名称再docker ps里是可以看到的,最后一列Name
docker ps

知识点出现了!!!--name是神马鬼?先看如下一个场景

在公司或者你直接买的阿里云数据库/redis等服务为什么给你个数据库域名而不是推荐用ip?因为ip的话可变,比如你业务系统写死了ip,这时候人家那边内网ip变了,你这所有用这个数据库的业务系统都要跟着改。用域名的话一劳永逸,底层ip变了后再映射到新域名上就行,不影响业务系统。

--name就是给docker配置名称来与虚拟ip做映射,因为ip老变化,每次变化的时候其他容器都需要跟着改动才行。配个名称一劳永逸。创建容器的时候通过 --name xxx 即可指定。

1.3.2、创建mysql容器

我也没拉取mysql镜像,就用centos模拟一下数据库吧,主要是看能不能ping 通,能ping 通就代表能通信。

docker run -d --name database -it centos /bin/bash
1.3.3、小试一把

我们需要进入mytomcat的容器然后去ping database的ip看看是否通,那么容器的虚拟ip怎么查呢?

# 这又是一个知识点
docker inspect 容器id
# 比如:(9bf58b4014dd是我们database的容器id)
docker inspect 9bf58b4014dd

现在知道数据库的ip了,那赶紧进入我们的mytomcat的容器去ping一波

docker exec -it mytomcat /bin/bash
ping 172.17.0.6

完美!

等等,貌似不是很完美,我们给数据库指定了名称database,那我们赶紧ping database 试一下。结果啪啪啪打脸,完全不通,那是因为相当于你就起了个名字,并没有做映射。那怎么映射呢?mytomcat启动容器的时候指定一个--link参数即可。

# 强制删除老的
docker rm -f mytomcat
# 创建新的容器,用--link指定我们想连的配置的数据库“域名”
docker run -d --name mytomcat --link database tomcat
# 进入mytomcat容器
docker exec -it mytomcat /bin/bash
# ping
ping database

这次是真的完美~!

1.4、总结

  • 容器简单虚拟ip是互通的

  • 用--name 和 --link可以完成自定义“域名”来取代可变化的ip

2、双向通信

方式有很多,一般都采取桥接方式。由于篇幅过长,自行Google即可。重点搞懂了容器间的通信是什么意思,大概怎么做即可。比如上面的--link也是其一做法。

二、容器间数据共享

1、场景

需要宿主机和容器之间共享数据的业务场景。比如Mysql的

比如:集群部署的时候,我们的应用程序需要部署到10个docker容器里,那么比如要想改动一个文件的内容,就要重新打包然后部署10次。我们可以将我们需要部署的应用程序挂载到宿主机上,这样改一处就行了。比如静态html文件,再一个宿主机上启动了10个容器,这时候需求需要改文案(修改html),我们需要修改10个容器里的html,过于麻烦,所以可以把这个html挂载到宿主机,容器直接使用挂载到宿主机的文件即可。

再比如:Mysql的数据目录可配置文件(一些高级配置或者优化配置啥的肯定要用一份),这也可以用此场景。

2、语法

# 语法
docker run -v 宿主机路径:容器内挂载路径 镜像名
# 比如如下:他会把/home/main/programe下面的所有目录都挂载到容器的/usr/local/tomcat/webapps下
docker run -v /home/main/programe:/usr/local/tomcat/webapps tomcat

3、实战

3.1、准备

在如下目录里创建如下文件,并写上Hello Volumn~

/home/main/docker/webapps/volumn-test/index.html

3.2、操作

很简单,按照上面的语法来就成了,如下就是将/home/main/docker/webapps下的目录挂载到容器内部/usr/local/tomcat/webapps的目录下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值