一、背景

​ 为了把测试环境迁移至docker上,我在centos7上安装了docker,具体安装方法可参考《CentOS7下安装docker》本文不再论述。有些同学可能会有疑问,为什么要那样子做?我给大家看看目前我的docker环境究竟是怎么样的?

# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9e1ae7ac8ead postgres:10.6 "docker-entrypoint.s…" 7 seconds ago Up 4 seconds 192.168.56.8:5433->5432/tcp chenzx-postgres10.6
927842f243da postgres:9.6.11 "docker-entrypoint.s…" 16 seconds ago Up 14 seconds 192.168.56.8:5432->5432/tcp chenzx-postgres9.6
dcc880f0a503 mysql:5.7.25 "docker-entrypoint.s…" 30 minutes ago Up 30 minutes 33060/tcp, 192.168.56.8:3307->3306/tcp chenzx-mysql5.7
56c8605d7d22 mysql:5.6.43 "docker-entrypoint.s…" About an hour ago Up About an hour 192.168.56.8:3306->3306/tcp chenzx-mysql5.6

​ 迁移后,可以在容器中非常快速地建立不同版本的数据库容器,可以做相关的测试。如果测试环境中把数据库弄崩了,咋办?很简单把容易删除重建就好,而且时间就是那么几秒钟的事情。不再像以往可能要花半天一天去弄。当然啦,这种玩法只适合在个人的测试环境中,生产环境暂时不建议使用这些方式,风险太大了。

二、Docker网络知识科普

# docker network ls
NETWORK ID NAME DRIVER SCOPE
90270239cfd6 bridge bridge local
f97e248a7301 host host local
8833271a493a none null local

​ 使用docker命令查看docker的网络模式,这里可以看到有三种,但实际上是有4种模式,最后一种应该是我还无配置所以无法显示出来。下面我们开始介绍这四种模式:

  • bridge模式:使用–net=bridge指定,默认设置。

  • host模式:使用–net=host指定。

  • container模式:使用–net=container:NAME_or_ID指定。

  • none模式:使用–net=none指定。

1. bridge模式

​ Docker 容器默认使用 bridge 模式的网络。其特点如下:

  • 使用一个 linux bridge,默认为 docker0
  • 使用 veth 对,一头在容器的网络 namespace 中,一头在 docker0 上
  • 该模式下Docker Container不具有一个公有IP,因为宿主机的IP地址与veth pair的 IP地址不在同一个网段内
  • Docker采用 NAT 方式,将容器内部的服务监听的端口与宿主机的某一个端口port 进行“绑定”,使得宿主机以外的世界可以主动将网络报文发送至容器内部
  • 外界访问容器内的服务时,需要访问宿主机的 IP 以及宿主机的端口 port
  • NAT 模式由于是在三层网络上的实现手段,故肯定会影响网络的传输效率。
  • 容器拥有独立、隔离的网络栈;让容器和宿主机以外的世界通过NAT建立通信

2. host模式

​ Host 模式并没有为容器创建一个隔离的网络环境。而之所以称之为host模式,是因为该模式下的 Docker 容器会和 host 宿主机共享同一个网络 namespace,故 Docker Container可以和宿主机一样,使用宿主机的eth0,实现和外界的通信。换言之,Docker Container的 IP 地址即为宿主机 eth0 的 IP 地址。其特点包括:

  • 这种模式下的容器没有隔离的 network namespace
  • 容器的 IP 地址同 Docker host 的 IP 地址
  • 需要注意容器中服务的端口号不能与 Docker host 上已经使用的端口号相冲突
  • host 模式能够和其它模式共存

3. container模式

Container 网络模式是 Docker 中一种较为特别的网络的模式。处于这个模式下的 Docker 容器会共享其他容器的网络环境,因此,至少这两个容器之间不存在网络隔离,而这两个容器又与宿主机以及除此之外其他的容器存在网络隔离。

4. none模式

网络模式为 none,即不为 Docker 容器构造任何网络环境。一旦Docker

容器采用了none 网络模式,那么容器内部就只能使用loopback网络设备,不会再有其他的网络资源。Docker

Container的none网络模式意味着不给该容器创建任何网络环境,容器只能使用127.0.0.1的本机网络。

三、创建带IP地址、端口映射的容器

​ 了解完docker网络模式,我们根据image的帮助文档结合网络映射等配置,以MySQL为例,得出以下的命令:

docker run --name <ContrinerName> -p IPAddr:HostPort:ContainerPort -d  MYSQL_ROOT_PASSWORD=<MYSQL_ROOT_PASSWORD> -d mysql:<TargetVersion>

执行:

docker run --name chenzx-mysql5.6 -p 192.168.56.8:3306:3306 --network=bridge -e MYSQL_ROOT_PASSWORD=****** -d mysql:5.6.43

执行后就会创建出上文展示的容器chenzx-mysql5.6。MySQL的远程连接端口为3306,故需把这端口映射。PostgreSQL需映射5432端口,Oracle需映射1521端口。

​ 创建容器就行了,为何需要做网络映射?为了是可以让第三方工具进行连接,如Navicat等。

最终效果:

四、参考文献

《docker 之网络配置》

使用第三方工具连接docker数据库的更多相关文章

  1. pgadmin(IDE)工具连接postgres数据库

    1. 下载软件        软件地址:http://www.pgadmin.org/download/pgagent.php   2.安装软件    安装过程:略    打开软件64位会出现  “无 ...

  2. DBeaver数据库管理工具连接Sybase数据库

    DBeaver数据库管理工具连接Sybase数据库 1. 下载DBeaver 官方网站:http://dbeaver.jkiss.org/ DBeaver5.3.1解压缩版(不用安装和配置):http ...

  3. pycharm工具连接mysql数据库失败

    在使用pycharm开发工具连接mysql数据库时提示错误,信息如下: Server returns invalid timezone. Go to 'Advanced' tab and set 's ...

  4. PL/SQL工具连接ORALCE数据库的方法

    http://www.cnblogs.com/dongzhiquan/archive/2011/11/21/2257629.html 1.利用ORACLE NET MANAGER工具 1)打开 ORA ...

  5. DBsever工具连接mysql数据库

    当我们安装网DBeaver的时候,怎么通过这个工具来连接Mysql数据库呢 像这个地方就按平时你的数据库信息输入就可以了 接下来配置JDBC的内容 重点说一下驱动包的版本问题,因为我安装的mysql是 ...

  6. 用PL/SQL工具连接Oracle数据库的时报错:ORA-12638: 身份证明检索失败的解决方法

    本地客户端用PLSQL Developer连接远程数据库时提示: ORA-12638: 身份证明检索失败!!! 解决方法一: 此目录下F:\myorcl\product\11.2.0\client_1 ...

  7. win10系统Docker和VMware WorkStation共存,远程工具连接Docker

    摘要:win10安装docker进行学习的两种途径: Docker for Windows Installer.exe(地址https://download.docker.com/win/stable ...

  8. 使用第三方库连接MySql数据库:PyMysql库和Pandas库

    使用PyMysql库和Pandas库链接Mysql 1 系统环境 系统版本:Win10 64位 Mysql版本: 8.0.15 MySQL Community Server - GPL pymysql ...

  9. SQL*Plus命令行工具连接Oracle数据库

    1.在命令行中输入"sqlplus /nolog"即可启动该工具. 2.连接到Oracle服务器  conn 用户名/密码@服务器连接字符串 as 连接身份 客户端工具根据&quo ...

随机推荐

  1. for ...in 、for each ...in、 for...of(https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/for...of)

    1.for in for...in语句以任意顺序遍历一个对象的可枚举性.对于每个不同的属性,语句都会被执行. 语法 for (variable in object) {...} variable 在每 ...

  2. echarts解决一些大屏图形配置方案汇总

    本文主要记录使用echarts解决各种大屏图形配置方案. 1.说在前面 去年经常使用echarts解决一些可视化大屏项目,一直想记录下使用经验,便于日后快速实现.正好最近在整理文档,顺道一起记录在博客 ...

  3. Python爬虫之图片懒加载技术、selenium和PhantomJS

    一.引入 2.概要 图片懒加载 selenium phantomJs 谷歌无头浏览器 3.回顾 验证码处理流程 一.今日详情 动态数据加载处理 1.图片懒加载 什么是图片懒加载? 案例分析:抓取站长素 ...

  4. H5分享到微信好友朋友圈QQ好友QQ空间微博二维码

    这是分享按钮: <button onclick="call()">通用分享</button> <button onclick="call(' ...

  5. 在C#中生成GUID的方法

    var guid = Guid.NewGuid();Debug.WriteLine(guid.ToString());   //1f3c6041-c68f-4ab3-ae19-f66f541e3209 ...

  6. .NET开源工作流RoadFlow-表单设计-数据字典选择

    添加数字字典选择框: 选择范围:指定可选择的字典范围. 是否多选:指定是否可以多选.

  7. SVNKit学习——svn二次开发背景和闲谈(一)

    开发背景: 简述现有流程:代码的合并.提交是以任务为最小单元的.例如A和B两个同学开发不同的任务,那就是两个任务号.合并的时候可能会先合并A的代码,在合并B的代码. 需求:SVN合并程序开发——一款能 ...

  8. YAML 格式学习

    目录 什么是YAML 一.注释和多文件 二.格式要求 三.数据结构 1.对象 2. 数组 3.常量 四.字符串 YAML的特殊字符 什么是YAML YAML是"YAML不是一种标记语言&qu ...

  9. 多设备同时安装apk(安卓)

    前几天在做安卓设备的多个设备同时安装的小脚本.因为目前我这边设备有点多,想顺便做一下安装的测试.而且因为公司的app测试人手上有点不足,就想通过这个办法去在安装的时候更方便省事一点. 本来是想弄个复杂 ...

  10. NodeJs安装less(npm方式)

    上一次讲了如何在浏览器端解析less文件,这次是在cmd中使用npm中的less模块来解析 详解如下 首下我们去下载一个https://nodejs.org/en/,   一路next之后,因为文件不 ...