Container
Contents
摘要 简单使用容器技术。
关键词
docker
, kubectl
, minikube
1. docker
基本用法
docker run -itd --name=steven-test \
-v /data1/steven/models:/models \
-p 6666:8080 \
-e LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./lib \
my-image:0.0.1 \
/bin/bash
--restart always # 崩溃后自动重启
--net=host # 与宿主机共享网络
--privileged=true # 相当于宿主机的root用户,不开这个,只是宿主机的普通用户
--cpus=16 --memory=64g # 限定cpu16核,内存64g
导入导出
# commit: 从容器创建镜像
docker commit -a "author" -m "description" my-container my-image
#### 容器 ####
# export: 从容器导出tar包, 这种文件只包含文件系统的内容,不包含任何元数据
docker export -o ubuntu.tar my-container
# import: 从tar包导入镜像
docker import ubuntu.tar ubuntu:v1
#### 镜像 ####
# save: 将镜像 runoob/ubuntu:v3 生成 my_ubuntu_v3.tar,包含了镜像的所有层和版本信息。
docker save -o my_ubuntu_v3.tar runoob/ubuntu:v3
# load: 将my_ubuntu_v3.tar加载进来生成镜像
docker load -i my_ubuntu_v3.tar
nvidia-docker
docker 1.13.1 版本
--runtime=nvidia
--env CUDA_VISIBLE_DEVICES=1 # 允许你指定具体的 GPU 用于你的容器
# 在 Docker 19.03 及更高版本中,
--runtime=nvidia 参数已被废弃
Docker容器的驱动版本不能高于宿主机的驱动版本,可以通过 --runtime=runc 来避免无法启动的问题
官方建议使用更简单的 --gpus all 参数
--gpus 1 不指定到底哪个 GPU 被分配给容器,只是指定1个gpu给容器
如果你在 /etc/docker/daemon.json
中配置了 nvidia 运行时,可以保留配置,但不再需要显式指定 --runtime=nvidia
看 runtime 是否是 nvidia
dokcer info | grep -i runtime
# 如果正确配置了 nvidia 运行时
Runtimes: nvidia runc io.containerd.runc.v2
Default Runtime: runc
2. minikube
minikube start
minikube start --kubernetes-version=v1.28.2 指定版本
minikube stop/delete 停止/删除本地集群
minikube delete --all 删除所有本地集群和配置文件
minikube status 查看状态
minikube node list 查看minikube节点信息
minikube ip 查看 minikube ip
minikube ssh 连接上集群
3. kubectl
基础
# 构建/升级资源对象,如果资源已存在,不会报错
kubectl apply -f xxx.yaml
# 查看资源对象详细信息
kubectl describe <resource-type> <resource-name>
# 获取配置
kubectl get <resource-type> [resource-name] -o yaml # 用 yaml / json 格式显示
# 删除
kubectl delete <resource-type> <resource-name>
kubectl get nodes # 查看节点
kubectl config view # 检查当前上下文和集群信息
kubectl cluster-info # 查看集群信息
kubectl api-resources # 显示出资源对象相应的 API 版本和类型
命令参数
-l app=nginx
// 过滤标签是app=nginx-o wide
以更宽格式显示-w
// watch 实时过程-c <container_name>
指定容器名字-n <namespace>
指定命名空间--all-namespaces
指定全部命名空间
pod
kubectl exec -it <pod-name> -c <container_name> -- <command> # 在pod中运行命令
kubectl logs <pod-name> # 查看pod日志
kubectl cp <pod_name>:/log /home/log -c <container_name> # 拷贝文件
deployment
# 直接编辑
kubectl edit deployment/nginx-deployment
# 重启部署
kubectl rollout restart deployment <deployment_name>
# 查看滚动更新状态
kubectl rollout status deployment/nginx-deployment
# 回滚到上一版本
kubectl rollout undo deployment/nginx-deployment
# --to-revision=2 指定版本
# 查看部署历史
kubectl rollout history deployment/nginx-deployment
# 暂停部署
kubectl rollout pause deployment/nginx-deployment
# 恢复部署,暂停期间的所有操作,最后只会触发一次“滚动更新”
kubectl rollout resume deploy/nginx-deployment