Docker之旅-Docker互联

Docker的互联方式

  • 基于Volume的互联
  • 基于Link的互联
  • 基于网络的互联

基于Volume的互联

在docker run 启动一个容器的时候,我们可以通过设置 -v 参数将宿主机目录映射到容器目录,这样容器对映射路径下数据的修改即使在容器被删除的情况下,数据还能够保留。
run_docker_with_v.png
进入learn目录,在此目录下创建 一个文件夹
run_docker_with_v2.png
查看容器详情,在Mounts 节点我们可以看到/learn 目录对应的宿主机目录,进入:/var/lib/docker/volumes/858c12a2fed04733b27256ae57a1f76455e9f0030182ad405bf5fd5aa049c54d/_data
docker inspect 4bc0f1e4a005
run_docker_with_v3.png
查看宿主机的目录,我们可以发现我们在容器中创建的 testvolume 文件夹目录
run_docker_with_v4.png
可以多个容器中的Volume指向宿主机的同一个目录,实现基于文件的的共享访问
run_docker_with_v5.png
run_docker_with_v6.png
基于容器数据的的单主机互联
run_docker_with_v7.png

基于Link的互联

启用一个mysql docker 容器

docker run --rm=true --name=marspiedb -e MYSQL_ROOT_PASSWORD=123456 mysql

run_docker_link1.png
查看我们创建的marspiedb 详细信息

# docker inspect marspiedb

run_docker_link2.png
Docker默认允许container互通,通过-icc=false关闭互通。一旦关闭了互通,只能通过-link name:alias命令连接指定container.
run_docker_link3.png
– link redis:db的别名,会在/etc/hosts中生成对应的ip映射
run_docker_link4.png
Link跨主机的互联,使用 Docker远程代理(Ambassador)模式,https://github.com/gliderlabs/connectable
socat是一个多功能的网络工具,名字来由是”Socket CAT”

基于网络的互联

  1. 最常用的方式端口映射,将docker端口映射到宿主机,直接通过宿主机IP:映射端口 访问
    docker run --rm=true --name=marspiedb -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
    
  2. 直接使用宿主机网络
    docker run --rm=true --net=host --name=marspiedb -e MYSQL_ROOT_PASSWORD=123456 mysql
    
  3. 容器共用一个IP地址
    docker run --rm=true --name=marspiedb -e MYSQL_ROOT_PASSWORD=123456 mysql
    docker run --rm=true --net=container:marspiedb java ip addr
    
    run_docker_net1.png
    同一个IP 使用localhost 就可以很愉快的访问(⊙o⊙)哦
    run_docker_net2.png
Alex.Yao wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
坚持原创技术分享,您的支持将鼓励我继续创作!