1.搭建并链接mysql服务
1.1.mysql官方命令
https://hub.docker.com/_/mysql/html
#下载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更多操做,请参考菜鸟教程 建立数据库: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 <img src="https://img2018.cnblogs.com/blog/1418970/201811/1418970-20181103174131537-1604005865.png" width="200" /> <img src="https://img2018.cnblogs.com/blog/1418970/201811/1418970-20181103174203908-291429589.png" width="300" />sql
1.3.搭建Navicat for MySQL客户端,
https://blog.csdn.net/lzwglory/article/details/64440161 链接mysql <img src="https://img2018.cnblogs.com/blog/1418970/201811/1418970-20181103115429364-1201625602.png" width="350"/> 选择数据库,查询 <img src="https://img2018.cnblogs.com/blog/1418970/201811/1418970-20181105171035962-298475118.png" width="500" />docker
insert into school (grade,class) VALUES("一年级","1班"); insert into school (grade,class) VALUES("一年级","2班"); insert into school (grade,class) VALUES("二年级","1班");
2.容器以前通讯
<font color=FF0000>容器和宿主机间通讯能够经过指定端口号进行链接通讯,容器和容器之间如何通讯?</font>shell
<font color=458000>容器间的通讯: 容器要知道另外一个容器的IP地址才能进行通讯。可是使用docker启动容器时,没有指定容器的IP地址。docker连网桥自动分配的一个局域网络,容器的IP地址是由docker自动分配的,事先是没法知道的。 所以如何在不知道对方IP地址的状况下,进行通讯。</font>数据库
2.1.方法一:经过link链接2个容器 --link
docker run -d --name csjjenkins --link csjmysql jenkins sleep infinity docker exec -it csjjenkins sh env |grep MYSQL
在容器中多了不少MYSQL的环境变量 <img src="https://img2018.cnblogs.com/blog/1418970/201811/1418970-20181103181113546-1549945242.png" width="400" /> link命令将一个容器的源信息以环境变量的形式传入到另外一个容器中 缺点: 1.容器支持以环境变量的方式实现信息的获取并支持设置到其余的服务上 2.平常的环境只须要设置相关的配置文件就能够了,而不是经过环境变量 网络模式:能够实现宿主机和容器、容器和容器,容器和服务的通讯。 docker的网络模式:bridge(默认) host container null网络
2.2网络模式
因为网络名称控件的做用,容器之间的网络是隔离的。只有经过一种特殊的方法,实现网络通讯。 使用ifconfig列出宿主机当前全部的网络设备 docker0:是docker agent启动时建立的桥接设备。而bridge模式也是经过docker0来进行通讯的。 en0:宿主机的物理网卡,即以太网卡,可能有多个 lo:本地回环设备。本身ping本身的时候,用的就是lo veth*:虚拟网卡。 <img src="https://img2018.cnblogs.com/blog/1418970/201811/1418970-20181103190825024-306236514.png" width="600" /> 为了解决虚拟网卡对致使的爆炸式增加的问题,docker使用桥接模式 <img src="https://img2018.cnblogs.com/blog/1418970/201811/1418970-20181103213447602-606811614.png" width="400" /> 实现外界同容器的通讯: 网桥的特性能够有不少个接口,而且能够链接多个网络设备。外界有个去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模块来达到让用户控制网络的目的。app
对于一个操做系统的内核来讲,用户空间的东西是不能直接修改内核空间的东西的。内核空间必定要先对外暴露一个接口,由系统调用去调用它。netfilter对外暴露了5个钩子:input、output、forward、prerouting、postrouting,这5个钩子分别控制系统网络中的5个不一样阶段,控制一个数据报文流向本系统的时候5个不一样阶段。 钩子:能够修改或者篡改数据报文。 <img src="https://img2018.cnblogs.com/blog/1418970/201811/1418970-20181104100001990-515715384.png" width="600" /> 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.须要宿主机的设置,须要添加验证才能使用。ide
2.3host模式:
<img src="https://img2018.cnblogs.com/blog/1418970/201811/1418970-20181104104642540-1286430771.png" width="400" /> 使用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个容器使用同一个端口,会冲突。post
2.4container模式:
<img src="https://img2018.cnblogs.com/blog/1418970/201811/1418970-20181104114243768-1178159828.png" width="600" /> ```#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模式
<img src="https://img2018.cnblogs.com/blog/1418970/201811/1418970-20181104180553465-947308910.png" width="400" /> <img src="https://img2018.cnblogs.com/blog/1418970/201811/1418970-20181104180623000-1091444067.png" width="400" /> <img src="https://img2018.cnblogs.com/blog/1418970/201811/1418970-20181104183549266-627285344.png" width="500" />
安装VNC viewerhttps://www.realvnc.com/en/connect/download/viewer/ 使用:输入IP:port,输入密码,便可。密码默认:secret