Docker网络基础配置

简介

  大量的互联网应用服务包括多个服务组件,这往往需要多个容器之间通过网络通信进行相互配合。
  Docker 目前提供了映射容器端口到宿主主机和容器互联机制来为容器提供网络服务。
  本文将讲解如何使用Docker的网络功能。包括使用端口映射机制来将容器内应用服务提供给外部网络,以及通过容器互联系统让多个容器之间进行快捷的网络通信。

端口映射实现容器访问

从外部访问容器应用

  在启动容器的时候,如果不指定对应参数,在容器外部是无法通过网络来访问容器内的网络应用和服务的。
  当容器中运行一些网络应用,要让外部访问这些应用时,可以通过-P或-p参数来指定端口映射。当使用-P标记时,Docker会随机映射一个49000~49900的端口至容器内部开放的网络端口:

[[email protected] ~]# sudo docker run -d -P tomcat:latest
afe8064a2e604ebd212ec2a620fde7d0c2f72b51d298066f3e4c454df1b74e6e
[[email protected] ~]# sudo docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES
afe8064a2e60        tomcat:latest       "catalina.sh run"   13 seconds ago      Up 12 seconds       0.0.0.0:32769->8080/tcp   festive_panini

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

  同样,可以通过docker logs命令来查看应用的信息:

[[email protected] ~]# sudo docker logs afe8
28-Aug-2019 14:18:27.546 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version:        Apache Tomcat/8.5.45
28-Aug-2019 14:18:27.548 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built:          Aug 14 2019 22:21:25 UTC
28-Aug-2019 14:18:27.548 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server number:         8.5.45.0
28-Aug-2019 14:18:27.549 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name:               Linux
28-Aug-2019 14:18:27.549 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version:            3.10.0-957.el7.x86_64
...

  -p(小写的)则可以指定要映射的端口,并且,在一个指定端口上只可以绑定一个容器。支持的格式有ip:hostport:containerPort l ip::containerPort I hostPort:containerPort。

映射所有接口地址

  使用hostPort:containerPort格式将本地的8080端口映射到容器的8080端口,可以执行如下命令:

[[email protected] ~]# sudo docker run -d -p 8080:8080 tomcat:latest
b7b692ed0bc99bf73f68b92ddca20a1ae5ab510c42ae234f76a4b36093e1fd31
[[email protected] ~]# sudo docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES
b7b692ed0bc9        tomcat:latest       "catalina.sh run"   9 seconds ago       Up 8 seconds        0.0.0.0:8080->8080/tcp    tender_wescoff

  此时默认会绑定本地所有接口上的所有地址。多次使用-p标记可以绑定多个端口。
  例如:

[[email protected] ~]# sudo docker run -d -p 8088:8088 -p 8099:8099 tomcat:latest
c1629208e59a8953369b2229de6c352ae83faa00154c7acdb5178931e84bedce
[roo[email protected] ~]# sudo docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                                      NAMES
c1629208e59a        tomcat:latest       "catalina.sh run"   6 seconds ago       Up 5 seconds        0.0.0.0:8088->8088/tcp, 8080/tcp, 0.0.0.0:8099->8099/tcp   nervous_robinson

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

  可以使用ip:hostPort:containerPort格式指定映射使用一个特定地址,比如我的IP为192.168.1.16:

[[email protected] ~]# sudo docker run -d -p 192.168.1.16:8081:8080 tomcat:latest
7f5eab8748fe3fcb0ffd3b2828928be05f8193d88ff80d2f88aee9ae262f6114
[[email protected] ~]# sudo docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                                      NAMES
7f5eab8748fe        tomcat:latest       "catalina.sh run"   10 seconds ago      Up 9 seconds        192.168.1.16:8081->8080/tcp                                stoic_robinson

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

  使用ip::containerPort绑定192.168.1.16的任意端口到容器的8080端口,本地主机会自动分配一个端口:

[[email protected] ~]# sudo docker run -d -p 192.168.1.16::8080 tomcat:latest
8108af81e853076df2a55d125b559476422df4d16c4560afd6439f51cb67bcfc
[[email protected] ~]# sudo docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                                      NAMES
8108af81e853        tomcat:latest       "catalina.sh run"   7 seconds ago       Up 6 seconds        192.168.1.16:32768->8080/tcp                               inspiring_zhukovsky

查看映射端口配置

  使用docker port来查看当前映射的端口配置,也可以查看到绑定的地址:

[[email protected] ~]# sudo docker port 8108
8080/tcp -> 192.168.1.16:32768

容器互联实现容器间通信

  容器的连接(linking)系统是除了端口映射外另一种可以与容器中应用进行交互的方式。
  它会在源和接收容器之间创建一个隧道,接收容器可以看到源容器指定的信息。

自定义容器命名

  连接系统依据容器的名称来执行。因此,首先需要自定义一个好记的容器命名。
  虽然当创建容器的时候,系统默认会分配一个名字,但自定义命名容器有两个好处:

  1. 自定义的命名,比较好记,比如一个Web应用容器,我们可以给它起名叫web。
  2. 当要连接其他容器时候,可以作为一个有用的参考点,比如连接Web容器到db容器。

  使用--name标记可以为容器自定义命名:

[[email protected] ~]# sudo docker run -d -P --name web tomcat:latest
47a03555a3aa0c4581df781f906baaa0e3c0b8fcc1ebc5764ad94eb0c14716a8

  使用docker ps来验证设定的命名

[[email protected] ~]# sudo docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                                      NAMES
47a03555a3aa        tomcat:latest       "catalina.sh run"   46 seconds ago      Up 45 seconds       0.0.0.0:32770->8080/tcp                                    web

容器互联

  使用--link参数可以让容器之间安全的进行交互。
  下面先创建一个新的数据库容器:

[[email protected] ~]# sudo docker run -d --name db postgres

  删除之前创建的web容器

[[email protected] ~]# sudo docker rm -f web

  然后创建一个新的web容器,并将它连接到db容器:

[[email protected] ~]# sudo docker run -d -P --name web --link db:db tomcat:latest 

  此时,db容器和web容器建立互联关系。
  --link参数的格式为--link name:alias,其中name是要链接的容器的名称,alias是这个连接的别名。
  使用docker ps查看容器的连接:

[[email protected] ~]# sudo docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                      NAMES
ea74df6bc843        tomcat:latest       "catalina.sh run"        2 minutes ago       Up 2 minutes        0.0.0.0:32774->8080/tcp                                    web
44c6d026afe2        postgres            "docker-entrypoint.s…"   3 minutes ago       Up 3 minutes        5432/tcp                                                   db

  进入web容器中ping db容器:

[[email protected] ~]# sudo docker exec -ti web /bin/bash
[email protected]:/usr/local/tomcat# ping db
PING db (172.17.0.7) 56(84) bytes of data.
64 bytes from db (172.17.0.7): icmp_seq=1 ttl=64 time=0.299 ms
64 bytes from db (172.17.0.7): icmp_seq=2 ttl=64 time=0.105 ms
64 bytes from db (172.17.0.7): icmp_seq=3 ttl=64 time=0.067 ms

  可以看到web容器可以访问到db容器。
  Docker在两个互联的容器之间创建了一个安全隧道,而且不用映射它们的端口到宿主主机上。在启动db容器的时候并没有使用-p和-P标记,从而避免了暴露数据库端口到外部网络上。
  Docker通过环境变量查看公开连接信息,使用env命令来查看web容器的环境变量:

[[email protected] ~]# sudo docker run --name web2 --link db:db tomcat:latest env
...
DB_PORT=tcp://172.17.0.7:5432
DB_PORT_5432_TCP=tcp://172.17.0.7:5432
DB_PORT_5432_TCP_ADDR=172.17.0.7
DB_PORT_5432_TCP_PORT=5432
DB_PORT_5432_TCP_PROTO=tcp
DB_NAME=/web2/db
DB_ENV_GOSU_VERSION=1.11
DB_ENV_LANG=en_US.utf8
DB_ENV_PG_MAJOR=11
DB_ENV_PG_VERSION=11.5-1.pgdg90+1
DB_ENV_PGDATA=/var/lib/postgresql/data
...

  其中DB开头的环境变量是供web容器连接db容器使用,前缀采用大写的连接别名。
  用户可以链接多个子容器到父容器,比如可以链接多个web到db容器上。

这篇文章是我学习 Docker 的记录,内容参考自《Docker技术入门与实战》

原文地址:https://www.cnblogs.com/gavin-guo/p/11427286.html

时间: 2024-10-08 01:41:28

Docker网络基础配置的相关文章

8.Linux网络基础配置

8.Linux网络基础配置 ·在Linux中,以太网接口被命名为eth0,eth1等,0,1代表网卡编号, ·查看: ·通过lspci查看网卡硬件信息,如果是usb网卡,可以运行lsusb, ·ifconfig -a查看所有接口,ifconfig eth0查看特定接口, ·ifup eth0启动接口,ifdown eth0禁用接口, ·配置:运行setup配置网卡, ·网卡配置文件/etc/sysconfig/network-scripts/ifcfg-eth0, ·DNS配置文件/etc/re

docker数据卷管理及网络基础配置

数据卷 数据卷容器 数据卷迁移数据 端口映射 容器间通信 数据卷的管理 当需要查看容器内应用产生的数据或者把容器内数据备份及多个容器数据共享.有两种方式,数据卷以及数据卷容器. 数据卷 数据卷是一个可供容器使用的特殊目录,它绕过文件系统,特性如下: 数据卷可以在容器之间共享和重用 对数据卷的修改会立马生效 对数据卷的更新不会影响镜像 卷会一直存在,直到没有容器使用 其使用类似与mount操作. 在容器内创建一个数据卷 #docker run -d -P --name web -v /webapp

网络基础配置

1.网络基础知识一台主机如果可以连接公网,比如访问www.baidu.com 那么这台主机必然会有 ipaddress GATEWAY     dns       主机域名转换成ip的服务器 ############ipaddress############## tcp/ip ipv4 2进制32位 254.254.254.254/255.255.255.0 11111110.11111110.11111110.11111110/11111111.11111111.11111111.000000

Linux网络基础配置

1.TCP/IP网络配置文件 /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network /etc/host.conf /etc/hosts /etc/resolv.conf /etc/services (1)/etc/sysconfig/network-scripts/ifcfg-eth0 网络接口的启动脚本 内容实例: DEVICE=eth0 ONBOOT=yes BOOTPROTO=static IPADDR=192.1

linux网络基础配置与网络进阶管理

一. 网络基本配置: 真不敢想象没有网络的一天 应该怎样度过,但是有了网络就行了?原来刚有了网络时由于没有统一的标准,各大硬件厂商各自为政,都在搞网络,但是都只是同一厂商的设备可以进行通讯,就 和不同的国家的人交流使用了不同的语言一样,难以将所有的网络连接起来,之后Internet有了统一的标准,大家都遵循它的标准,后来计算机才能进行网 络通讯,同样将linux主机接入网络也必须进行配置它的网络,及其相关的主机名等,下面将逐一进行配置: 1.  主机名: rhel6中主机名修改 [[email 

Docker 快速上手系列(5): 网络基础配置和容期间通信

引子 一个web服务跑起来必不可少的两大功能模块:业务处理,数据服务,大型的web服务需要的组件更多,这往往需要多个容器,但是我们还需要这些容器之间可以进行网络通信,相互配合. Dokcer目前只支持宿主机与容器通信,容器与容器之间通信. 宿主机与容器的端口映射 在启动容器的时候,如果不指定对应参数,在容器外部是无法通过网络来访问容器内的网络应用和服务的. 当容器中运行一些网络应用,要让外部访问这些应用时,可以通过-p或-p参数来制定端口映射.当使用-p标记时,Docker会随机映射一个4900

Docker网络基础

大量的互联网应用服务包括多个服务组件,这往往需要多个容器之间通过网络通信进行相互配合. Docker目前提供了映射容器端口到宿主主机和容器互联机制来为容器提供网络服务. 端口映射实现访问容器: 在启动容器的时候,如果不指定对应参数,在容器外部是无法通过网络来访问容器内的网络应用和服务的. 从外部访问容器应用: 当容器中运行一些网络应用,要让外部访问这些应用时,可以通过-P或-p参数来指定端口映射.当使用-P标记时,Docker会随机映射49000~49900中的端口至容器内部开放的网络端口. 小

docker 网络基础

-p可以多次使用 安装 ifconfig yum -y install net-tools Docker 目前提供了映射容器端口到宿主机和容器互联机制来为容器提供网络服务. 端口映射实现访问容器 : 1.从外部访问容器应用 当容器启动时如果不指定对应参数,外部网络是无法通过网络访问容器的. 参数: -P : docker会随机映射一个宿主机的49000~49990的端口到容器expose指定的端口 docker run -t -P --expose 22 --name test centos -

Linux:网络基础配置

一.修改主机名 hostname 查看主机名 1.hostname   zy 修改主机名为zy,临时生效,重新登录系统生效. 2.想要永久修改,,需修改配置文件:  vi   /etc/sysconfig/network.然后重启系统才可以reboot 一般我们也不可能重启,所以有第三种方法 3.分三步 1)hostname zylinux 2)修改配置文件:  vi   /etc/sysconfig/network 3)修改vi /etc/hosts 中127.0.0.1对应的主机名 然后推出