Skip to content
sh
cat /etc/issue

curl -fsSL https://get.docker.com -o get-docker.sh
 sudo sh get-docker.sh

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

docker run --rm -it --name=python python:3.11-slim /bin/bash
docker system df
docker-compose --compatibility up -d

docker-compose build --force-rm --no-cache

docker-compose down & docker volume prune

docker-compose build --force-rm --no-cache

docker-compose down --rmi all -v
docker compose down -v --remove-orphans --rmi="all"

docker compose down -v --remove-orphans --rmi="local"

sudo docker compose --compatibility up -d --build --force-recreate --renew-anon-volumes --remove-orphans –always-recreate-deps

docker compose --compatibility up -d --build --remove-orphans --pull=always --renew-anon-volumes --always-recreate-deps


sudo docker compose build --no-cache && sudo docker compose up -d --compatibility up -d  --renew-anon-volumes --remove-orphans

docker-compose --compatibility up -d  --renew-anon-volumes --remove-orphans
docker-compose up -d --build &&docker-compose restart

sudo docker compose build --no-cache && sudo docker compose up -d --scale mysql-go=50
sudo docker compose --compatibility up -d --build --force-recreate  --renew-anon-volumes --remove-orphans

docker compose -f xxx.yml build --no-cache

systemctl list-units --type=service --state=running

sudo docker stop $(sudo docker ps -a -q)

sudo docker start $(sudo docker ps -a -q)

sudo docker rm $(sudo docker ps -a -q)

sudo docker rmi $(sudo docker images -q)

sudo docker rmi $(sudo docker images | grep "none" | awk '{print $3}')

sudo docker rmi $(sudo docker images -f "dangling=true" -q)

 sudo docker system prune --volumes -f

 sudo docker system prune -a

sudo docker system prune --all   --volumes -f

du -Sh /var/lib/docker/overlay2 | sort -nr | head -n10

docker rmi -f $(docker images -aq)

docker pull --platform=arm64 --username=your_username --password=your_password your_registry/image_name:tag

docker image prune

docker cp elasticsearch:/usr/share/elasticsearch/config xxxxxx


ocker run --rm -v source_volume:/data -v $(pwd):/backup ubuntu tar czvf /backup/backup.tar.gz /data

docker run --rm -v /path/to/kafka-backups:/backups --volumes-from kafka busybox \
  cp -a /bitnami/kafka /backups/latest

docker run --rm -v /path/to/kafka-backups:/backups --volumes-from `docker-compose ps -q kafka` busybox \
  cp -a /bitnami/kafka /backups/latest

sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose

如果只是改动代码和配置文件等,docker-compose restart是没有问题的;

如果改动了docker-compose.yml里的内容,则必须down之后再up (restart是无法自动加载新变动的内容)


docker image inspect redis:latest|grep -i version

docker save xxxx -o xxx.tar


docker load -i xxx.tar


kubectl delete pods --all

wsl -s Debian wsl --shutdown

 wsl --export docker-desktop-data D:\docker\docker-desktop-data.tar
 wsl --unregister docker-desktop-data

  wsl --import docker-desktop-data D:\docker\ D:\docker\docker-desktop-data.tar --version 2
wsl --export Debian D:\docker\debian\debian.tar wsl --unregister Debian

wsl --import Debian D:\docker\debian\ D:\docker\debian\debian.tar --version 2

wsl --export Ubuntu D:\docker\ubuntu\ubuntu.tar


curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh


wsl --unregister Ubuntu wsl --import Ubuntu D:\docker\ubuntu\ D:\docker\ubuntu\ubuntu.tar --version 2

curl -L "https://github.com/docker/compose/releases/download/2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

{
    "builder": {
        "gc": {
            "defaultKeepStorage": "10GB",
            "enabled": true
        }
    },
    "debug": false,
    "experimental": true,
    "features": {
        "buildkit": true
    },
    "live-restore": false,
    "log-driver": "json-file",
    "log-opts": {
        "max-file": "1",
        "max-size": "10m"
    },
    "storage-driver": "overlay2",
    "exec-opts": [
        "native.cgroupdriver=systemd",
        "overlay2.override_kernel_check=true",
        "overlay2.size=10G"
    ],
    "raw-logs": false,
    "registry-mirrors": [
        "https://pb8evzri.mirror.aliyuncs.com"
    ],
    "dns": [
        "223.5.5.5",
        "223.6.6.6"
    ]
}



[wsl2]
memory=4GB

processors=2

localhostForwarding=true

pageReporting=false

debugConsole=false

nestedVirtualization=false

hardwarePerformanceCounters=false

guiApplications=false

swap=0

kernelCommandLine = vsyscall=emulate


docker login ccr.ccs.tencentyun.com --username=100008523020
docker pull ccr.ccs.tencentyun.com/custom-namespace/custom:[tag]

docker login --username xxxx

sudo docker tag mysql-go xxxx/mysql-go:latest

sudo docker push xxxxx/mysql-go:latest

 sudo docker login --username=wxw_****@163.com registry.cn-beijing.aliyuncs.com

docker login --username=wxw_****@163.com registry.cn-beijing.aliyuncs.com
docker tag [ImageId] registry.cn-beijing.aliyuncs.com/wxw-plus/w1106:[镜像版本号]
docker push registry.cn-beijing.aliyuncs.com/wxw-plus/w1106:[镜像版本号]

dockerd-rootless-setuptool.sh install

bcdedit /set hypervisorlaunchtype auto

bcdedit /set hypervisorlaunchtype off

podman

unqualified-search-registries = [ "docker.io" ]
[[registry]]
prefix = "docker.io"
location = "pb8evzri.mirror.aliyuncs.com"



wsl --export podman-machine-default D:\docker\podman-machine-default.tar

 wsl --unregister podman-machine-default

  wsl --import podman-machine-default D:\docker\ D:\docker\podman-machine-default.tar --version 2

docker compose 共用

pipework

 pipework是一个用软件来为linux容器定义网络的工具,
 pipework允许你在一个复杂的环境下把容器连接在一起,
 pipework使用cgroup和namespace来和LXC容器协同工作,当然也可以和docker来一起工作,
 pipework的shell脚本来帮助你自动打通容器之间的网络连接,
 pipework br0 rp-meeting 192.168.1.36/24@192.168.1.1

漏洞扫描

trivy

Harbor 企业级 registry

自签名证书

openssl genrsa -out /data/cert/harbor-ca.key 4096

openssl req -x509 -new -nodes -sha512 -days 3650 \
 -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=yourdomain.com" \
 -key /data/cert/harbor-ca.key \
 -out /data/cert/harbor-ca.crt


!!!上传镜像,需要先新建项目


 ./install.sh --with-notary --with-trivy

持久化存储

mysql、mogodb 等需要数据卷,使用 volumes

k8s


sudo swapoff -a

sudo sed -i '/ swap / s/^/#/' /etc/fstab

kubeadm reset

kubeadm init --image-repository registry.aliyuncs.com/google_containers --ignore-preflight-errors=all --v=5 --kubernetes-version v1.27.4

kubeadm init \
--apiserver-advertise-address=192.168.31.133  \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.22.2 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=all

kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers


kubeadm init --apiserver-advertise-address $(hostname -i) --pod-network-cidr 10.5.0.0/16

kubectl apply -f https://raw.githubusercontent.com/cloudnativelabs/kube-router/master/daemonset/kubeadm-kuberouter.yaml

kubectl taint nodes --all node-role.kubernetes.io/control-plane-


kubeadm join 192.168.0.18:6443 --token j7t0sp.sl0n86pf01fx31sp \
        --discovery-token-ca-cert-hash sha256:0d82d2abd67dfd9e7a7afb8db3b4fd5216d113f35a0a5f0324014f88fcb8d10c


kubectl get svc app-front -o go-template --template '{{ .spec.clusterIP }}' -n app        




kubeadm config image list

kubectl version -o json 

 kubectl proxy  --port=8888  --address='0.0.0.0'  --accept-hosts='^.*'   >/dev/null 2>&1&


#1.自动装箱
基于容器对应用运行环境的资源配置要求自动部署应用容器

#2.自我修复(自愈能力)
当容器失败时,会对容器进行重启
当所部署的 Node 节点有问题时,会对容器进行重新部署和重新调度
当容器未通过监控检查时,会关闭此容器直到容器正常运行时,才会对外提供服务

#3.水平扩展
通过简单的命令、用户 UI 界面或基于 CPU 等资源使用情况,对应用容器进行规模扩大或规模剪裁

#4.服务发现
用户不需使用额外的服务发现机制,就能够基于 Kubernetes 自身能力实现服务发现和负载均衡

#5.滚动更新
可以根据应用的变化,对应用容器运行的应用,进行一次性或批量式更新

#6.版本回退
可以根据应用部署情况,对应用容器运行的应用,进行历史版本即时回退

#7.密钥和配置管理
在不需要重新构建镜像的情况下,可以部署和更新密钥和应用配置,类似热部署。

#8.存储编排
自动实现存储系统挂载及应用,特别对有状态应用实现数据持久化非常重要
存储系统可以来自于本地目录、网络存储(NFS、Gluster、Ceph 等)、公共云存储服务

#9.批处理
提供一次性任务,定时任务;满足批量数据处理和分析的场景

Kubernetes 主要由以下几个核心组件组成:

1.  etcd 保存了整个集群的状态
2.  apiserver 提供了资源操作的唯一入口,并提供认证、授权、访问控制、API 注册和发现等机制
3.  controller manager 负责维护集群的状态,比如故障检测、自动扩展、滚动更新等
4.  scheduler 负责资源的调度,按照预定的调度策略将 Pod 调度到相应的机器上
5.  kubelet 负责维护容器的生命周期,同时也负责 Volume(CVI)和网络(CNI)的管理
6.  Container runtime 负责镜像管理以及 Pod 和容器的真正运行(CRI)
7.  kube-proxy 负责为 Service 提供 cluster 内部的服务发现和负载均衡

除了核心组件,还有一些推荐的组件:
1.kube-dns 负责为整个集群提供 DNS 服务
2.Ingress Controller 为服务提供外网入口
3.Heapster 提供资源监控
4.Dashboard 提供 GUI 5. Federation 提供跨可用区的集群
6.Fluentd-elasticsearch 提供集群日志采集、存储与查询

Pod:最小部署单元,封装一个或多个容器(以及存储、网络等资源)。

Service:定义一组Pod的访问策略,为它们提供一个统一的入口。

Deployment:管理Pod的部署,包括滚动升级和回滚。

StatefulSet:管理有状态的Pod,保证Pod的顺序和唯一性。

DaemonSet:确保所有节点(或一些特定节点)运行一个Pod的副本。

Job:运行一次性任务直到完成。

CronJob:按计划运行Job(如定时备份)。

ConfigMap:在Pod中使用配置文件

https://github.com/kubernetes-sigs/metrics-server/releases
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.6.2/components.yaml

https://github.com/AliyunContainerService/k8s-for-docker-desktop
kubectl proxy
$TOKEN=((kubectl -n kube-system describe secret default | Select-String "token:") -split " +")[1]
kubectl config set-credentials docker-desktop --token="${TOKEN}"
echo $TOKEN

k8s 的控制类型

deployment:适合无状态的服务部署
StatefullSet:适合有状态的服务部署
DaemonSet:一次部署,所有的 node 节点都会部署,例如一些典型的应用场景:
运行集群存储 daemon,例如在每个 Node 上运行 glusterd、ceph
在每个 Node 上运行日志收集 daemon,例如 fluentd、 logstash
在每个 Node 上运行监控 daemon,例如 Prometheus Node Exporter
Job:一次性的执行任务
Cronjob:周期性的执行任务

k8s kind 类型
Pod 最小的单位
Deployment 弹性扩容,负载均衡

命令

kubectl create -f xxx.yml
kubectl apply -f xxx.yml
kubectl delete -f xxx.yml
kubectl get pods xxx -o wide
kubectl describe pod xxx
kubectl exec -it xxx sh

kubectl delete service xxxxx

kubectl get svc xxxxx -o wide

kubectl get events

kubectl logs -f --tail 20 xxxx
kubectl top pod

k8s 端口范围 30000-32767

k8s 访问 java 的地址: Service 名称.命令空间.Pod 容器端口

kubectl -n kubernetes-dashboard create token kubernetes-dashboard
swapoff -a && sed -ri 's/.*swap.*/#&/' /etc/fstab

kubeadm init --apiserver-advertise-address $(hostname -i) --pod-network-cidr 10.5.0.0/16

kubectl proxy  --port=8888  --address='0.0.0.0' --accept-hosts='^.*'   >/dev/null 2>&1& 

http://172.25.12.166:8888/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/#/workloads?namespace=default 

minikube start --image-mirror-country='cn' --driver=vmware
minikube start --driver=docker   --image-mirror-country='cn' -memory=2048 --cpus=2 --image-repository='registry.cn-hangzhou.aliyuncs.com/google_containers'

minikube start --driver=vmware --image-mirror-country=cn --kubernetes-version=1.23.9 --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --registry-mirror=https://registry.docker-cn.com


minikube start  --container-runtime=docker --image-mirror-country='cn' 
curl -Lo minikube https://github.com/kubernetes/minikube/releases/download/v1.5.0/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/

sudo snap install microk8s --classic --channel=1.12/stable

curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -s - server  --cluster-init --disable traefik  


kubectl create secret docker-registry ali-registry-key --docker-server=registry.cn-beijing.aliyuncs.com --docker-username=wxw_0506@163.com  --docker-password=wang0506 --docker-email=475796288@qq.com

kubectl apply -f recommended.yaml -f dashboard.admin-user.yml -f dashboard.admin-user-role.yml
kubectl proxy    --address='0.0.0.0'  --accept-hosts='^.*' --disable-filter=true >/dev/null 2>&1&
kubectl -n kubernetes-dashboard create token admin-user

http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
https://172.28.95.80:30001/#/login

kubectl get pods --all-namespaces

kubectl get pods,svc,ingress,node,ingress,ingressRoute,hpa --all-namespaces -o wide

kubectl get svc xxx-n xxx -o go-template='https://{{.spec.clusterIP}}{{range.spec.ports}}{{if   eq .name "https"}}':'{{.port}}{{"\n"}}{{end}}{{end}}'

kubectl describe pods -l name=app-front -n app

kubectl describe pod app-back -n app

kubectl logs --tail="10" -f deployment/app-back --all-containers=true -n app

/usr/local/bin/k3s-uninstall.sh

kubectl get pods,svc,ingress,nodes --all-namespaces


mkdir /opt/ingress-nodeport/https
cd /opt/ingress-nodeport/https


openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=nginxsvc/O=nginxsvc"


kubectl create secret tls tls-secret --key tls.key --cert tls.crt

kubectl get secret


kubectl describe secret tls-secret

节点和Pod亲和力,是将Pod吸引到一组节点【根据拓扑域】(作为优选或硬性要求)。污点(Taints)则相反,它们允许一个节点排斥一组Pod。

容忍(Tolerations)应用于pod,允许(但不强制要求)pod调度到具有匹配污点的节点上。

污点(Taints)和容忍(Tolerations)共同作用,确保pods不会被调度到不适当的节点。一个或多个污点应用于节点;
这标志着该节点不应该接受任何不容忍污点的Pod。

说明:我们在平常使用中发现pod不会调度到k8s的master节点,就是因为master节点存在污点。 
污点的目的是为了确保特定类型的Pod不会被误调度到某些特定的节点


 kubectl -n kube-system port-forward $(kubectl -n kube-system get pods --selector "app.kubernetes.io/name=traefik" --output=name) 9000:9000 --address 0.0.0.0 >/dev/null 2>&1& 

 http://xxxx:9000/dashboard/#/

buildx

RUN 命令支持一个选项 --mount=type=cache,可以挂载一个临时目录来为编译器和包管理器缓存目录。

RUN --mount=type=cache,target=~/.m2,id=mvn_cache,sharing=locked

multipass


 multipass info –all
multipass set local.driver=virtualbox|hyperv
multipass delete --all --purge
multipass set local.privileged-mounts=true

multipass set local.bridged-network=xxx

multipass find

multipass networks

MULTIPASS_STORAGE

multipass launch docker -n docker -m 4G -d 40G -c 4 --network bridged --cloud-init config.yaml -vvvv
multipass launch lts -n master -m 4G -d 20G -c 4 --cloud-init ./config.yaml -vvvv

multipass start docker

multipass shell docker

multipass delete docker --purge

multipass delete --all

multipass purge



sudo sed -i "s@PasswordAuthentication no@PasswordAuthentication yes@g" /etc/ssh/sshd_config 

sudo sed -i "s@#PermitRootLogin prohibit-password@PermitRootLogin no@g" /etc/ssh/sshd_config 

sudo sed -i "s@#   StrictHostKeyChecking ask@StrictHostKeyChecking no@g" /etc/ssh/ssh_config


sudo sed -i "s@#ClientAliveInterval 0@ClientAliveInterval 60@g"  /etc/ssh/sshd_config

sudo sed -i "s@#ClientAliveCountMax 3@ClientAliveCountMax 3@g"  /etc/ssh/sshd_config

sudo sed -i "s@#TCPKeepAlive yes@TCPKeepAlive yes@g"  /etc/ssh/sshd_config

sudo sed -i "s@archive.ubuntu.com@mirrors.aliyun.com@g" /etc/apt/sources.list

sudo systemctl restart ssh

sudo passwd ubuntu


 scp -rC -vvvv ./* ./.* ubuntu@xxxxx:~/docker

docker k8s lab

https://labs.play-with-docker.com/

https://labs.play-with-k8s.com/

Ctrl/Command+ Insert copy

Shift + Insert paste

更新于:

note