【實戰演練】kubernetes&docker-docker安裝與使用

0、docker介紹

天下大勢,分久必合,合久比分。

從前電腦有大型機、小型機(高性能),後面又出現了x86服務器與個人PC電腦(大型機、小型機性能過剩)。然後又發覺單機不夠用(x86服務器單機性能不足),於是又需要多臺x86服務器做負載均衡或者集羣的技術。

然後又發覺有些x86服務器上面只跑了1~2個應用,性能過剩,資源閒置(部分x86服務器單機性能過剩),於是又出現了虛擬化,將單臺物理機虛擬化爲多臺獨立的虛擬機。

然後有的虛擬機性能不夠用,又需要做負載均衡與集羣(部分虛擬機性能不足),但是也有些虛擬機性能過盛......於是,就出現了今天的主角,Docker了。


以往我們需要安裝個apache與mysql,來搭建個網站服務,我們需要1檯筆記本或者x86服務器,安裝個windows或者linux系統再來部署應用。

而當我們使用的虛擬機,也需要物理機安裝Hypervisor,再在虛擬機上面安裝windows或者linux系統再來部署應用。

反正部署任何應用軟件,都需要離不開需要服務器+操作系統。

而運行操作系統,本來就是有系統開銷的,所以爲了部署一個應用程序,除了應用程序本來需要的CPU、內存之外,

還要分配資源去運行操作系統,帶來無謂的開銷,是非常浪費的。


那麼有沒有辦法,直接操作系統都不給,然後直接就安裝應用呢?Docker就可以做到。

Docker可以在linux操作系統之上,直接通過docker鏡像,來部署應用,例如一個已經做好的mysql的docker鏡像,可以直接從鏡像倉庫拉取鏡像,然後一鍵部署docker實例。然後系統就會自動將一部分CPU、內存用於運行該docker實例,直接就能夠提供一個能夠使用的mysql了。

在同一臺虛擬機裏面,還可以繼續創建多個獨立的mysql實例,都可以正常對外提供服務,並且實例之間是互相隔離的。又或者可以繼續部署其他應用(如apahce/tomcat)的實例到同一臺虛擬機裏面。


實驗環境:CentOS7


1、環境準備:

1.1關閉防火牆

systemctl stop firewalld
systemctl disable firewalld

1.2關閉selinux

setenforce 0
vi /etc/selinux/config
SELINUX=disabled

1.3配置yum源與安裝擴展yum

使用阿里雲的yum源,配置略,參考【實踐演練】Linux操作系統04-配置yum源https://blog.51cto.com/14423403/2416049


2、安裝docker

yum -y install docker


3、開啓docker

service docker start
ps -ef | grep docker

  #查看是否啓動docker

至此,docker單機安裝完成,需要部署應用實例,需要先拉取對應的docker鏡像。


4、拉取鏡像

docker pull mysql

#拉取mysql鏡像

docker pull tomcat

#拉取tomcat鏡像

docker pull mysql:5.7.19

#拉取mysql5.7.19版本鏡像

拉取由於直接訪問國外源的問題,所以拉取的時間會很長,甚至可能拉取不到提示timeout,可以自行添加國內源進行拉取,速度會更快。

001.png

訪問阿里雲的鏈接,可以創建免費的docker鏡像加速器。(需要自行註冊賬戶,然後啓用,會有一串token碼)

vi /etc/docker/daemon.json
{ 
"registry-mirrors": ["https://XXXXXXXX.mirror.aliyuncs.com"] 
}

XXXXXXXX填寫自己實際的token,然後需要運行如下命令重新加載生效。

systemctl daemon-reload
systemctl restart docker

重新拉取,發現速度明顯提升很多。

002.png


5、其他docker命令

docker images

 #查看已經拉取的鏡像

003.png

docker version

#查看docker版本


6、創建容器

1)創建mysql容器

docker run --name mysql01 -e MYSQL_ROOT_PASSWORD=123456 -d -p 3306:3306 mysql

#運行mysql容器,注意創建容器後是否有warning ipv4 forwarding,如有,請轉至故障排除1

docker run --name mysql01 -e MYSQL_ROOT_PASSWORD=123456 -d -p 3306:3306 mysql:5.7.19

#運行mysql5.7.19容器,注意,前面的3306是對外暴露提供訪問的端口,後面的3306是docker實例裏面對內的端口

2)創建tomcat容器

#docker run --name tomcat1 -d -p 8080:8080 --link mysql01:mysql tomcat
docker run --name tomcat1 -d -p 8080:8080 tomcat

#測試,可以打開網頁,訪問hosyt的IP地址(非tomcat容器的ip),http://主機IP:8080/

#也可以將test.war包拷貝進入容器,然後放入webapps/文件夾之下,然後進入/usr/local/tomcat/bin/,運行./catalina.sh run,然後就會將tomcat啓動起來了。

#測試,打開瀏覽器https://hostIP:8080/test,可以看到返回的頁面。

#注意,:前面的端口才是docker的真是訪問端口,例如mysql改爲306:3306,後面端口是docker容器裏面mysql使用的端口,306則是在宿主機給此docker容器佔用的端口。


7、查看容器

docker ps -a

能夠看到容器的ID與容器名,以及運行狀態(up、exist等)

004.png

ps -ef | grep docker


8、進入容器

docker exec -ti tomcat1 bash
docker exec -ti mysql01 bash

退出容器按exit,以mysql爲例,進入容器後進行操作測試,直接可以登錄數據庫進行訪問。

mysql -u root -p

然後我們授予root用戶可以遠程訪問試試

grant all on *.* to 'root'@'%' identified by '1qaz!QAZ';
flush privileges;

隨便找一臺網絡可達的機器,訪問剛纔的docker數據庫測試一下。

mysql -u root -h 10.1.30.22 -P 3306 -p

#h爲指定需要訪問的機器IP地址,-P大寫P爲指定訪問的端口,由於測試機器(10.1.30.22)本身是沒有安裝mysql的,所以如果上述命令能夠正常登錄到這臺機器的mysql,肯定就是docker建的mysql實例了。剩下就是mysql數據庫的常規操作了。

005.png


9、重啓或者停止容器

docker stop tomcat1
docker stop mysql01
docker restart tomcat1
docker restart mysql01


10、查看容器的私網IP,vim等

進入容器後,是沒有ifconfig,vim等命令的,需要每個容器單獨安裝。

apt-get update
apt install net-tools   #安裝ifconfig
apt install iputils-ping  #安裝ping
apt install vim#安裝vim


11、主機往容器拷貝文件

docker cp **.sql mysql01:/root/

#將**.sql文件拷貝到mysql01容器的root目錄

docker cp ROOT/ tomcat1:/root/

#將ROOT/目錄及裏面的內容全部拷貝到tomcat1容器的root/目錄下。


12、刪除容器

docker rm tomcat1
docker rm mysql01


13、排錯

14.1運行docker時,顯示WARNING: IPv4 forwarding is disabled. Networking will not work.

解決辦法:vim  /usr/lib/sysctl.d/00-system.conf

增加net.ipv4.ip_forward=1

然後systemctl restart network


14.2mysql的docker運行後,遠程訪問不到

grant all privileges on *.* to root@"%" identified by "1qaz!QAZ";
flush privileges;

mysql默認只能本地登錄,如需遠程登錄,需要放開權限。


14.3mysql8.0.15後,toad等工具遠程報錯 Authentication method 'caching_sha2_password' not supported by any of the available plugins.

如果拉取鏡像的時候,沒有指定版本,那麼mysql可能拉取了最新的mysql8鏡像,因爲mysql8修改了默認的加密方式,所以toad與navicat for mysql可能鏈接不上,可以這樣查看。

select Host,User,plugin from mysql.user;

如要修改mysql的加密方式,可以修改配置文件

vim /etc/mysql/my.cnf

然後添加

default_authentication_plugin=mysql_native_password

還需要

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456'; 
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

可以用這個命令再次驗證

select Host,User,plugin from mysql.user;


14.4 docker裏面安裝JDK17

請參考tomcat+mysql搭建網站,但是alternatives運行要變爲update-alternatives,其他命令一樣

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章