一、docker run 運(yùn)行測試
小唐的項(xiàng)目主要是(mysql+jar+vue),然后所有項(xiàng)目都是打包好了的,然后現(xiàn)在我們用docker run 來測試一下
1.數(shù)據(jù)庫測試
1.存儲(chǔ)文件夾
mkdir -p mysql/data mysql/init mysql/conf
data 文件夾是數(shù)據(jù)存儲(chǔ)目錄 (如果mysql初始化錯(cuò)誤 需要將文件夾內(nèi)部全部刪除)
init 文件夾可以放置 .sh .sql 文件 在初始化容器時(shí)會(huì)執(zhí)行
conf 文件夾 放置 my.cnf 配置文件
并將我們的sql文件轉(zhuǎn)移至init
在編寫mysql文件之前,我們可以先使用docker鏡像的方式去看看我們的sql文件是否可以正確導(dǎo)入至我們的容器
2.準(zhǔn)備好對于位置
3.運(yùn)行docker中鏡像
docker run -d --name mysql-container \
-e MYSQL_ROOT_PASSWORD=123456 \
-e MYSQL_DATABASE=bilibili \
-v /home/xiaotang0711/Desktop/docker/sql:/docker-entrypoint-initdb.d \
mysql:8.0
MYSQL_DATABASE#你數(shù)據(jù)庫名
-V 本機(jī)地址:/docker-entrypoint-initdb.d #這個(gè)位置會(huì)在mysql啟動(dòng)時(shí)自動(dòng)執(zhí)行
docker exec -it <容器id> mysql -u root -p
檢查是否執(zhí)行成功
2.接口測試
docker run -d -p 8081:8081 \
-v /home/xiaotang0711/Desktop/docker/hadoop.jar:/usr/hadoop.jar \
--name springboot java:8u111 \
java -jar /usr/hadoop.jar
3.前端界面測試
docker run -d -p 80:80 \
--name nginx \
-v /home/xiaotang0711/Desktop/docker/dist:/usr/share/nginx/html:ro \
nginx
在上訴運(yùn)行沒有問題之后,我們?nèi)ゾ帉懳覀兯鶎?yīng)的dockekfile
二、編寫dockerfile
由于本應(yīng)用主要有前端和后端組成,將它們分別打包為不同的鏡像,并在部署時(shí)進(jìn)行組合使用。這樣可以更加靈活地管理和升級(jí)應(yīng)用,同時(shí)也方便擴(kuò)展和維護(hù)。根據(jù)上訴打包過程中的dockerfile 進(jìn)行如下編寫【依據(jù)我們docker run中代碼進(jìn)行編寫,會(huì)用chatgpt的可以把docker run的代碼給他,讓他幫你寫dockerfile】
1.前端
# 基于官方 nginx 鏡像創(chuàng)建新的鏡像
FROM nginx
# 將主機(jī)的 dist 目錄映射到容器內(nèi)的 /usr/share/nginx/html 目錄,并且使用只讀模式
VOLUME /usr/share/nginx/html
COPY dist /usr/share/nginx/html
RUN chmod -R a+r /usr/share/nginx/html
# 暴露容器的默認(rèn)端口 80
EXPOSE 80
docker build -t qianduan .
docker run -d -p 80:80 --name qianduanqianduan
2.后端
# 基于mysql:8.0鏡像創(chuàng)建新的鏡像
FROM mysql:8.0
# 設(shè)置環(huán)境變量
ENV MYSQL_ROOT_PASSWORD=root
ENV MYSQL_DATABASE=bilibili
ENV MYSQL_USER=nacos
ENV MYSQL_PASSWORD=nacos
# 將sql文件夾中的文件復(fù)制到容器中的初始化腳本目錄下
COPY ./mysql/init /docker-entrypoint-initdb.d/
# 將配置文件復(fù)制到容器內(nèi)
COPY ./mysql/conf/my.cnf /etc/mysql/my.cnf
# 掛載數(shù)據(jù)卷
VOLUME /var/lib/mysql/
# 暴露端口
EXPOSE 3306
# 修改默認(rèn)密碼策略
CMD ["mysqld", "--default-authentication-plugin=mysql_native_password", "--character-set-server=utf8mb4", "--collation-server=utf8mb4_general_ci", "--explicit_defaults_for_timestamp=true", "--lower_case_table_names=1"]
# 基于java:8u111鏡像創(chuàng)建新的鏡像
FROM java:8u111
# 復(fù)制應(yīng)用程序jar包到容器內(nèi)
COPY ./hadoop.jar /usr/hadoop.jar
# 暴露端口
EXPOSE 8081
# 啟動(dòng)springboot應(yīng)用
CMD ["java", "-jar", "/usr/hadoop.jar"]
docker build -t houduan .
docker run -d -p 3306:3306 -p 8081:8081 houduan
三、推送鏡像(后面k8s就從這里獲取鏡像了)
【官網(wǎng)倉庫參考】Ubantu docker學(xué)習(xí)筆記(三)docker賬號(hào)push及Dockerfile優(yōu)化
【私有倉庫參考】Ubantu docker學(xué)習(xí)筆記(八)私有倉庫
登錄
Push鏡像
四.編寫 docker-compose.yml
這個(gè)是為了可以一鍵啟動(dòng)和終止我們的鏡像
根據(jù)上訴dockfile打包的命令,我們進(jìn)行dockers-compose.yml的編寫【也可以用chatgpt來寫】,不用部署K8S的做到這一步就ok了
version: '3'
services:
houduan:
image: xiaotang0711/houduan
ports:
- '3306:3306'
- '8081:8081'
qianduan:
image: xiaotang0711/qianduan
ports:
- '80:80'
container_name: qianduan
docker compose up -d
docker compose down
五.K8s部署
1.yaml文件編寫及部署
主要分為service和deployment兩個(gè)文件的編寫,deployment指明的是我們pod里面的內(nèi)容,service指明的是我們一個(gè)pod集合的類容【包括總的端口和ip地址】
houduan-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: houduan-deployment
spec:
selector:
matchLabels:
app: houduan
replicas: 1
template:
metadata:
labels:
app: houduan
spec:
containers:
- name: houduan
image: xiaotang0711/houduan
ports:
- containerPort: 3306
- containerPort: 8081
houduan-service.yaml
apiVersion: v1
kind: Service
metadata:
name: houduan-service
spec:
selector:
app: houduan
ports:
- name: mysql
port: 3306
targetPort: 3306
- name: http
port: 8081
targetPort: 8081
qianduan-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: qianduan-deployment
spec:
selector:
matchLabels:
app: qianduan
replicas: 1
template:
metadata:
labels:
app: qianduan
spec:
containers:
- name: qianduan
image: xiaotang0711/qianduan
ports:
- containerPort: 80
qianduan-service.yaml
apiVersion: v1
kind: Service
metadata:
name: qianduan-service
spec:
selector:
app: qianduan
ports:
- name: http
port: 80
targetPort: 80
然后去運(yùn)行我們的ymal文件就可以啦
kubectl create namespace app
kubectl apply -f houduan-deployment.yaml
kubectl apply -f houduan-service.yaml
kubectl apply -f qianduan-deployment.yaml
kubectl apply -f qianduan-service.yaml
kubectl get pods -n app
kubectl get services -n app
2. 應(yīng)用的伸縮與不停機(jī)升級(jí)
kubectl get deployments -n app
kubectl get rs -n app
kubectl scale deployments/houduan-deployment --replicas=4-n app
也可以使用自動(dòng)擴(kuò)縮
autoscaler.yaml
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
name: example-autoscaler
namespace: houduan
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: houduan-deployment
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
targetAverageUtilization: 50
kubectl apply -f autoscaler.yaml
kubectl get hpa -n app #查看
滾動(dòng)更新
kubectl rollout undo deployments/houduan-deployment
六.K8s容器監(jiān)控
大家可以參考
Kubernetes集群資源監(jiān)控
我是按照他來的
K8S版本:1.27.1
需要保證我們節(jié)點(diǎn)都啟動(dòng)起來
先去看我們普羅米修斯的服務(wù)器文章來源:http://www.zghlxwxcb.cn/news/detail-506365.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-506365.html
到了這里,關(guān)于應(yīng)用打包部署k8s (包括dockerfile打包及倉庫上傳)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!