应用打包部署k8s (包括dockerfile打包及仓库上传)

文章目录

  • 一、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.准备好对于位置
应用打包部署k8s (包括dockerfile打包及仓库上传)_第1张图片

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

检查是否执行成功

应用打包部署k8s (包括dockerfile打包及仓库上传)_第2张图片

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

应用打包部署k8s (包括dockerfile打包及仓库上传)_第3张图片
应用打包部署k8s (包括dockerfile打包及仓库上传)_第4张图片

3.前端界面测试

docker run  -d  -p 80:80 \
--name nginx \
-v /home/xiaotang0711/Desktop/docker/dist:/usr/share/nginx/html:ro \
nginx

应用打包部署k8s (包括dockerfile打包及仓库上传)_第5张图片

在上诉运行没有问题之后,我们去编写我们所对应的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

应用打包部署k8s (包括dockerfile打包及仓库上传)_第6张图片
应用打包部署k8s (包括dockerfile打包及仓库上传)_第7张图片

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 (包括dockerfile打包及仓库上传)_第8张图片

三、推送镜像(后面k8s就从这里获取镜像了)

【官网仓库参考】Ubantu docker学习笔记(三)docker账号push及Dockerfile优化
【私有仓库参考】Ubantu docker学习笔记(八)私有仓库

登录
应用打包部署k8s (包括dockerfile打包及仓库上传)_第9张图片

Push镜像

应用打包部署k8s (包括dockerfile打包及仓库上传)_第10张图片
应用打包部署k8s (包括dockerfile打包及仓库上传)_第11张图片

四.编写 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 (包括dockerfile打包及仓库上传)_第12张图片

五.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

应用打包部署k8s (包括dockerfile打包及仓库上传)_第13张图片

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 (包括dockerfile打包及仓库上传)_第14张图片

六.K8s容器监控

大家可以参考
Kubernetes集群资源监控
我是按照他来的
K8S版本:1.27.1

需要保证我们节点都启动起来
应用打包部署k8s (包括dockerfile打包及仓库上传)_第15张图片
先去看我们普罗米修斯的服务器
应用打包部署k8s (包括dockerfile打包及仓库上传)_第16张图片

应用打包部署k8s (包括dockerfile打包及仓库上传)_第17张图片

你可能感兴趣的:(Docker,kubernetes,容器,云原生,docker,学习,prometheus)