Docker从入门到精通(四)

2023-02-23 17:20:53 浏览数 (1)

Docker从入门到精通(三)

我们经常碰到服务之间要进行公共协作,所以容器之间要能互相访问,其实除了网络访问外,docker提供两种方便的方式

  • 一种是通过映射容器的端口到本地宿主主机
  • 一种是互联机制实现多个容器间通过荣启明快速访问

端口映射

当我们使用-P(大写P)参数指定端口映射,docker会随机给我分批49000-49900的端口到容器开放的网络端口

代码语言:javascript复制
$ docker run -d -P training/webapp python app.py
$ docker ps -l
CONTAINER ID   IMAGE             COMMAND           CREATED              STATUS              PORTS                     NAMES
42a067eda127   training/webapp   "python app.py"   About a minute ago   Up About a minute   0.0.0.0:55000->5000/tcp   adoring_sutherland

上面我们知道本地的端口55000到容器的5000端口,此时我们可以使用localhost:55000访问web容器

我可以使用-p(小写p)多种方式进行映射

代码语言:javascript复制
IP:HostPort:ContainerPort
IP::ContainerPort
HostPort:ContainerPor
代码语言:javascript复制
//多次使用-p标记绑定多个端口
$ docker run -d -p 5100:5000 -p 3000:80 training/webapp python app.py 
$ docker run -d -p 127.0.0.1:5200:5000 training/webapp python app.py
$ docker run -d -p 5000:5000 training/webapp python app.py

互联机制实现便捷互访

使用--link name:alias参数 ,(name 是连接容器的名字,alias就是连接的别名)可以让容器之间安全的进行交互

第一步.创建一个新的数据库容器

代码语言:javascript复制
$ docker run -d --name db training/postgres
54b60e8764abb44ecd9099ae3e9c88efce0b2d654bf114fc32aaeb74892a7b42

第二步.创建一个新的web容器,并使用--link连接到db

代码语言:javascript复制
$ docker run -d -P --name web --link db:db training/webapp python app.py

第三步.查看容器,此时web容器和db容器就建立了虚拟的通道

代码语言:javascript复制
$ docker ps
CONTAINER ID   IMAGE               COMMAND                  CREATED              STATUS              PORTS                     NAMES
a60aa9ce7810   training/webapp     "python app.py"          About a minute ago   Up About a minute   0.0.0.0:55002->5000/tcp   web
54b60e8764ab   training/postgres   "su postgres -c '/us…"   9 minutes ago        Up 9 minutes        5432/tcp                  db

第四步.可以进入web容器,查看容器连接的信息,可以看到db的信息,也可以看到host信息

代码语言:javascript复制
$ docker exec -it a60aa9ce7810 /bin/bash
root@a60aa9ce7810:/opt/webapp# env
HOSTNAME=a60aa9ce7810
DB_NAME=/web/db
TERM=xterm
DB_PORT_5432_TCP_ADDR=172.17.0.6
DB_PORT=tcp://172.17.0.6:5432
DB_PORT_5432_TCP=tcp://172.17.0.6:5432
代码语言:javascript复制
root@a60aa9ce7810:/opt/webapp# cat /etc/hosts
127.0.0.1    localhost
::1    localhost ip6-localhost ip6-loopback
fe00::0    ip6-localnet
ff00::0    ip6-mcastprefix
ff02::1    ip6-allnodes
ff02::2    ip6-allrouters
172.17.0.6    db 54b60e8764ab
172.17.0.2    a60aa9ce7810

第五步.我们验证从web容器Ping我们的db容器

代码语言:javascript复制
root@a60aa9ce7810:/opt/webapp# ping db
PING db (172.17.0.6): 56 data bytes
64 bytes from 172.17.0.6: icmp_seq=0 ttl=64 time=0.227 ms
64 bytes from 172.17.0.6: icmp_seq=1 ttl=64 time=0.131 ms
64 bytes from 172.17.0.6: icmp_seq=2 ttl=64 time=0.129 ms

0 人点赞