自己学Docker:12.Docker网络初涉

    xiaoxiao2023-03-24  5

    当你开始扩大 Docker 的应用范围时,忽然发现,你需要了解很多关于网络的知识。 Docker 允许通过外部访问容器或容器互联的方式来提供网络服务。

    准备

    为了可以更好的说明,显准备一个tomcat的docker镜像。 可以通过Dockerfile创建镜像。这里就直接通过Docker Hub查找一个既有的镜像了。 首先,查找一下Docker Hub上tomcat相关的镜像。

    sudo docker search tomcat

    这里就选取官方的镜像。

    sudo docker pull tomcat

    启动

    按照之前的方式启动

    后台启动tomcat。

    sudo docker run -itd tomcat sudo docker ps

    可以看出 创建了一个tomcat容器,通过port看出占用了8080端口。 可以使用logs查看是否正常启动。

    sudo docker logs 3b32fba84a67

    但是这个8080端口是容器的,外面是无法直接访问的。 可以使用curl命令测试一下:

    curl http://127.0.0.0:8080

    任意端口映射启动

    直接启动无法访问容,但docker可以通过 -P 或 -p 参数来将容器内端口映射到外部主机上。 当使用 -P(大写的) 标记时,Docker 会随机映射一个 49000~49900 的端口到内部容器开放的网络端口。

    我们在重新启动tomcat.

    sudo docker run -itd -P tomcat

    使用 docker ps 可以看到,本地主机的 32769端口被映射到了容器的 8080端口上。此时访问本机的 32769端口即可访问容器内 web 应用提供的界面。

    指定端口映射启动

    当使用 -p(小写的)则可以指定要映射的端口,并且在一个指定端口上只可以绑定一个容器。 支持的格式有 : hostPort:containerPort:映射本机所有ip的端口 ip:hostPort:containerPort :映射到指定ip地址的指定端口 ip::containerPort :映射到指定ip地址的任意端口 以三种方式启动三个容器,tomcat1,tomcat2,tomcat3。 映射本机所有ip的端口

    sudo docker run -itd --name tomcat1 -p 9527:8080 tomcat

    映射到指定ip地址的指定端口

    sudo docker run -itd --name tomcat2 -p 192.168.1.3:9528:8080 tomcat

    映射到指定ip地址的任意端口

    sudo docker run -itd --name tomcat3 -p 192.168.1.3::8080 tomcat

    我的本机有两个网卡ip分别为192.168.1.3和10.0.2.15,还包括一个回环地址127.0.0.1。 对于tomcat1,可以使用192.168.1.3:9527,10.0.2.15:9527或127.0.0.1:9527都可以访问。 对于tomcat2,只能使用可以使用192.168.1.3:9528访问。 对于tomcat3,只能使用可以使用192.168.1.3:3276访问。

    指定多个端口

    -p 标记可以多次使用来绑定多个端口

    sudo docker run -itd --name tomcat4 -p 192.168.1.3:9530:8080 -p 192.168.1.3:9531:8080 tomcat

    查看映射端口配置–docker port

    另外,可以使用docker port命令查看docker容器端口的映射情况。 存在则会输出映射详情,不错在则报错。

    sudo docker port 7269e8d094b3 8080

    容器互联

    在平时开发中,部署应用程序和数据库通常不会在同一物理主机上,这也是为了安全。那么想象一种场景,应用全部通过docker创建,则应用程序和DB应该也是分属于不同的容器。那么应用程序要访问db该如何处理? 当然,可以将db的容器端口也是用-P或-p映射出来,但是docker还提供了 –link 参数,可以让容器之间安全的进行交互。

    --link 参数的格式为 --link name:alias,其中 name 是要链接的容器的名称,alias 是这个连接的别名。

    同样的先创建一个mysql的数据库镜像。

    sudo docker search mysql ... sudo docker pull mysql

    创建一个mysql容器。

    sudo docker run --name db_mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql

    这里的-e MYSQL_ROOT_PASSWORD=123456是初始化root用户的密码。 然后创建一个新的 tomcat 容器,并将它连接到 db 容器

    sudo docker run -itd -P --name tomcat5 --link db_mysql:db tomcat /bin/bash

    进入到容器tomcat5。

    sudo docker attach tomcat5

    查看/etc/hosts 文件的信息,可以看到添加了db_mysql的信息,通过ping命令也是可以ping通的。 因为我们在创建tomcat5容器时,有指定db_mysql容器的别名,所以我们可以直接db_mysql或db都是可以ping的通的。

    ping db_mysql ping db

    转载请注明原文地址: https://ju.6miu.com/read-1201076.html
    最新回复(0)