docker和k8s实践

news2025/1/3 10:46:01

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: nginx
        ports:
          - "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: 3
      selector:
        matchLabels:
          app: myapp
      template:
        metadata:
          labels:
            app: myapp
        spec:
          containers:
          - name: myapp
            image: <your-docker-repo>/myapp:latest
            ports:
            - 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 any
    stages {
        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.coloradmin.cn/o/2268506.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机网络 (8)物理层的传输方式

一、串行传输与并行传输 串行传输 定义&#xff1a;串行传输是一种数据传输方式&#xff0c;指的是逐位地按照顺序传输数据。在串行传输中&#xff0c;数据位逐个按照一定的顺序进行传输&#xff0c;可以通过单条线路或信道进行。特点&#xff1a; 逐位传输&#xff1a;串行传输…

LabVIEW 中 NI Vision 模块的IMAQ Create VI

IMAQ Create VI 是 LabVIEW 中 NI Vision 模块&#xff08;NI Vision Development Module&#xff09;的一个常用 VI&#xff0c;用于创建一个图像变量。该图像变量可以存储和操作图像数据&#xff0c;是图像处理任务的基础。 ​ 通过以上操作&#xff0c;IMAQ Create VI 是构建…

第 29 章 - ES 源码篇 - 网络 IO 模型及其实现概述

前言 本文介绍了 ES 使用的网络模型&#xff0c;并介绍 transport&#xff0c;http 接收、响应请求的代码入口。 网络 IO 模型 Node 在初始化的时候&#xff0c;会创建网络模块。网络模块会加载 Netty4Plugin plugin。 而后由 Netty4Plugin 创建对应的 transports&#xff0…

【Spring MVC 核心机制】核心组件和工作流程解析

在 Web 应用开发中&#xff0c;处理用户请求的逻辑常常会涉及到路径匹配、请求分发、视图渲染等多个环节。Spring MVC 作为一款强大的 Web 框架&#xff0c;将这些复杂的操作高度抽象化&#xff0c;通过组件协作简化了开发者的工作。 无论是处理表单请求、生成动态页面&#x…

模型选择+过拟合欠拟合

训练误差和泛化误差 训练误差&#xff1a;模型在训练数据上的误差 泛化误差&#xff1a;模型在新数据上的误差 验证数据集&#xff1a;一个用来评估模型好坏的数据集 例如拿出50%的数据作为训练 测试数据集&#xff1a;只能用一次 K则交叉验证 在没有足够数据时使用 算法…

计算机网络-L2TP Over IPSec基础实验

一、概述 上次我们进行了标准L2TP的配置&#xff0c;但是在最后我们在进行业务流量访问时看到流量是没有进行加密的&#xff0c;这就导致可能得安全风险&#xff0c;所以这里其实可以退像GRE那样调用IPSec框架来进行加密保护。 拓扑 数据不加密 现在需要配置IPSec&#xff0c;然…

fiscoBcos一键部署webase平台

一键部署webase平台 一键部署可以在同机快速搭建WeBASE管理台环境&#xff0c;方便用户快速体验WeBASE管理平台 一键部署会搭建&#xff1a;节点&#xff08;FISCO-BCOS 2.0&#xff09;、管理平台&#xff08;WeBASE-Web&#xff09;、节点管理子系统&#xff08;WeBASE-Nod…

论文分享 | PromptFuzz:用于模糊测试驱动程序生成的提示模糊测试

大语言模型拥有的强大能力可以用来辅助多种工作&#xff0c;但如何有效的辅助仍然需要人的精巧设计。分享一篇发表于2024年CCS会议的论文PromptFuzz&#xff0c;它利用模型提示生成模糊测试驱动代码&#xff0c;并将代码片段嵌入到LLVM框架中执行模糊测试。 论文摘要 制作高质…

实用技巧:关于 AD修改原理图库如何同步更新到有原理图 的解决方法

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/144738332 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

QT集成IntelRealSense双目摄像头3,3D显示

前两篇文章&#xff0c;介绍了如何继承intel realsense相机和opengl。 这里介绍如何给深度数据和色彩数据一块显示到opengl里面。 首先&#xff0c;需要了解深度数据和彩色数据是如何存储的。先说彩色数据。彩色图像一般都是RGB&#xff0c;也就是每个像素有三个字节&#xf…

PHP框架+gatewayworker实现在线1对1聊天--gatewayworker说明(2)

文章目录 gatewayworker使用说明onConnect 说明 gatewayworker使用说明 gatewayworker里只需要使用Applications\YourApp下的Events.php文件。 对文件的代码进行一下改造&#xff0c;如下&#xff0c;我们只需要用到onConnect方法&#xff0c;写法固定&#xff0c;其他方法都…

未授权访问漏洞集合

Redis未授权访问漏洞 进入vulhub目录启动靶机 进⼊⽬录&#xff1a;cd /vulhub-master/redis/4-unacc 启动&#xff1a;docker-compose up -d 检查&#xff1a;docker ps 在Kali上安装redis程序 #安装redis apt-get install redis #redis链接 redis-cli -h 124.221.58.83 -…

环,域,体,整区,理想,极大理想,

环&#xff1a; 定义&#xff1a; 加法交换群 乘法半群 分配律 域的定义&#xff1a; 加法交换群 乘法群&#xff08;去掉0元是交换群&#xff09; 分配律 Eg:比如整数集合不是域&#xff0c;因为对于乘法来说&#xff0c;去掉0后没有单位元了&#xff0c;但是是环 Eg…

Idea创建JDK17的maven项目失败

Idea创建JDK17的maven项目失败 Error occurred during initialization of VM Could not find agent library instrument on the library path, with error: Can’t find dependent libraries Possible solution: Check your maven runner VM options. Open Maven Runner setti…

基于MPPT算法的光伏并网发电系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于MPPT算法的光伏并网发电系统simulink建模与仿真&#xff0c;包括PV光伏发电模块&#xff0c;并网电路&#xff0c;MPPT&#xff0c;PWM等模块。 2.系统仿真结果 3.核心程…

NAT 技术如何解决 IP 地址短缺问题?

NAT 技术如何解决 IP 地址短缺问题&#xff1f; 前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;神的孩子都在歌唱 随着互联网的普及和发展&#xff0c;IP 地址的需求量迅速增加。尤其是 IPv4 地址&…

KOI技术-事件驱动编程(Sping后端)

1 “你日渐平庸&#xff0c;甘于平庸&#xff0c;将继续平庸。”——《以自己喜欢的方式过一生》 2. “总是有人要赢的&#xff0c;那为什么不能是我呢?”——科比布莱恩特 3. “你那么憎恨那些人&#xff0c;和他们斗了那么久&#xff0c;最终却要变得和他们一样&#xff0c;…

java: JDK isn‘t specified for module ‘product-service‘问题解决

目录 问题 解决方法 1.打开File->Project Structure... 2.将Project SDK修改为17 Oracle OpenJDK 17.0.12&#xff0c;并Apply&#xff0c;OK 问题 添加module后报错&#xff1a;java: JDK isnt specified for module product-service 查看pom.xml文件也添加了对应的JDK…

慧集通iPaaS低代码平台培训-基础篇

训练使用素材&#xff1a; 1.数据源&#xff1a; 单号业务日期工厂仓库物料单位数量批次0100012022-5-1210031001030001kg500202304150100012022-5-1210031001030001kg122202304150100012022-5-1210031001030001kg1250202304150100012022-5-1210031001030002kg130202304110100…

CMS漏洞靶场攻略

DeDeCMS 环境搭建 傻瓜式安装 漏洞一&#xff1a;通过文件管理器上传WebShel 步骤⼀:访问目标靶场其思路为 dedecms 后台可以直接上传任意文件&#xff0c;可以通过⽂件管理器上传php文件获取webshell 登陆网站后台 步骤二&#xff1a;登陆到后台点击 【核心】 --》 【文件式…