一捞魁、Docker 簡介
Docker 是一種開源的容器化平臺仅父,允許開發(fā)人員將應用程序和所有其依賴項打包成輕量級、可移植的容器羊始,以便在任何地方運行旱幼。Docker 的優(yōu)勢和劣勢分析如下:
優(yōu)勢:
輕量級:Docker 容器僅包含應用程序及其依賴項,因此它們非常輕量級突委,可以非嘲芈保快地啟動和運行。
可移植性:Docker 容器可以在任何支持 Docker 的操作系統(tǒng)上運行匀油,這使得 Docker 容器可以輕松地在不同的環(huán)境中部署和運行闷旧。
容器化應用程序:Docker 可以將應用程序及其依賴項打包成容器,這使得應用程序更加可移植钧唐、可復用和可移植忙灼。
自動化:Docker 提供了一組工具,可以幫助開發(fā)人員自動化容器的部署钝侠、管理和監(jiān)控该园,這使得容器的生命周期管理更加簡單和可靠。
高可用性:Docker 容器可以在多個主機上部署和運行帅韧,并且可以自動進行故障轉(zhuǎn)移和負載均衡里初,從而提高了應用程序的高可用性。
劣勢:
初始學習曲線較高:Docker 是一個新興的技術(shù)忽舟,因此對于初學者來說可能存在一些學習曲線双妨。
需要一定的配置和管理:Docker 容器需要一些配置和管理淮阐,這可能需要一些經(jīng)驗和技能。
需要一定的開銷:Docker 容器是輕量級的刁品,但在使用中也可能會存在一些開銷泣特,特別是在部署和運行大型應用程序時。
對 Linux 的依存度較高:Docker 主要支持 Linux 系統(tǒng)挑随,因此在 Windows 或其他操作系統(tǒng)上部署和使用 Docker 可能需要更多的工作状您。
存在一些安全問題:由于 Docker 容器是輕量級的,因此它們很容易受到攻擊兜挨,因此在使用 Docker 時需要格外小心安全問題膏孟。
二、Docker 與Kubernetes的區(qū)別
Docker 和 Kubernetes(簡稱 K8s) 都是容器技術(shù)的代表拌汇,但它們在應用場景柒桑、實現(xiàn)方式和優(yōu)缺點等方面存在一些區(qū)別。
應用場景:
Docker 主要用于部署噪舀、運行和交付應用程序魁淳,它可以獨立運行、打包應用程序和依賴項傅联,并提供便捷的容器編排工具,例如 Docker Compose疚察、Docker Swarm 等蒸走。
Kubernetes 則主要用于容器集群的管理,例如容器的部署貌嫡、擴展比驻、伸縮和管理等,它可以支持多個容器編排工具岛抄,如 Docker Compose别惦、Kubernetes Deployment、Kubernetes Service 等夫椭。
實現(xiàn)方式:
Docker 是通過鏡像和容器實現(xiàn)的掸掸,其中鏡像是應用程序和依賴項的打包,容器則是應用程序的運行環(huán)境蹭秋。Kubernetes 則是通過 Pod扰付、Service、Deployment仁讨、ReplicaSet 等概念實現(xiàn)的羽莺,其中 Pod 是容器的集合,Service 是容器間通信的工具洞豁,Deployment 是容器部署工具盐固,ReplicaSet 是容器副本的編排工具荒给。
優(yōu)缺點:
Docker 的優(yōu)點包括易于使用、可移植性強刁卜、靈活性高志电、管理簡單等。缺點包括容器獨立性強长酗、難以擴展溪北、缺乏集群管理等功能。
Kubernetes 的優(yōu)點包括易于擴展夺脾、集群管理功能強大之拨、可靠性高、靈活性強等咧叭。缺點包括需要一些技術(shù)背景蚀乔、上手難度較大等。
總的來說菲茬,Docker 和 Kubernetes 都是容器技術(shù)的代表吉挣,它們在應用場景、實現(xiàn)方式和優(yōu)缺點等方面存在一些不同婉弹,用戶可以根據(jù)自己的需求選擇適合自己的工具睬魂。
三、Docker 的安裝
本教程以Mac環(huán)境為例安裝Docker镀赌。
1.下載Docker Desktop
通過https://docs.docker.com/desktop/release-notes/氯哮,下載相應的的版本。這里要注意一個問題商佛,如果后續(xù)要啟用Kubernetes喉钢,需要下載對應的版本,保證二者匹配良姆。
2.docker環(huán)境檢查:
docker --version
docker-compose --version
docker-machine --version
可以使用以上三個命令檢查環(huán)境肠虽。
- 嘗試運行nginx
docker run -d -p 80:80 --name webserver nginx
可以看到Docker通過pull自動拉去nginx鏡像,完成后在Docker Desktop中就能看到玛追。
- Docker Desktop 開啟 Kubernetes
(1)為 Docker daemon 配置鏡像加速
參考阿里云鏡像服務 或中科大鏡像加速地址https://docker.mirrors.ustc.edu.cn
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"features": {
"buildkit": true
},
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn"
]
}
配置完成后點擊右下角的Apply&restart税课。
(2)下載kubernetes
git clone <u>https://github.com/AliyunContainerService/k8s-for-docker-desktop.git</u>
切換到對應的分支,需要與Docker Desktop支持的kubernetes版本相一致痊剖。
git checkout v1.25.2
(3)執(zhí)行腳本
進入下載的目:cd k8s-for-docker-desktop
執(zhí)行:./load_images.sh
(4)啟動kubernetes
(5)使用Kubectl連接k8s
查看kubernetes狀態(tài):kubectl cluster-info
查看kubernetes運行的應用:kubectl get nodes:
查看kubernetes運行的服務:kubectl get pods
(6)配置Kubernetes 控制臺
cd k8s-for-docker-desktop
部署 Kubernetes dashboard:kubectl create -f kubernetes-dashboard.yaml
檢查 kubernetes-dashboard應用狀態(tài):kubectl get pod -n kubernetes-dashboard
開啟 API Server 訪問代理:kubectl proxy
訪問 Kubernetes dashboard:
配置控制臺訪問令牌:
kubectl apply -f kube-system-default.yaml
對于Mac環(huán)境:
TOKEN=1=="token:"{print $2}')
kubectl config set-credentials docker-desktop --token="${TOKEN}"
echo $TOKEN
登錄dashboard:
選擇令牌伯复,輸入上面控制臺輸出的內(nèi)容。
四邢笙、安裝和啟動mysql
1.查詢 mysql最新的鏡像:docker search mysql
2.拉取最新的mysql版本:docker pull mysql:latest
3.創(chuàng)建容器內(nèi)在本地的映射文件夾
mkdir -p /xxxe/docker-mysql/data /xxx/docker-mysql/logs /xxx/docker-mysql/conf
初始化mysql的配置文件*.cnf啸如,在 /xxx/docker-mysql/conf下
touch /xxx/docker-mysql/conf//my.cnf
4.創(chuàng)建docker容器并啟動,將數(shù)據(jù),日志,配置文件映射到本機:
docker run -p 3306:3306 --name mysql -v /xxx/docker-mysql/conf:/etc/mysql/conf.d -v /xxx/docker-mysql/logs:/var/log/mysql -v /xxx/docker-mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:latest
- 進入mysql容器
輸入:docker exec -it mysql /bin/bash
- 登錄mysql并設(shè)置權(quán)限
(1)輸入:mysql -uroot -p 氮惯,然后再輸入密碼即可
選擇數(shù)據(jù)庫:
show databases;
use mysql;
(2)查看用戶連接情況
select host, user, plugin, authentication_string, password_expired from user;
(3)修改密碼和權(quán)限
如果對應的host是localhost就需要將其改為 % 叮雳,不然會遠程連接失敗想暗。
修改密碼認證方式:ALTER USER root@'%' IDENTIFIED WITH mysql_native_password BY '123456';
ALTER USER root@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
由于mysql中root執(zhí)行綁定在了localhost,因此需要對root進行授權(quán):grant all on . to root@'%';// 允許所有終端訪問帘不。
刷新權(quán)限:FLUSH PRIVILEGES;
(4)遠程連接mysql
通過以上設(shè)置说莫,我們可以使用navicat或其他數(shù)據(jù)庫管理工具遠程連接mysql。
五寞焙、安裝和啟動mysql
1.創(chuàng)建掛載目錄以及獲取 redis.conf 配置文件
(1)創(chuàng)建掛載目錄
mkdir -p /xxx/docker-redis
mkdir -p /xxx/docker-redis/data
- 進入掛載目錄
cd /xxx/docker-redis
- 下載 redis.conf 文件
http://download.redis.io/redis-stable/redis.conf
- 更改 redis.conf 文件的權(quán)限
chmod 777 redis.conf
修改默認的 redis.conf 配置文件
vi redis.conf
#這行要注釋掉储狭,解除本地連接限制
bind 127.0.0.1 --> 需要注釋掉
# 默認 yes,如果設(shè)置為 yes捣郊,則只允許在本機的回環(huán)連接辽狈,其他機器無法連接。
protected-mode no
# 默認 no 為不守護進程模式呛牲,docker 部署不需要改為 yes刮萌,docker run -d 本身就是后臺啟動,不然會沖突
daemonize no
# 設(shè)置密碼
requirepass 123456
# 持久化
appendonly yes
5.docker run 運行 redis 鏡像
docker run --name redis -p 6380:6379 --privileged=true -v /xxx/docker-redis/redis.conf:/etc/redis/redis.conf -v /xxx/docker-redis/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes
六娘扩、SpringBoot項目Docker打包部署
關(guān)于SpringBoot項目的搭建着茸,之前的文章已經(jīng)做過介紹,這里默認已經(jīng)具備完整的SpringBoot的項目琐旁,且使用到了redis和mysql涮阔,并且能夠在本地環(huán)境通過java -jar命令啟動。
1.Docker查看容器的ip地址
查看ip地址的目的在于灰殴,通常我們會在SpringBoot項目的yml配置文件中配置redis敬特、mysql等參數(shù),因此需要獲取到它們在容器內(nèi)的ip地址验懊。
輸入:docker inspect xxx| grep IPAddress
xxx為redis或mysql的容器名稱擅羞。
2.springboot項目docker打包部署
(1)pom添加docker依賴尸变。
(2)通過idea的maven工具打出jar包或war包义图。
(3)制作Dockerfile
在項目目錄下創(chuàng)建Dockerfile文件,文件內(nèi)容為:
FROM openjdk:8
EXPOSE 8081
VOLUME /tmp
ADD springbootdocker-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
(4)把打好的jar包移動到和Dockerfile同級目錄
(5)制作鏡像
下載jdk鏡像:docker pull openjdk:8
編譯:docker build -f Dockerfile -t app:1.0 .
執(zhí)行完畢后直接就在docker images中看到app這個SpringBoot的鏡像召烂。
(5)創(chuàng)建容器并啟動
docker run --name app -p 8081:8081 -d app:2.0碱工,也可以在Docker Desktop客戶端啟動。
運行或停止容器:
docker start app
docker stop app
(6)查看日志
訪問SpringBoot項目的服務奏夫,如需查看接口日志可以通過如下方式:
docker logs -f -t --tail 50 app
至此怕篷,Mac環(huán)境SpringBoot項目Docker部署就完成了,非常詳細酗昼,供大家參考廊谓。