Docker的互联方式
- 基于Volume的互联
- 基于Link的互联
- 基于网络的互联
基于Volume的互联
在docker run 启动一个容器的时候,我们可以通过设置 -v 参数将宿主机目录映射到容器目录,这样容器对映射路径下数据的修改即使在容器被删除的情况下,数据还能够保留。
进入learn目录,在此目录下创建 一个文件夹
查看容器详情,在Mounts 节点我们可以看到/learn 目录对应的宿主机目录,进入:/var/lib/docker/volumes/858c12a2fed04733b27256ae57a1f76455e9f0030182ad405bf5fd5aa049c54d/_data
docker inspect 4bc0f1e4a005
查看宿主机的目录,我们可以发现我们在容器中创建的 testvolume 文件夹目录
可以多个容器中的Volume指向宿主机的同一个目录,实现基于文件的的共享访问
基于容器数据的的单主机互联
基于Link的互联
启用一个mysql docker 容器
docker run --rm=true --name=marspiedb -e MYSQL_ROOT_PASSWORD=123456 mysql
查看我们创建的marspiedb 详细信息
# docker inspect marspiedb
Docker默认允许container互通,通过-icc=false关闭互通。一旦关闭了互通,只能通过-link name:alias命令连接指定container.
– link redis:db的别名,会在/etc/hosts中生成对应的ip映射
Link跨主机的互联,使用 Docker远程代理(Ambassador)模式,https://github.com/gliderlabs/connectable
socat是一个多功能的网络工具,名字来由是”Socket CAT”
基于网络的互联
- 最常用的方式端口映射,将docker端口映射到宿主机,直接通过宿主机IP:映射端口 访问
docker run --rm=true --name=marspiedb -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
- 直接使用宿主机网络
docker run --rm=true --net=host --name=marspiedb -e MYSQL_ROOT_PASSWORD=123456 mysql
- 容器共用一个IP地址
docker run --rm=true --name=marspiedb -e MYSQL_ROOT_PASSWORD=123456 mysql docker run --rm=true --net=container:marspiedb java ip addr
同一个IP 使用localhost 就可以很愉快的访问(⊙o⊙)哦