Docker / k8s
2024-02-23 11:55:07 14 举报
AI智能生成
Docker和Kubernetes(简称k8s)是现代软件开发和运维领域中两个重要的工具。Docker是一个开源的应用容器引擎,它允许开发者将应用程序及其依赖项打包到一个轻量级、可移植的容器中,从而实现跨平台的部署。这使得开发者可以专注于编写代码,而不必担心底层环境的差异。 Kubernetes则是一个用于自动部署、扩展和管理容器化应用程序的开源平台。它可以在多个主机上运行容器化的应用程序,并提供负载均衡、自动扩缩容、滚动更新等功能,以确保应用程序的高可用性和弹性。Kubernetes与Docker紧密集成,使得开发者可以轻松地在生产环境中部署和管理Docker容器。
作者其他创作
大纲/内容
开源的容器化平台、开发者将应用程序及其依赖打包到一个容器中,然后在任何支持Docker的机器上运行这个容器、减少只能在我机器上能运行的问题
核心
Containers/容器
运行镜像的实例、容器运行隔离开、但是共享内核、可以对容器启动、停止、删除、移动
Images/镜像
容器的基础、轻量级、独立、可执行的软件包、包含素有内容、用来创建容器
DockerFile/文本文件
包含一系列指令、如何从一个基础镜像构建一个docker镜像、指令包括复制文件、安装软件包、设置环境变量、最主要的是可以图层缓存
Volumes/数据卷
用于数据持久化和容器之间的共享文件的机制、独立于容器生命周期之外管理的特殊文件夹或文件
Hub/公共镜像库
公共的
Registry/仓库
搭建私有的来存储和管理镜像
Compose/工具
用户通过一个单独的docker-compose.yml文件定义和运行多个容器的Docker应用。这个工具可以很方便地管理和启动整个应用堆栈。
Daemon/守护进程
后台运行,用于处理、构建、分配、运行Docker容器的任务
Client/客户端
与守护进程交互的主要方式、通常用命令行接口
与传统的虚拟机上运行程序的主要区别
环境一致性
传统运行一个别人的程序可能需要各种各样的环境和配置文件、版本还得兼容。现在只要支持docker、然后用它的镜像启动容器就好了
隔离性、资源利用率、部署速度、持久化、维护更新、可移植性、缩放和负载均衡
简单命令
构建/更新映像
docker build -t 程序名称 .
启动应用容器
docker run -dp ip:端口:端口 程序名
获取容器的id
docker ps
停止容器
docker stop 容器id
删除容器
docker rm 容器id
打标签
docker tag 镜像名称 用户名/仓库名
推送
docker push 用户名/仓库名
创建卷
docker volume create 卷名
查看卷的存储位置
docker volume inspect 卷名
绑定挂载
1.使用工具compose
todo-app:
volumes:
- ./app:/usr/src/app
- /usr/src/app/node_modules
volumes:
- ./app:/usr/src/app
- /usr/src/app/node_modules
运行多容器应用
1.使用工具compose
docker compose up -d
2.手动创建网络并启动容器分配网络
docker network create 网络名称
容器里开发
docker compose watch
持久化容器数据
把 yaml 文件的数据卷的取消注释
容器化应用程序
1.创建资产
docker init
2.运用程序
docker compose up
查看图像中的图层创建
docker image history --no-trunc 容器名
nicolaka/netshoot
用于解决Docker的网络问题
网络命名空间:提供与网络关联的系统资源的隔离
Docker 使用网络和其他类型的命名空间 (,,..等)为每个容器创建一个隔离的环境。接口、路由和 IP 中的所有内容都完全隔离在容器的网络命名空间中
Kubernetes 还使用网络命名空间。Kubelets 为每个 Pod 创建一个网络命名空间,其中该 Pod 中的所有容器共享相同的网络命名空间(eths、IP、tcp sockets...等)
Docker使用
容器的网络命名空间:应用程序的容器存在网络问题
docker run -it --net container:<container_name> nicolaka/netshoot
主机的网络命名空间:主机存在网络问题
docker run -it --net host nicolaka/netshoot
Network的命名空间:对 Docker 网络进行故障排除
使用 Docker Compose 的 Netshoot
version: "3.6"
services:
tcpdump:
image: nicolaka/netshoot
depends_on:
- nginx
command: tcpdump -i eth0 -w /data/nginx.pcap
network_mode: service:nginx
volumes:
- $PWD/data:/data
nginx:
image: nginx:alpine
ports:
- 80:80
services:
tcpdump:
image: nicolaka/netshoot
depends_on:
- nginx
command: tcpdump -i eth0 -w /data/nginx.pcap
network_mode: service:nginx
volumes:
- $PWD/data:/data
nginx:
image: nginx:alpine
ports:
- 80:80
K8s
插件
# spin up a throwaway pod for troubleshooting
kubectl netshoot run tmp-shell
# debug using an ephemeral container in an existing pod
kubectl netshoot debug my-existing-pod
# create a debug session on a node
kubectl netshoot debug node/my-node
kubectl netshoot run tmp-shell
# debug using an ephemeral container in an existing pod
kubectl netshoot debug my-existing-pod
# create a debug session on a node
kubectl netshoot debug node/my-node
部署到K8s
是一个开源的容器管理平台,用于自动化容器操作,包括部署、扩展和管理容器化应用程序
核心
pod
一个pod包含一个或多个容器、pod内共享存储、网络和资源、自动创建和销毁
service
为相同功能pod提供了一个不变的访问接口、即使这些pod数量和位置发生变化
ReplicaSet
维护一组在任何时间都处于运行状态的pod副本数、由deployment来声明
deployment
声明式 改变pod和ReplicaSet的状态
Namespace
将集群资源分为多个逻辑分区的方式、用于项目之间的隔离
volume
数据持久化、使pod重启后继续存在、pod内容器共享
ConfigMap and Secret
存储配置信息和敏感信息、如密码、令牌、密钥等,pod可以用环境变量和文件形式使用这些信息
Ingress
管理外部用户访问服务的http、提供负载均衡、ssl终端和基于名字的托管
node
k8s的一台工作机器
Master
负责集群的管理和协调操作
kubectl
k8s的命令行工具
常用命令
创建配置文件
xx.yaml
应用程序部署到k8s
kubectl apply -f 配置文件
列出部署
kubectl get deployments
检查ping日志
kubectl logs 程序名称
对服务进行检查
kubectl get services
拆除应用程序
kubectl delete -f 配置文件
0 条评论
下一页