理解Docker容器连接实现容器间通信

  • Docker网络

    Docker容器默认不开放任何端口,即外部不能访问容器内部服务,但容器内部是可以正常访问外部网络服务的。

    如果想要实现外部访问容器内部网络服务,可以通过端口映射,将容器所在服务器的公网ip:port

    映射到容器内部端口上。

    关于端口映射的详情,参见《以阿里云服务器为例理解docker端口映射

    容器间的相互访问,有三种实现方式:

    • 端口映射

      外界访问独立容器

    • 容器连接Link

      同一宿主机上,不同容器之间的访问

    • Docker Networking(Docker 1.9之后)

      不同宿主机上不同容器之间的访问

  • 容器链接

    容器连接(link)系统是除了端口映射外,另一种跟容器中应用交互的方式。

    其会在源容器(db)与接收容器(web)之间穿件一个隧道,接收容器可以看到源容器指定的信息。

    其实一个可以将具体的容器连接到一起来进行通信的抽象层。

  • 容器的命名

    Docker的连接系统会根据容器的名称来进行连接。

    --name用来自定义名称

    sudo docker run -d --name db training/webapp
    

    可以通过docker psdocker inspect命令查看容器名字。

  • 容器的互联

    使用--link参数建立互联。

    sudo docker run -d -P --name web --link db:db training/webapp2 python app.py
    

    如此便是创建了一个名为web接收容器,并连接到db源容器上。

    --link name:alias
    # name 要连接的容器名字
    # alias 连接后的别名
    

    通过--link参数,Docker在两个容器之间创建了一个安全的隧道,且不用映射他们的端口到宿主主机上。

    在前面启动db容器时,并没有使用-p-P参数,从而避免了暴露数据库端口到外部网络上,增加了容器的安全性。

    此处:

    • 源容器db无法从外界访问
    • 接收容器web可以从外界访问
    • web可以访问db
  • Reference

  1. Docker 网络-端口映射、容器链接、Networking

  2. Docker基础-端口映射与容器互联

  3. Docker 从入门到实践

  4. Docker容器(container)详解

发布了857 篇原创文章 · 获赞 1291 · 访问量 92万+

猜你喜欢

转载自blog.csdn.net/The_Time_Runner/article/details/105033146