一、背景

​ 为了把测试环境迁移至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. ATL模板库中的OLEDB与ADO

    上次将OLEDB的所有内容基本上都说完了,从之前的示例上来看OLEDB中有许多变量的定义,什么结果集对象.session对象.命令对象,还有各种缓冲等等,总体上来说直接使用OLEDB写程序很麻烦,用很 ...

  2. svn自动更新网站代码

    运行环境说明:svn的执行目录: /usr/bin/svnsvn版本库目录: /usr/local/nginx/html/svnrepos/coinhello (其中svnrepos是我各个项目版本库 ...

  3. Django——admin管理工具

    一.admin组件使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.你可以在项目的 settings.py 中的 INSTAL ...

  4. Visual Studio Code打开终端控制台

    刚学习Node.js开发,使用vscode开发工具.一开始使用Windows命令窗口输出Node结果,但是觉得太麻烦了,每次都要从vscode开发工具切换到Windows命令窗口,来来回回. 然后想, ...

  5. 跨平台移动开发_PhoneGap 使用Geolocation基于所在地理位置坐标调用百度地图API

    使用Geolocation基于所在地理位置坐标调用百度地图API 效果图 示例代码 <!DOCTYPE html> <html> <head> <title& ...

  6. C语言指针的陷阱

    C语言指针的陷阱   分类: C/Cpp 转自:http://blog.csdn.net/porscheyin/article/details/3461670 “C语言诡异离奇,陷阱重重,却获得了巨大 ...

  7. DispatchAction和ForwardAction

    添加功能的步骤:做页面——编写DAO类中的方法——编写和配置action. 如果多个action 使用一个formbean,这种事儿多发生在统一模块中,就可以用一个Action集中处理多个操作,而不要 ...

  8. JDBC操作数据库的基本步骤:

    JDBC操作数据库的基本步骤: 1)加载(注册)数据库驱动(到JVM). 2)建立(获取)数据库连接. 3)创建(获取)数据库操作对象. 4)定义操作的SQL语句. 5)执行数据库操作. 6)获取并操 ...

  9. Python模块 Socket

    一个简单的python socket编程 一.套接字 套接字是为特定网络协议(例如TCP/IP,ICMP/IP,UDP/IP等)套件对上的网络应用程序提供者提供当前可移植标准的对象.它们允许程序接受并 ...

  10. mybatis 中map作为参数

    public interface ICodeGenDao extends IBaseDao<AssetsAllocation, Long> { /*** * 生成主编码 * @param ...