当我们使用 traefik 反向代理和自动服务发现后,我们对集群内部的服务分为两类
我们先来看一看 DNS Lookup 的流程
而当有了 dnsmasq 后,请求私有服务会先去 dnsmasq 解析 IP 地址。而请求互联网,如百度,则会由 dnsmasq 转发至上游 DNS 服务器进行解析。
dnsmasq 部署自然也是使用 docker compose,配置文件如下
version: '3'
services:
dns:
image: jpillora/dnsmasq
restart: always
ports:
- "53:53/udp"
volumes:
- ./dnsmasq.conf:/etc/dnsmasq.conf
- ./resolv.conf:/etc/resolv.conf
# 使用已存在的 traefik 的 network
networks:
default:
external:
name: traefik_default
其中自然也是与 traefik 使用同一网络,挂载两个文件,关于文件配置如下所示
在 dnsmasq 中需要配置 *.shanyue.local 映射到内部集群,./dnsmasq.conf 配置文件如下所示。172.18.0.1 是 traefik 网络入口,详情参照我的文章 traefik 简易介绍
log-queries
log-dhcp
# 配置域名映射
address=/docker.localhost/172.18.0.1
address=/shanyue.local/172.18.0.1
当访问 www.baidu.com 还是要通过公共的 DNS 服务的,如谷歌的 8.8.8.8,这里使用阿里云默认的 nameserver。./resolv.conf 配置文件如下所示
options timeout:2 attempts:3 rotate single-request-reopen
nameserver 100.100.2.136
nameserver 100.100.2.138
由于在服务器中使用 0.0.0.0:53 作为 DNS 服务器,此时也需要更改服务器内部的 /etc/resolv.conf,修改如下
nameserver 127.0.0.1
在本地局域网中,可以使用该服务器的 IP 地址作为 DNS 服务器。可以使用 openvpn 来连接本地环境与服务器集群。详情参考 使用 openvpn 与集群内部服务通信
此时使用 host 或 dig 对内部服务进行测试,均能返回正确的 IP 地址
$ host whoami.docker.localhost
whoami.docker.localhost has address 172.18.0.1
$ dig whoami.docker.localhost
172.18.0.1
此时,dnsmasq 解析的日志显示如下
dnsmasq: query[A] whoami.docker.localhost from 172.18.0.1
dnsmasq: config whoami.docker.localhost is 172.18.0.1
再测试下 www.baidu.com,测试外部域名是否能够正常解析
$ dig www.baidu.com +short
www.a.shifen.com.
220.181.38.149
220.181.38.150
正常工作,dnsmasq 日志如下
dnsmasq: query[A] www.baidu.com from 172.18.0.1
dnsmasq: forwarded www.baidu.com to 100.100.2.136
dnsmasq: forwarded www.baidu.com to 100.100.2.138
dnsmasq: reply www.baidu.com is <CNAME>
dnsmasq: reply www.a.shifen.com is 220.181.38.149
dnsmasq: reply www.a.shifen.com is 220.181.38.150
我是山月,可以加我微信 shanyue94 与我交流,备注交流。另外可以关注我的公众号【全栈成长之路】
前端开发过程中,少不了自己封装一些通用的包,但又不想放在公共的平台,所以搭建一个npm私有的仓库是很有必要的。在这里简单介绍如何使用 verdoccio 在docker环境下的配置。verdoccio,轻量级私有npm代理注册表。
所以我们可以通过修改docker compose的配置文件来完成我们的需求。熟悉Docker的都应该知道容器运行时其内部会有一个端口以映射到我们外部的端口,我们需要固定的就是这个外部端口。
下载microsoft/dotnet镜像、创建.NET Core MVC项目、上面dotnet restore这一步可能会卡很久遇到超时的状况,因为Nuget在国外的原因,博客园有提供加速镜像,参照设定好之后,速度会快很多
虚拟化和容器化是项目云化不可避免的两个问题。虚拟化由于是纯平台操作,一个运行于linux操作系统的项目几乎不需要做任何改造就可以支持虚拟化。而项目如果要支持容器化则需要做许多细致的改造工作。
Stack Overflow开发人员调查中,开发人员将Docker评为:最受欢迎的平台,最喜欢的平台,最常用的平台。来自世界各地的近90,000名开发人员对调查做出了回应。
Docker中部署tomcat相信大家也都知道,不知道的可以google 或者bing 一下。这里主要是为了记录在我们启动容器之后,tomcat需要直接定位到网站信息,而不是打开域名之后,还得加个blog后缀才能访问到我们的网站首页。
现在一聊到容器技术,大家就默认是指 Docker 了。但事实上,在 Docker 出现之前,PaaS社区早就有容器技术了,以 Cloud Foundry、OpenShift 为代表的就是当时的主流。那为啥最终还是 Docker 火起来了呢?
首先获取ngnix镜像(默认的是最新版),先来编写一个最简单的Dockerfile,一个Dockerfile修改该Nginx镜像的首页.Dockerfile是一个文本文件,其中包含了若干条指令
容器非常适合封装软件,但是有时一味地改造容器镜像以使其尽可能小时,您可能走得太远。我们需要在“简洁”的镜像和无法调试的镜像之间找到很好的平衡。看到人们调试正在运行的容器的正常方法
在容器安全方面,有很多使用开源工具阻止安全灾难的故事,例如前不久发生的特斯拉 Kubernetes 集群入侵事件。容器的安全性一直是一件很棘手的事情,因此如何巧妙使用开源工具就成为一件重要的事情。
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!