1.搭建并连接mysql服务

1.1.mysql官方命令

https://hub.docker.com/_/mysql/

#下载mysql镜像:
docker pull mysql
#启动mysql:
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
#在另一个容器中连接mysql:
docker run --name some-app --link some-mysql:mysql -d application-that-uses-mysql
l#通过命令行连接mysql,未尝试
docker run -it --link some-mysql:mysql --rm mysql sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'

1.2.创建mysql容器

docker run --name csjmysql -v /Users/chenshanju/Desktop/docker/images/csj_mysql_home:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql:5.5

mysql更多操作,请参考菜鸟教程

创建数据库:

docker exec -it csjmysql sh
mysql -u root -p
create DATABASE TEST1021;
CREATE TABLE school('grade' INT ,'class' INT);
create table student(`id` int,`name` varchar(20),`age` int) default charset=utf8;

表的默认字符集是Latin1,汉字不能正常展示。此时要将字符集设置为utf8



1.3.搭建Navicat for MySQL客户端,

https://blog.csdn.net/lzwglory/article/details/64440161

连接mysql



选择数据库,查询

insert into school (grade,class) VALUES("一年级","1班");
insert into school (grade,class) VALUES("一年级","2班");
insert into school (grade,class) VALUES("二年级","1班");

2.容器之前通信

容器和宿主机间通信可以通过指定端口号进行连接通信,容器和容器之间如何通信?

容器间的通信:

容器要知道另一个容器的IP地址才能进行通信。但是使用docker启动容器时,没有指定容器的IP地址。docker连网桥自动分配的一个局域网络,容器的IP地址是由docker自动分配的,事先是无法知道的。

因此如何在不知道对方IP地址的情况下,进行通信。

2.1.方法一:通过link连接2个容器 --link

docker run -d --name csjjenkins --link csjmysql jenkins sleep infinity
docker exec -it csjjenkins sh
env |grep MYSQL

在容器中多了很多MYSQL的环境变量



link命令将一个容器的源信息以环境变量的形式传入到另一个容器中

缺点:

1.容器支持以环境变量的方式实现信息的获取并支持设置到其他的服务上

2.日常的环境只需要设置相关的配置文件就可以了,而不是通过环境变量

网络模式:可以实现宿主机和容器、容器和容器,容器和服务的通信。

docker的网络模式:bridge(默认) host container null

2.2网络模式

由于网络名称控件的作用,容器之间的网络是隔离的。只有通过一种特殊的方法,实现网络通信。

使用ifconfig列出宿主机当前所有的网络设备

docker0:是docker agent启动时创建的桥接设备。而bridge模式也是通过docker0来进行通信的。

en0:宿主机的物理网卡,即以太网卡,可能有多个

lo:本地回环设备。自己ping自己的时候,用的就是lo

veth*:虚拟网卡。



为了解决虚拟网卡对导致的爆炸式增长的问题,docker使用桥接模式



实现外界同容器的通信:

网桥的特性可以有很多个接口,并且可以连接多个网络设备。外界有个去192.168.1.1的网络请求,先发送给docker0,此时docker0对所有的网络设备做一个广播,如果V2是,V2接受传递给V1,V1传递给A,然后返回,其他网络设备把这个数据报文丢弃。

容器内的通信:

B发送报文给V3,V3传递给V4,V4传递给docker0,docker0判断目的地是否是本地网络,如果是本地网络docker0广播,V2接受到广播,传递给V1,V 传递给A,然后返回;如果不是本地网络,docker0不会广播,通过另一个端口传递到容器外面的网络去。

宿主机和容器的通信:

宿主机只要和docker0通信即可

外部用户和容器的通信:

端口映射,先发送到宿主机的端口上,再转发到容器

端口映射简述:访问宿主机的端口,能够转发到对应的容器内

Linux内核中有个ipv4_forward参数。只要开启这个参数,宿主机就可以作为路由器。如果发现流经宿主机的报文目的地址不是宿主机本身,就把报文转发出去,如转发到docker0上

iptables:控制Linux网络内核的一个命令。

Linux中有一个专门控制网络的模块netfilter。

在Linux系统中,iptables通过内核中netfilter模块来达到让用户控制网络的目的。

对于一个操作系统的内核来说,用户空间的东西是不能直接修改内核空间的东西的。内核空间一定要先对外暴露一个接口,由系统调用去调用它。netfilter对外暴露了5个钩子:input、output、forward、prerouting、postrouting,这5个钩子分别控制系统网络中的5个不同阶段,控制一个数据报文流向本系统的时候5个不同阶段。

钩子:可以修改或者篡改数据报文。



iptables指定规则:凡是流经3306端口的数据报文,由SNAT或DNAT进行修改。

比如:一个原地址为192.168.9.1的数据报文发往HOSTIP:3306端口。现途径prerouting,DNAT打开数据报文,查看报头中的目的地址。如果目的地址是本地的HOSTIP:3306,即命中规则。DNAT就将HOSTIP:3306替换为容器的IP地址加端口号。然后流经forward链传送到docker0,再传送到容器网络中。

容器向外部发送数据,会有SNAT将容器IP替换为HOSTIP,对外展示为本机发送的信息。

缺点:

1.一定依赖于iptables的端口映射,才能达到通信。宿主机上由50个容器,就要由50个不同端口号,维护起来相当麻烦

2.需要宿主机的设置,需要添加验证才能使用。

2.3host模式:


使用host模式启动Jenkins启动失败
```#shell
docker run --name csjjenkins -itd --network host -v /Users/chenshanju/Desktop/docker/images/csjjenkins_home:/var/jenkins_home/ -e JAVA_OPTS="-Xmx8912m" jenkins
docker exec -it csjjenkins sh
ip address #与宿主机的ip address结果相同
```
host模式限制:
如果2个容器使用同一个端口,会冲突。

2.4container模式:


```#shell
docker run --name=conan -itd -p 8999:4200 conan
docker run --name=holmes -itd --net=container:conan holmes
```
link和container的区别:如果搭建本地环境,使用link;如果开发应用,一般使用container。
搭建testlink 搭建失败,失败原因:testlink启动失败
[https://hub.docker.com/r/bitnami/mariadb/](https://hub.docker.com/r/bitnami/mariadb/)
## 3.mariadb,可以理解为mysql的姊妹。
MySQL之父Widenius先生离开了Sun之后,觉得依靠Sun/Oracle来发展MySQL,实在很不靠谱,于是决定另开分支,这个分支的名字叫做MariaDB。

    MariaDB跟MySQL在绝大多数方面是兼容的,对于开发者来说,几乎感觉不到任何不同。目前MariaDB是发展最快的MySQL分支版本,新版本发布速度已经超过了Oracle官方的MySQL版本。

https://hub.docker.com/r/bitnami/testlink/

docker pull bitnami/mariadb
docker pull bitnami/testlink
docker run -d --name csjmariadb -e ALLOW_EMPTY_PASSWORD=yes -e MARIADB_USER=bn_testlink -e MARIADB_DATABASE=bitnami_testlink -v /Users/chenshanju/Desktop/docker/images/csjtestlink:/var/lib/mysql -p 8088:3306 bitnami/mariadb:latest
# ALLOW_EMPTY_PASSWORD=yes 用户名密码是空的
#MARIADB_USER=bn_testlink 创建user
#MARIADB_DATABASE=bitnami_testlink 创建库
docker run -d --name csjtestlink -p 8099:80 -p 444:443 -e ALLOW_EMPTY_PASSWORD=yes -e TESTLINK_DATABASE_USER=bn_testlink -e TESTLINK_DATABASE_NAME=bitnami_testlink --link csjmariadb bitnami/testlink:latest

4.grid模式



安装VNC viewerhttps://www.realvnc.com/en/connect/download/viewer/

使用:输入IP:port,输入密码,即可。密码默认:secret

1021 docker搭建mysql、网络模式、grid的更多相关文章

  1. Docker搭建MySQL的PXC集群

    原文:Docker搭建MySQL的PXC集群 一.简介 PXC属于一套近乎完美的mysql高可用集群解决方案,相比那些比较传统的基于主从复制模式的集群架构MHA和MM+keepalived,galer ...

  2. [转帖]Docker四种网络模式

    Docker(十四)-Docker四种网络模式 https://www.cnblogs.com/zhuochong/p/10069293.html 计算机网络相关的知识 非常有用.. Docker 安 ...

  3. Docker 四种网络模式

    原文 https://www.cnblogs.com/gispathfinder/p/5871043.html 我们在使用docker run创建Docker容器时,可以用--net选项指定容器的网络 ...

  4. Docker搭建MySQL主从复制

    Docker搭建MySQL主从复制 主从服务器上分别安装Docker 1.1 Docker 要求 CentOS 系统的内核版本高于 3.10 [root@localhost ~]# uname -r ...

  5. Docker学习第四天(Docker四种网络模式)

    Docker四种网络模式 实现原理 Docker使用Linux桥接(参考<Linux虚拟网络技术>),在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根 ...

  6. MySQL(14)---Docker搭建MySQL主从复制(一主一从)

    Docker搭建MySQL主从复制(一主一从) 上一篇博客写了MYSQL主从复制原理 : MySQL(13)---MYSQL主从复制原理 这篇我们来写 Docker搭建MYSQL主从复制(一主一从) ...

  7. Docker搭建MySQL服务

    Docker开源镜像 前面我们已经安装好了Docker,也简单了解了Docker.那么我们可以尝试搭建一个MySQL服务. 要搭建服务就要启动服务容器,要创建容易就要有镜像,Docker提供了一个类似 ...

  8. Docker(十四)-Docker四种网络模式

    Docker 安装时会自动在 host 上创建三个网络,我们可用 docker network ls 命令查看: none模式,使用--net=none指定,该模式关闭了容器的网络功能. host模式 ...

  9. 基于Docker搭建MySQL主从复制

    摘要: 本篇博文相对简单,因为是初次使用Docker,MySQL的主从复制之前也在Centos环境下搭建过,但是也忘的也差不多了,因此本次尝试在Docker中搭建. 本篇博文相对简单,因为是初次使用D ...

随机推荐

  1. Spring MVC 实现跨域资源 CORS 请求

    说到 AJAX 跨域,很多人最先想到的是 JSONP.的确,JSONP 我们已经十分熟悉,也使用了多年,从本质上讲,JSONP 的原理是给页面注入一个 <script>,把远程 JavaS ...

  2. mysql 判断表字段是否存在,然后修改

    -- ---------------------------- -- 判断 vrv_paw_rule 表是否存在 thresholdMin 字段,不存在则添加; 存在则修改字段类型 DELIMITER ...

  3. python模块之ConfigParser: 用python解析配置文件

    在程序中使用配置文件来灵活的配置一些参数是一件很常见的事情,配置文件的解析并不复杂,在python里更是如此,在官方发布的库中就包含有做这件事情的库,那就是ConfigParser,这里简单的做一些介 ...

  4. POJ 2689 筛法求素数

    DES:给出一个区间[L, U].找出这个区间内相邻的距离最近的两个素数和距离最远的两个素数.其中1<=L<U<=2147483647 区间长度不超过1000000. 思路:因为给出 ...

  5. IIS7 部署 MVC3

    IIS7 部署 MVC3 (2013-02-28 11:06:39) 转载▼ 标签: iis7 mvc3 it 分类: ASP.NET 在IIS7下部署MVC已经简化了许多,基本按照一般的项目部署即可 ...

  6. C++设计模式之适配器模式

    对象适配器有以下特点: 有的时候,你会发现,不是很容易去构造一个Adaptee类型的对象: 当Adaptee中添加新的抽象方法时,Adapter类不需要做任何调整,也能正确的进行动作: 可以使用多肽的 ...

  7. eclipse 编码设置【转】

    一般Java文件编码格式是UTF-8的.以下以默认GBK改为UTF-8为例. 1.改变整个工作空间的编码格式,这样以后新建的文件也是新设置的编码格式. eclipse->window->p ...

  8. java.io.File中的 pathSeparator 与separator 的区别

    先总的说一下区别: File.pathSeparator指的是分隔连续多个路径字符串的分隔符,例如: java   -cp   test.jar;abc.jar   HelloWorld 就是指“;” ...

  9. ionic2中跨页面回传值

    1.在跳转到新页面时传入一个contactsCallback的参数,在该参数的函数定义中做出一个承诺. 注意:最开始我本来是采用如下图方式的,但是很不幸,出现了问题,问题所在就是关于这个this的作用 ...

  10. 第十七课 StaticList和DynamicList实现

    本节我们要实现StaticList和DynamicList,如下: StaticList的设计要点: StaticList是一个类模板,使用原生数组作为顺序存储空间,使用模板参数决定数组大小 在Sta ...