Docker + Kubernetes 笔记

doocker

参考中文官网:开始使用 -- Docker官方文档|Docker中文文档|Docker中文文档|Docker官方教程

我是使用vscode的wsl配置的,最开始测试时发现docker run hello-world总是error,用了阿里云加速都没用,后来下载了Docker Desktop,每次用之前先打开就莫名其妙好了。

记得测试:

1.一些基本指令

docker version     #显示docker详细信息
docker info       #显示docker的系统信息,包括镜像和容器的数量
docker --help     #docker帮助命令手册

2.镜像命令

我是这么理解的:镜像 = 类   容器 = 实例

docker images  #查看所有本地主机的镜像
docker search 镜像名           #搜索镜像
docker pull 镜像名 [标签]      #下载镜像(如果不写tag,默认是latest)
docker rmi 镜像名 [标签]       #删除镜像    docker rmi -f $(docker images -aq)  删除全部镜像
docker tag  镜像名:版本   新镜像名:版本    #复制镜像并且修改名称
docker commit  -a "xxx"  -c "xxx" 镜像ID 名字:版本   #提交镜像 
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;

docker load -i    /xxx/xxx.tar         #导入镜像
docker save -o   /xxx/xxx.tar          #保存一个镜像为一个tar包

3.容器命令

docker run [可选参数] image 命令 #启动容器(无镜像会先下载镜像)
#参数说明
--name = "Name"   容器名字
-c   后面跟待完成的命令
-d   以后台方式运行并且返回ID,启动守护进程式容器
-i   使用交互方式运行容器,通常与t同时使用
-t   为容器重新分配一个伪输入终端。也即启动交互式容器
-p   指定容器端口    -p 容器端口:物理机端口  映射端口
-P   随机指定端口
-v   给容器挂载存储卷

docker build  #创建镜像        -f:指定dockerfile文件路径   -t:镜像名字以及标签
docker logs 容器实例的ID          #查看容器日志
docker rename 旧名字  新名字      # 给容器重新命名
docker top    容器实例的ID                  #查看容器内进程
docker ps -a                    #列出所有容器(不加-a就是在运行的)
docker rm      容器实例的ID                 #删除容器(正在运行容器不能删除,除非加-f选项)
docker kill  容器实例的ID        #杀掉容器
docker history   镜像ID    #查看docker镜像的变更历史
docker start 容器实例的ID        #启动容器
docker restart 容器实例的ID       #重启容器
docker stop 容器实例的ID         #停止正在运行的容器
docker attach /docker exec  容器实例的ID   #同为进入容器命令,不同的是attach连接终止会让容器退出后台运行,而exec不会。并且,docker attach是进入正在执行的终端,不会情动新的进程,而docker exec则会开启一个新的终端,可以在里面操作。
docker image inspect  容器名称:容器标签       #查看容器内源数据
docker cp  容器id:容器内路径   目的主机路径           #从容器内拷贝文件到主机(常用)或者从主机拷贝到容器(一般用挂载)
exit                           #直接退出容器 
crlt + P + Q                   #退出容器但是不终止运行

docker run的三种方式

第一种:交互方式创建容器,退出后容器关闭。
docker run -it 镜像名称:标签 /bin/bash

第二种:守护进程方式创建容器。
docker run -id 镜像名称:标签
通过这种方式创建的容器,我们不会直接进入到容器界面,而是在后台运行了容器,
如果我们需要进去,则还需要一个命令。
docker exec -it  镜像名称:标签  /bin/bash
通过这种方式运行的容器,就不会自动退出了。

push的时候,按照官网说明

docker build -t usrname/dockerfile:latest .

然后很快就能在自己的repository看到了

3. 顺便使用docker下载学习了 nginx

1.隔离问题

使用 Docker 运行的 Nginx 容器默认与宿主机环境隔离,但可以通过 Docker 提供的命令 ​查看容器内部状态 或 ​进入容器内调试。以下是关键命令的使用方法:

1.     docker top <容器名或ID>

查看容器内正在运行的进程(类似于宿主机的 ps 或 top 命令)。

# 假设容器名为 nginx
docker top nginx

# 输出示例:
UID     PID     PPID    C   STIME   TTY     TIME        CMD
root    1234    456     0   10:00   ?       00:00:00    nginx: master process nginx -g daemon off;
www     5678    1234    0   10:00   ?       00:00:00    nginx: worker process
  • 快速检查 Nginx 的主进程(master process)和工作进程(worker process)是否正常运行。
  • 确认容器内是否有其他意外进程。

2.     docker exec:进入容器或执行命令

# 进入容器的 Bash 终端(如果容器支持 Bash)
docker exec -it nginx /bin/bash

# 如果容器基于 Alpine 镜像(无 Bash),使用 sh
docker exec -it nginx /bin/sh

# 查看容器内的文件列表
docker exec nginx ls /etc/nginx

# 检查 Nginx 配置语法是否正确
docker exec nginx nginx -t

# 重载 Nginx 配置(无需进入容器)
docker exec nginx nginx -s reload

2.在Nginx中,serverlocation是配置虚拟主机和请求路由的核心模块。

server{} 块的作用**

  1. 定义虚拟主机

    • 每个 server{} 块代表一个虚拟主机​(Virtual Host),用于处理特定域名、端口或IP的请求。
    • 是否代表一个网站?

      • 是的。通常情况下,一个 server{} 块对应一个网站(如一个域名)。
      • 但一个物理服务器上可以运行多个 server{} 块(即多个虚拟主机),实现一台服务器托管多个网站。
    • 默认服务器

      • 如果请求未匹配任何 server_name,Nginx会使用第一个匹配监听端口(如listen 80)的 server{} 块作为默认响应。
      • 可通过 listen 指令的 default_server 参数显式指定默认主机

location{} 块的作用**

  1. URI路由

    • location{} 块嵌套在 server{} 内部,用于匹配请求的URI,并定义如何处理这些请求。

完整的配置结构

# 定义第一个虚拟主机(网站:example.com)
server {
    listen 80;
    server_name example.com;

    location / {
        root /var/www/example;
        index index.html;
    }

    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        # PHP处理配置
    }
}

# 定义第二个虚拟主机(网站:another-site.com)
server {
    listen 80;
    server_name another-site.com;

    location / {
        root /var/www/another;
        index index.html;
    }
}

kubernetes

推荐学习视频:

https://www.bilibili.com/video/BV1Se411r7vY?vd_source=3d0a14a267c9cbda8f2a6184dd8c564d

简介

  • ​定义​​:开源容器编排系统,用于自动化部署、扩展和管理容器化应用。
  • ​核心功能​​:
    • 自动化容器调度与负载均衡。
    • 自我修复(自动重启失败容器)。
    • 水平扩展(根据负载动态调整实例数量)。
  • ​应用场景​​:微服务架构、CI/CD流水线、混合云部署。

核心组件​

kubernetes通过奖容器放入在节点(Node)上运行的Pod中来执行工作负载

1. Ingress(入口)​
  • ​作用​​:管理外部访问集群服务的HTTP/HTTPS路由规则(如域名、路径路由)。
  • ​功能​​:
    • 替代NodePort直接暴露服务,提供更灵活的流量管理。
    • 支持TLS终止、负载均衡(需配合Ingress Controller如Nginx、Traefik)。
  • ​示例场景​​:将 example.com/api 路由到后端API服务。
​2. StatefulSet(有状态集)​
  • ​特点​​:
    • 为有状态应用(如数据库、Redis)提供稳定的Pod标识(固定主机名、持久化存储)。
    • 按顺序部署/扩展(Pod名称后缀为有序索引,如 mysql-0mysql-1)。
  • ​与Deployment区别​​:
    特性DeploymentStatefulSet
    Pod名称随机哈希固定有序索引
    存储卷临时卷持久化卷(PVC)
    适用场景无状态应用MySQL、MongoDB等
​3. ConfigMap(配置映射)​
  • ​用途​​:将非敏感配置(如环境变量、配置文件)与容器镜像解耦。
  • ​使用方式​​:
    • 挂载为容器内的文件(如 application.properties)。
    • 直接注入为环境变量。
​4. Secret(密钥)​
  • ​作用​​:存储敏感数据(如密码、TLS证书),Base64编码但需额外加密(建议结合Vault)。
  • ​与ConfigMap对比​​:
     
    # ConfigMap示例
    apiVersion: v1
    kind: ConfigMap
    data:
      LOG_LEVEL: "INFO"
    
    # Secret示例
    apiVersion: v1
    kind: Secret
    data:
      DB_PASSWORD: "MTIzNDU2"  # Base64编码的"123456"

​5. Volumes(存储卷)​
  • ​类型​​:
    • ​临时卷​​(emptyDir):Pod生命周期内有效。
    • ​持久卷​​(PersistentVolume/PV):独立于Pod生命周期,需绑定PVC(PersistentVolumeClaim)。
  • ​常见后端​​:NFS、AWS EBS、Ceph。

​组件间协作关系​

  1. ​用户请求流程​​:
    Ingress → Service → Pod(由 Deployment/StatefulSet 管理) → 读取 ConfigMap/Secret 或挂载 Volume
  2. ​数据流示例​​:
    • 前端应用(Deployment)通过Service访问后端数据库(StatefulSet)。
    • 数据库密码从Secret获取,配置文件通过ConfigMap挂载。

  1. ​Master节点组件​​:
    • ​API Server​​:集群入口,处理REST操作。
    • ​Scheduler​​:分配Pod到Node。
    • ​Controller Manager​​:维护集群状态(如副本数)。
    • ​etcd​​:分布式键值存储,保存集群数据。
  2. ​Worker节点组件​​:
    • ​kubelet​​:与Master通信,管理容器生命周期。
    • ​kube-proxy​​:实现服务网络代理和负载均衡。
    • ​容器运行时​​(如Docker/containerd):运行容器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值