Docker & ASP.NET Core (4):容器间的链接

第一篇:把代码链接到容器 html

第二篇:定制Docker镜像web

第三篇:发布镜像sql

 

Docker容器间的链接

Docker提供了两种方式能够用来作容器间的链接/通讯:docker

  • Legacy Linking:这种方式使用容器名进行链接,实际上它建立了一个桥接的网络,在这个网络里,容器间能够进行通讯。
  • 把容器添加到桥接网络:这种方式是建立了一个自定义的桥接网络,它的类型是isolated network(隔离网络),只有在这个网络里的容器才能互相通讯。

 

Legacy Linking

Legacy Linking,也就是按照容器名进行链接。数据库

要想使用Legacy Linking,总共分这几步:bash

  1. 运行一个容器,须要给容器起一个名字
  2. 经过容器名,链接到正在运行的容器
  3. 若是还有其它容器要通讯,那么重复上述步骤便可。

准备数据库项目

我准备使用ASP.NET Core作一个Web应用,数据库使用PostgreSQL,应用和数据库分别放在两个不一样的容器里。网络

 

先弄数据库:post

https://store.docker.com/images/postgres网站

docker pull postgresspa

而后运行容器,别忘了起名:

这里设置了POSTGRES_PASSWORD这个环境变量,它在容器里就是数据库的密码。

 

准备ASP.NET Core MVC项目

而后再创建一个ASP.NET Core 项目:

就选择ASP.NET Core MVC模板,不带身份验证,创建一个项目便可。

而后须要添加Npgsql.EntityFrameworkCore.PostgreSQL这个库。

创建DbContext:

 

在Startup里配置:

配置链接字符串:

 

设置自动迁移,并添加种子数据:

 

去掉HTTPS相关设置,让其监听5000端口:

而后添加一个Migration:

 

建立ASP.NET Core Web应用的容器

创建Dockerfile:

 

建立镜像:

 

运行容器:

 

在这里, --link my-postgres:postgres-server 就是经过容器名链接到了my-postgres这个容器,链接以后把该my-postgres这个容器名映射为postgres-server这个名称,这个名称和链接字符串里的HOST的名字一致:

 

看一下正在运行的容器:

能够看到数据库和Web应用的容器都在运行。

 

链接到正在运行的数据库容器

我想看一下在数据库容器里是否成功建立了Students表,以及里面是否有种子数据了。可使用:

docker exec 容器名/ID 命令,来对容器执行某个命令。

这里我这样写:

进入交互模式,并打开bash。

 

能够看到种子数据已经添加成功了。

 

查看Web应用的Log

使用docker logs 容器名/ID来查看log:

 

应该没问题。

 

最后访问http://localhost:5000:

能够看到,web应用和数据库两个容器之间已经正常的链接并运行了。

 

容器网络

容器的网路,或者叫桥接的网络。

能够这样想,在一个Docker Host里,有许多容器,他们之间须要相互通讯。咱们可使用容器名进行通讯,尤为是开发的时候。

可是当容器比较多的时候,你可能就倾向于对一些容器进行隔离,或者叫作分组。

而咱们经过Docker客户端就能够建立这种隔离的网络。每个隔离网络里的容器能够相互通讯,这时也使用容器名进行通讯。

有了这种隔离的网络,对容器间的通讯管理就方便多了。

 

建立容器网络的步骤

  • 首先,建立一个自定义的桥接网络
  • 而后,让容器运行于这个自定义的桥接网络。也可让一个容器运行于多个网络中。

使用这个命令建立网络:

docker network create --driver bridge 网络名

这句话就是使用桥接网络来创建一个自定义网络。

 

而后我让容器加入到这个网络里。其命令大体以下:

docker run -d --network=网路名 --name 网络内的容器名 镜像名

 

首先为了演示方便,我把其他的容器都删掉了:

 

而后,我把现有的网络列举一下。docker network ls:

能够看到以前创建的my-net也在里面。

 

咱们也能够inspect一下这个网络:

能够看到里面尚未任何的容器。

 

而后,我运行postgres的容器,让其加入该网络:

 

这时再次inspect该网络,能够看到这个容器已经进入网络了:

 

 而后再把ASP.NET Core应用的容器添加到该网络:

注意这里不须要使用--link了。

 

再次inspect该网络:

能够看到里面有两个容器了。

 

而后访问http://localhost:5000,网站仍然能够正常访问:

 

今天先到这。。。

相关文章
相关标签/搜索