docker和k8s实践

ops/2025/2/8 1:56:05/

Docker 和 Kubernetes 是现代云原生应用开发和运维中的两个重要技术。Docker 提供容器化技术,可以将应用及其依赖打包在容器中,而 Kubernetes 则负责容器的编排、部署、伸缩和管理。以下是 Docker 和 Kubernetes 的实践指南,涵盖基础安装、配置和常见操作。

1. Docker 实践

1.1 安装 Docker

在 Linux (例如 AlmaLinux) 上安装 Docker:

# 安装 Docker 的依赖包
sudo dnf install -y yum-utils device-mapper-persistent-data lvm2# 设置 Docker 仓库
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo# 安装 Docker Engine
sudo dnf install docker-ce docker-ce-cli containerd.io -y# 启动并设置 Docker 开机自启
sudo systemctl start docker
sudo systemctl enable docker
1.2 常用 Docker 命令
  • 查看 Docker 版本

    docker --version
    
  • 拉取镜像

    docker pull nginx:latest
    
  • 运行容器

    docker run -d --name my_nginx -p 8080:80 nginx
    
  • 查看运行中的容器

    docker ps
    
  • 停止容器

    docker stop my_nginx
    
  • 删除容器

    docker rm my_nginx
    
  • 构建 Docker 镜像
    创建 Dockerfile,例如:

    FROM nginx:latest
    COPY ./index.html /usr/share/nginx/html/index.html
    

    然后执行:

    docker build -t my_nginx_image .
    
1.3 Docker Compose

Docker Compose 是用于定义和运行多容器 Docker 应用的工具,可以通过 docker-compose.yml 文件来定义应用的服务、网络、卷等。

  • 安装 Docker Compose

    sudo dnf install docker-compose
    
  • 创建 docker-compose.yml 文件

    version: '3'
    services:web:image: nginxports:- "8080:80"
    
  • 使用 Docker Compose 启动服务

    docker-compose up -d
    
  • 查看日志

    docker-compose logs
    
  • 停止服务

    docker-compose down
    

2. Kubernetes 实践

2.1 安装 Kubernetes

在 Linux 上安装 Kubernetes(以 AlmaLinux 为例):

  • 安装 Kubernetes 依赖

    sudo dnf install -y kubelet kubeadm kubectl
    
  • 启动 Kubernetes 服务

    sudo systemctl enable --now kubelet
    
  • 初始化 Kubernetes Master 节点

    sudo kubeadm init --pod-network-cidr=10.244.0.0/16
    

    这将初始化 Kubernetes 集群,并返回一个命令,你需要在其他节点上使用该命令来加入集群。

  • 配置 kubectl 访问
    运行以下命令以使 kubectl 使用当前用户的权限访问集群:

    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
2.2 部署网络插件

Kubernetes 集群通常需要网络插件来提供 Pod 间的网络通信。常用的网络插件有 Flannel、Calico、Weave 等。

安装 Flannel 网络插件:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
2.3 Kubernetes 常用命令
  • 查看集群节点

    kubectl get nodes
    
  • 查看 Pod 状态

    kubectl get pods
    
  • 创建 Deployment
    例如创建一个 Nginx 部署:

    kubectl create deployment nginx --image=nginx
    
  • 暴露服务
    创建一个 Service 来暴露部署的应用:

    kubectl expose deployment nginx --port=80 --type=NodePort
    
  • 查看暴露的服务

    kubectl get svc
    
  • 删除资源
    删除部署的服务和 Pod:

    kubectl delete deployment nginx
    kubectl delete svc nginx
    
2.4 Pod 和容器的管理
  • 查看 Pod 日志

    kubectl logs <pod_name>
    
  • 执行 Pod 内命令

    kubectl exec -it <pod_name> -- /bin/bash
    
2.5 部署 Helm

Helm 是 Kubernetes 的包管理工具,能够简化 Kubernetes 应用的安装和管理。

  • 安装 Helm

    curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
    
  • 安装应用

    helm install my-release nginx
    
  • 查看已安装应用

    helm list
    

3. Docker 和 Kubernetes 集成实践

3.1 从 Docker 部署到 Kubernetes
  • 创建 Docker 镜像,并将其推送到 Docker Hub 或私有 Docker 仓库。

    假设已经有一个名为 myapp 的 Docker 镜像:

    docker tag myapp <your-docker-repo>/myapp:latest
    docker push <your-docker-repo>/myapp:latest
    
  • 在 Kubernetes 中创建 Deployment,通过定义一个 yaml 文件来部署应用:

    myapp-deployment.yaml

    apiVersion: apps/v1
    kind: Deployment
    metadata:name: myapp-deployment
    spec:replicas: 3selector:matchLabels:app: myapptemplate:metadata:labels:app: myappspec:containers:- name: myappimage: <your-docker-repo>/myapp:latestports:- containerPort: 8080
    

    部署到 Kubernetes 集群:

    kubectl apply -f myapp-deployment.yaml
    
  • 暴露应用

    kubectl expose deployment myapp-deployment --type=LoadBalancer --name=myapp-service
    
3.2 使用 Jenkins 自动化 CI/CD

Jenkins 可以与 Docker 和 Kubernetes 集成,实现自动化构建、测试和部署。

  • 配置 Jenkins 安装 Docker 插件,以便 Jenkins 通过 Docker 来构建镜像。
  • 创建 Jenkins pipeline,定义 CI/CD 流程,将 Docker 镜像推送到 Docker 仓库并在 Kubernetes 上自动部署。

以下是一个简化的 Jenkins Pipeline 示例:

pipeline {agent anystages {stage('Build') {steps {script {dockerImage = docker.build("myapp:${env.BUILD_ID}")}}}stage('Push') {steps {script {docker.withRegistry('https://mydockerhub.com', 'my-dockerhub-credentials') {dockerImage.push()}}}}stage('Deploy') {steps {script {sh "kubectl apply -f myapp-deployment.yaml"sh "kubectl expose deployment myapp-deployment --type=LoadBalancer --name=myapp-service"}}}}
}

通过此管道配置,Jenkins 将执行以下步骤:

  1. 构建 Docker 镜像
  2. 推送镜像到 Docker Hub
  3. 使用 kubectl 在 Kubernetes 集群中部署应用并暴露服务

4. 总结

  • Docker 提供了容器化功能,使得应用能够跨平台、跨环境地运行。
  • Kubernetes 提供容器编排功能,帮助你自动化容器的部署、扩展和管理。
  • Jenkins 可以与 Docker 和 Kubernetes 集成,实现自动化的持续集成和持续部署(CI/CD)流程。

通过结合 Docker、Kubernetes 和 Jenkins,你可以实现自动化的应用部署和更新,大大提高了开发和运维的效率。


http://www.ppmy.cn/ops/156604.html

相关文章

【华为OD机试】真题E卷-招聘(Java)

一、题目描述 题目描述: 某公司组织一场公开招聘活动,假设由于人数和场地的限制,每人每次面试的时长不等,并已经安排给定,用(S1,E1)、 (S2,E2)、 (Sj,Ej)…(Si < Ei,均为非负整数)表示每场面试的开始和结束时间。 面试采用一对一的方式,即一名面试官同时只能面试一名…

Windows图形界面(GUI)-QT-C/C++ - QT Dock Widget

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页 目录 一、概述 二、使用场景 1. 工具栏 2. 侧边栏 3. 调试窗口 三、常见样式 1. 停靠位置 2. 浮动窗口 3. 可关闭 4. 可移动 四、属性设置 1. 设置内容 2. 获取内容 3. 设置标题 …

Debian 安装 Nextcloud 使用 MariaDB 数据库 + Caddy + PHP-FPM

前言 之前通过 docker在ubuntu上安装Nextcloud&#xff0c;但是现在我使用PVE安装Debian虚拟机&#xff0c;不想通过docker安装了。下面开始折腾。 安装过程 步骤 1&#xff1a;更新系统并安装必要的软件 sudo apt update && sudo apt upgrade -y sudo apt install…

MySQL锁类型(详解)

锁的分类图&#xff0c;如下&#xff1a; 锁操作类型划分 读锁 : 也称为共享锁 、英文用S表示。针对同一份数据&#xff0c;多个事务的读操作可以同时进行而不会互相影响&#xff0c;相互不阻塞的。 写锁 : 也称为排他锁 、英文用X表示。当前写操作没有完成前&#xff0c;它会…

RK3568 opencv播放视频

文章目录 一、opencv相关视频播放类1. `cv::VideoCapture` 类主要构造方法:主要方法:2. 视频播放基本流程代码示例:3. 获取和设置视频属性4. 结合 FFmpeg 使用5. OpenCV 视频播放的局限性6. 结合 Qt 实现更高级的视频播放总结二、QT中的代码实现一、opencv相关视频播放类 在…

我问了DeepSeek和ChatGPT关于vue中包含几种watch的问题,它们是这么回答的……

前言&#xff1a;听说最近DeepSeek很火&#xff0c;带着好奇来问了关于Vue的一个问题&#xff0c;看能从什么角度思考&#xff0c;如果回答的不对&#xff0c;能不能尝试纠正&#xff0c;并帮我整理出一篇不错的文章。 第一次回答的原文如下&#xff1a; 在 Vue 中&#xff0c;…

火语言RPA--JSON提取

&#x1f6a9;【组件功能】&#xff1a;在JSON文本中提取通过JSON选择器提取指定节点内容 配置预览 配置说明 JSON数据源 支持T或# 默认FLOW输入项 提取处理的对象&#xff0c;若为空&#xff0c;以上一个组件的输出做为JSON数据源&#xff0c;支持文本或表达式输入。 JSON…

机器学习在地震预测中的应用

## 1. 机器学习与地震预测 地震是自然界的一种极端灾害&#xff0c;其发生常常给人们的生命和财产带来极大的威胁。虽然科学家们一直在寻求可靠的方法来预测地震&#xff0c;但由于地震预测本身的复杂性&#xff0c;长期以来难以取得根本性突破。然而&#xff0c;近年来&#x…