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