Docker & ASP.NET Core (4):容器间的连接
第一篇:把代码连接到容器
第二篇:定制Docker镜像
第三篇:发布镜像
Docker容器间的连接
Docker提供了两种方式可以用来做容器间的连接/通信:
- Legacy Linking:这种方式使用容器名进行连接,实际上它创建了一个桥接的网络,在这个网络里,容器间可以进行通信。
- 把容器添加到桥接网络:这种方式是创建了一个自定义的桥接网络,它的类型是isolated network(隔离网络),只有在这个网络里的容器才能互相通信。
Legacy Linking
Legacy Linking,也就是按照容器名进行连接。
要想使用Legacy Linking,总共分这几步:
- 运行一个容器,需要给容器起一个名字
- 通过容器名,连接到正在运行的容器
- 如果还有其它容器要通信,那么重复上述步骤即可。
准备数据库项目
我准备使用ASP.NET Core做一个Web应用,数据库使用PostgreSQL,应用和数据库分别放在两个不同的容器里。
先弄数据库:
https://store.docker.com/images/postgres
docker pull postgres
然后运行容器,别忘了起名:
这里设置了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,网站仍然可以正常访问:
今天先到这。。。
Docker & ASP.NET Core (4):容器间的连接的更多相关文章
- Docker & ASP.NET Core (1):把代码连接到容器
和这种蛋糕一样,Docker的容器和镜像也是使用类似的分层文件系统构建而成的. 这样做的好处就是可以节省硬盘空间,也利于复用等等.因为Docker基于镜像创建容器的时候,其镜像是共享的:而且镜像里面的 ...
- Docker & ASP.NET Core (5):Docker Compose
第一篇:把代码连接到容器 第二篇:定制Docker镜像 第三篇:发布镜像 第四篇:容器间的连接 Docker Compose简介 Compose是一个用来定义和运行多容器Docker应用的工具.使用C ...
- Docker & ASP.NET Core 教程
第一篇:把代码连接到容器 第二篇:定制Docker镜像 第三篇:发布镜像 第四篇:容器间的连接 第五篇: Docker & ASP.NET Core (5):Docker Compose AS ...
- Ubuntu & GitLab CI & Docker & ASP.NET Core 2.0 自动化发布和部署(2)
上一篇:Ubuntu & GitLab CI & Docker & ASP.NET Core 2.0 自动化发布和部署(1) 服务器版本 Ubuntu 16.04 LTS. 本 ...
- Azure DevOps+Docker+Asp.NET Core 实现CI/CD(二.创建CI持续集成管道)
前言 本文主要是讲解如何使用Azure DevOps+Docker 来实现持续集成Asp.NET Core项目(当然 也可以是任意项目). 上一篇: Azure DevOps+Docker+Asp.N ...
- ASP.NET Core默认容器实现Controller的属性注入
仅针对Controller的属性注入: 使用默认容器,不依赖第三方库: 故事背景 闲来无事给项目做优化,发现大多数Controller里面都会用到Logger和AutoMapper,每个Contr ...
- Ubuntu & GitLab CI & Docker & ASP.NET Core 2.0 自动化发布和部署(1)
相关博文: Ubuntu 简单安装和配置 GitLab Ubuntu 简单安装 Docker Ubuntu Docker 简单安装 GitLab Ubuntu Docker 安装和配置 GitLab ...
- Docker & ASP.NET Core (3):发布镜像
第一篇:把代码连接到容器 第二篇:定制Docker镜像 上一篇文章最后有个问题,定制的镜像无法正常运行: 这可能是由于无法找到要运行的dll引起的问题. 之前的Dockerfile的文档我是按照微软的 ...
- Docker & ASP.NET Core (2):定制Docker镜像
上一篇文章:把代码连接到容器 Dockerfile 在Docker的世界里,我们可以通过一个叫Dockerfile的文件来创建Docker镜像,随后可以运行容器. Dockerfile就是一个文本文件 ...
随机推荐
- 用Hyperledger Fabric(超级账本)来构建Java语言开发区块链的环境
面向 Java 开发人员的链代码简介 您或许听说过区块链,但可能不确定它对 Java™ 开发人员有何用.本教程将帮助大家解惑.我将分步展示如何使用 Hyperledger Fabric v0.6 来构 ...
- java正则使用方法
import java.util.regex.Matcher;import java.util.regex.Pattern; public class RegexMatches{ public ...
- .Net Core版开源跨平台框架SkyMallCore
相互学习提升,有不足之处请指教!有需要急速开发的朋友可以拿来用哦! SkyMallCore 该项目目前放在github上,功能仍在完善,已Fork的园友已给了一些建议, 我会继续完善,并将开发过程遇到 ...
- JUC中Lock和ReentrantLock介绍及源码解析
Lock框架是jdk1.5新增的,作用和synchronized的作用一样,所以学习的时候可以和synchronized做对比.在这里先和synchronized做一下简单对比,然后分析下Lock接口 ...
- 【BZOJ 3626】 [LNOI2014]LCA【在线+主席树+树剖】
题目链接: TP 题解: 可能是我比较纱布,看不懂题解,只好自己想了…… 先附一个离线版本题解[Ivan] 我们考虑对于询问区间是可以差分的,然而这并没有什么卵用,然后考虑怎么统计答案. 首先LC ...
- Hibernate-ORM:05.Hibernate中的list()和iterator()
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- Hibernate中查多条(全部)使用list()或iterator() 本篇介绍: 1.如何使用list() ...
- RK3399配置笔记
1. adb shell 默认超级管理员 在build/core/main.mk下将ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=1改成ADDITIONAL_D ...
- Python爬虫入门教程 62-100 30岁了,想找点文献提高自己,还被反爬了,Python搞起,反爬第2篇
学术搜索 学习理论的知识少不了去检索文献,好多文献为你的实操提供了合理的支撑,我所在的大学内网默认是有知网账户的,非常NICE 今天要完成的网站是 http://ac.scmor.com/ Googl ...
- Kubernetes的DaemonSet(下篇)
用Daemon Pod来进行通信 使用Pod来再DaemonSet中通信的手段有: 推的方式:在DaemonSet中的Pod会被配置成发送更新到如状态数据库这样的服务.这些都没有客户端. IP+端口方 ...
- Python3|ddt|unittest|浅议数据驱动测试
目录 1.DDT简介 2.data装饰器 3.unpack装饰器 4.file_data装饰器 5.总结 1.DDT简介 Data-Driven Tests(DDT)即数据驱动测试.它允许您通过不同的 ...