Docker与Kubernetes系列(三): 外部访问Docker容器

释放双眼,带上耳机,听听看~!

这是本系列的第三篇文章, 将介绍如何访问Docker容器。

一、外部访问容器

容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 
-P
 或 
-p
 参数来指定端口映射。

当使用 -P 标记时,Docker 会随机映射一个 
49000~49900
 的端口到内部容器开放的网络端口。 (如果写了Dockerfile, 将会使用EXPOSE处来的端口)

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


1
2
3
4
5
1$ sudo docker run -d -P training/webapp python app.py
2$ sudo docker ps -l
3CONTAINER ID  IMAGE                   COMMAND       CREATED        STATUS        PORTS                    NAMES
4bc533791f3f5  training/webapp:latest  python app.py 5 seconds ago  Up 2 seconds  0.0.0.0:49155->5000/tcp  nostalgic_morse
5

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

例如:

映射所有接口地址

使用 
hostPort:containerPort 格式本地的 5000 端口映射到容器的 5000 端口,可以执行


1
2
3
1$ sudo docker run -d -p 5000:5000 training/webapp python app.py
2
3

此时默认会绑定本地所有接口上的所有地址。

二、容器互联

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

该系统会在源和接收容器之间创建一个隧道,接收容器可以看到源容器指定的信息。

使用 –link 参数可以让容器之间安全的进行交互。

下面先创建一个新的数据库容器。


1
2
1$ sudo docker run -d --name db training/postgres
2

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


1
2
1$ sudo docker run -d -P --name web --link db:db training/webapp python app.py
2

此时,db 容器和 web 容器建立互联关系。

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

使用 
docker ps 来查看容器的连接


1
2
3
4
5
1$ docker ps
2CONTAINER ID  IMAGE                     COMMAND               CREATED             STATUS             PORTS                    NAMES
3349169744e49  training/postgres:latest  su postgres -c '/usr  About a minute ago  Up About a minute  5432/tcp                 db, web/db
4aed84ee21bde  training/webapp:latest    python app.py         16 hours ago        Up 2 minutes       0.0.0.0:49154->5000/tcp  web
5

可以看到自定义命名的容器,db 和 web,db 容器的 names 列有 db 也有 web/db。这表示 web 容器链接到 db 容器,web 容器将被允许访问 db 容器的信息。

Docker 在两个互联的容器之间创建了一个安全隧道,而且不用映射它们的端口到宿主主机上。在启动 db 容器的时候并没有使用 
-p 和 
-P 标记,从而避免了暴露数据库端口到外部网络上。

给TA打赏
共{{data.count}}人
人已打赏
安全运维

故障复盘的简洁框架-黄金三问

2021-9-30 19:18:23

安全运维

OpenSSH-8.7p1离线升级修复安全漏洞

2021-10-23 10:13:25

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索