文章目录
- 一、docker run 运行测试
- 1.数据库测试
- 2.接口测试
- 3.前端界面测试
- 二、编写dockerfile
- 1.前端
- 2.后端
- 三、推送镜像(后面k8s就从这里获取镜像了)
- 四.编写 docker-compose.yml
- 五.K8s部署
- 1.yaml文件编写及部署
- houduan-deployment.yaml
- houduan-service.yaml
- qianduan-deployment.yaml
- qianduan-service.yaml
- 2. 应用的伸缩与不停机升级
- 六.K8s容器监控
一、docker run 运行测试
小唐的项目主要是(mysql+jar+vue),然后所有项目都是打包好了的,然后现在我们用docker run 来测试一下
1.数据库测试
1.存储文件夹
mkdir -p mysql/data mysql/init mysql/conf
data 文件夹是数据存储目录 (如果mysql初始化错误 需要将文件夹内部全部删除)
init 文件夹可以放置 .sh .sql 文件 在初始化容器时会执行
conf 文件夹 放置 my.cnf 配置文件
并将我们的sql文件转移至init
在编写mysql文件之前,我们可以先使用docker镜像的方式去看看我们的sql文件是否可以正确导入至我们的容器
2.准备好对于位置
3.运行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#你数据库名
-V 本机地址:/docker-entrypoint-initdb.d #这个位置会在mysql启动时自动执行
docker exec -it <容器id> mysql -u root -p
检查是否执行成功
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
在上诉运行没有问题之后,我们去编写我们所对应的dockekfile
二、编写dockerfile
由于本应用主要有前端和后端组成,将它们分别打包为不同的镜像,并在部署时进行组合使用。这样可以更加灵活地管理和升级应用,同时也方便扩展和维护。根据上诉打包过程中的dockerfile 进行如下编写【依据我们docker run中代码进行编写,会用chatgpt的可以把docker run的代码给他,让他帮你写dockerfile】
1.前端
# 基于官方 nginx 镜像创建新的镜像
FROM nginx
# 将主机的 dist 目录映射到容器内的 /usr/share/nginx/html 目录,并且使用只读模式
VOLUME /usr/share/nginx/html
COPY dist /usr/share/nginx/html
RUN chmod -R a+r /usr/share/nginx/html
# 暴露容器的默认端口 80
EXPOSE 80
docker build -t qianduan .
docker run -d -p 80:80 --name qianduanqianduan
2.后端
# 基于mysql:8.0镜像创建新的镜像
FROM mysql:8.0
# 设置环境变量
ENV MYSQL_ROOT_PASSWORD=root
ENV MYSQL_DATABASE=bilibili
ENV MYSQL_USER=nacos
ENV MYSQL_PASSWORD=nacos
# 将sql文件夹中的文件复制到容器中的初始化脚本目录下
COPY ./mysql/init /docker-entrypoint-initdb.d/
# 将配置文件复制到容器内
COPY ./mysql/conf/my.cnf /etc/mysql/my.cnf
# 挂载数据卷
VOLUME /var/lib/mysql/
# 暴露端口
EXPOSE 3306
# 修改默认密码策略
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镜像创建新的镜像
FROM java:8u111
# 复制应用程序jar包到容器内
COPY ./hadoop.jar /usr/hadoop.jar
# 暴露端口
EXPOSE 8081
# 启动springboot应用
CMD ["java", "-jar", "/usr/hadoop.jar"]
docker build -t houduan .
docker run -d -p 3306:3306 -p 8081:8081 houduan
三、推送镜像(后面k8s就从这里获取镜像了)
【官网仓库参考】Ubantu docker学习笔记(三)docker账号push及Dockerfile优化
【私有仓库参考】Ubantu docker学习笔记(八)私有仓库
登录
Push镜像
四.编写 docker-compose.yml
这个是为了可以一键启动和终止我们的镜像
根据上诉dockfile打包的命令,我们进行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两个文件的编写,deployment指明的是我们pod里面的内容,service指明的是我们一个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
然后去运行我们的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. 应用的伸缩与不停机升级
kubectl get deployments -n app
kubectl get rs -n app
kubectl scale deployments/houduan-deployment --replicas=4-n app
也可以使用自动扩缩
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 #查看
滚动更新
kubectl rollout undo deployments/houduan-deployment
六.K8s容器监控
大家可以参考
Kubernetes集群资源监控
我是按照他来的
K8S版本:1.27.1
需要保证我们节点都启动起来
先去看我们普罗米修斯的服务器