docker基本指令:java
更新軟件包node
yum -y update
安裝Docker虛擬機(centos 7)mysql
yum install -y docker
運行、重啓、關閉Docker虛擬機算法
service docker start
service docker stop
搜索鏡像sql
docker search 鏡像名稱
下載鏡像docker
docker pull 鏡像名稱
查看鏡像數據庫
docker images
刪除鏡像centos
docker rmi 鏡像名稱
運行容器tomcat
docker run 啓動參數 鏡像名稱
查看容器列表bash
docker ps -a
當咱們想要使用java環境,咱們能夠這麼操做:
搜索:
[root@VM_71_225_centos ~]# docker search java INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED docker.io docker.io/node Node.js is a JavaScript-based platform for... 5752 [OK] docker.io docker.io/tomcat Apache Tomcat is an open source implementa... 1891 [OK] docker.io docker.io/java Java is a concurrent, class-based, and obj... 1745 [OK] docker.io docker.io/openjdk OpenJDK is an open-source implementation o... 1031 [OK]
下載:
[root@VM_71_225_centos ~]# docker pull docker.io/java Using default tag: latest Trying to pull repository docker.io/library/java ... latest: Pulling from docker.io/library/java 5040bd298390: Downloading [=> ] 1.572 MB/51.36 MB
運行:
[root@VM_71_225_centos ~]# docker run -it --name myjava docker.io/java bash root@25623e12b759:/# java
-i: 以交互模式運行容器,一般與 -t 同時使用;
-t: 爲容器從新分配一個僞輸入終端,一般與 -i 同時使用;
安裝PXC集羣(在此不作mysql pxc集羣與replication集羣的方案優劣說明,在此選用pxc集羣方案[多節點備份與強聯合性]):
安裝PXC鏡像
docker pull percona/percona-xtradb-cluster
查看本地鏡像
[root@VM_71_225_centos ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/hello-world latest e38bc07ac18e 2 months ago 1.85 kB docker.io/percona/percona-xtradb-cluster latest f1439de62087 3 months ago 413 MB docker.io/java latest d23bdf5b1b1b 17 months ago 643 MB
docker.io/percona/percona-xtradb-cluster 太長,進行更名:
[root@VM_71_225_centos ~]# docker tag percona/percona-xtradb-cluster pxc [root@VM_71_225_centos ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/hello-world latest e38bc07ac18e 2 months ago 1.85 kB docker.io/percona/percona-xtradb-cluster latest f1439de62087 3 months ago 413 MB pxc latest f1439de62087 3 months ago 413 MB docker.io/java latest d23bdf5b1b1b 17 months ago 643 MB
建立net1網段:
docker network create --subnet=172.18.0.0/16 net1
建立五個數據卷(pxc沒法直接存取宿組機的數據,因此建立五個docker數據卷)
docker volume create v1
docker volume create v2
docker volume create v3
docker volume create v4
docker volume create v5
查看數據卷位置:
[root@VM_71_225_centos code]# docker inspect v1 [ { "Driver": "local", "Labels": {}, "Mountpoint": "/var/lib/docker/volumes/v1/_data", "Name": "v1", "Options": {}, "Scope": "local" } ]
建立5節點的PXC集羣
#建立第1個MySQL節點 docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -v v1:/var/lib/mysql -v backup:/data --privileged --name=node1 --net=net1 --ip 172.18.0.2 pxc
等待2分鐘後,再建立第二個節點,等待第一個節點實例化完畢後,才能開啓第二個節點實例,否則會瞬間中止
建立其餘節點:
#建立第2個MySQL節點 docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 -v v2:/var/lib/mysql -v backup:/data --privileged --name=node2 --net=net1 --ip 172.18.0.3 pxc #建立第3個MySQL節點 docker run -d -p 3308:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 -v v3:/var/lib/mysql --privileged --name=node3 --net=net1 --ip 172.18.0.4 pxc #建立第4個MySQL節點 docker run -d -p 3309:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 -v v4:/var/lib/mysql --privileged --name=node4 --net=net1 --ip 172.18.0.5 pxc #建立第5個MySQL節點 docker run -d -p 3310:3306 -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 -v v5:/var/lib/mysql -v backup:/data --privileged --name=node5 --net=net1 --ip 172.18.0.6 pxc
測試在任意mysql節點建立數據庫:
mysql -h 172.18.0.3 -uroot -pabc123456 mysql> create database test; Query OK, 1 row affected (0.03 sec)
登陸其餘節點數據庫,能看到已經進行了同步,構成簡單的mysql集羣
安裝Haproxy進行高可用與負載均衡
拉取haproxy
docker pull haproxy
編寫Haproxy配置文件
vi /home/soft/haproxy.cfg
配置文件以下:
global #工做目錄 chroot /usr/local/etc/haproxy #日誌文件,使用rsyslog服務中local5日誌設備(/var/log/local5),等級info log 127.0.0.1 local5 info #守護進程運行 daemon defaults log global mode http #日誌格式 option httplog #日誌中不記錄負載均衡的心跳檢測記錄 option dontlognull #鏈接超時(毫秒) timeout connect 5000 #客戶端超時(毫秒) timeout client 50000 #服務器超時(毫秒) timeout server 50000 #監控界面 listen admin_stats #監控界面的訪問的IP和端口 bind 0.0.0.0:8888 #訪問協議 mode http #URI相對地址 stats uri /dbs #統計報告格式 stats realm Global\ statistics #登錄賬戶信息 stats auth admin:abc123456 #數據庫負載均衡 listen proxy-mysql #訪問的IP和端口 bind 0.0.0.0:3306 #網絡協議 mode tcp #負載均衡算法(輪詢算法) #輪詢算法:roundrobin #權重算法:static-rr #最少鏈接算法:leastconn #請求源IP算法:source balance roundrobin #日誌格式 option tcplog #在MySQL中建立一個沒有權限的haproxy用戶,密碼爲空。Haproxy使用這個帳戶對MySQL數據庫心跳檢測 option mysql-check user haproxy server MySQL_1 172.18.0.2:3306 check weight 1 maxconn 2000 server MySQL_2 172.18.0.3:3306 check weight 1 maxconn 2000 server MySQL_3 172.18.0.4:3306 check weight 1 maxconn 2000 server MySQL_4 172.18.0.5:3306 check weight 1 maxconn 2000 server MySQL_5 172.18.0.6:3306 check weight 1 maxconn 2000 #使用keepalive檢測死鏈 option tcpka
建立第1個Haproxy負載均衡服務器
docker run -it -d -p 4001:8888 -p 4002:3306 -v /home/soft/haproxy:/usr/local/etc/haproxy --name h1 --privileged --net=net1 --ip 172.18.0.7 haproxy
進入h1容器,啓動Haproxy
docker exec -it h1 bash
haproxy -f /usr/local/etc/haproxy/haproxy.cfg
查看是否啓動成功:
訪問http://ip:4001/dbs
安裝keepalive實現雙擊熱備