1. 1. Docker 和 Kubernetes 知识点与操作说明
    1. 1.1. 1. Docker 基础
      1. 1.1.1. 1.1 什么是 Docker
      2. 1.1.2. 1.2 Docker 的优势
      3. 1.1.3. 1.3 Docker 核心概念
      4. 1.1.4. 1.4 Docker 安装
        1. 1.1.4.1. Ubuntu/Debian 安装
        2. 1.1.4.2. CentOS/RHEL 安装
      5. 1.1.5. 1.5 Docker 基本命令
    2. 1.2. 2. Docker 进阶
      1. 1.2.1. 2.1 Docker 镜像构建
        1. 1.2.1.1. Dockerfile 基本结构
        2. 1.2.1.2. 构建镜像
      2. 1.2.2. 2.2 Docker 网络
      3. 1.2.3. 2.3 Docker 卷
      4. 1.2.4. 2.4 Docker Compose
        1. 1.2.4.1. 安装 Docker Compose
        2. 1.2.4.2. Docker Compose 文件示例
        3. 1.2.4.3. Docker Compose 命令
    3. 1.3. 3. Kubernetes 基础
      1. 1.3.1. 3.1 什么是 Kubernetes
      2. 1.3.2. 3.2 Kubernetes 的优势
      3. 1.3.3. 3.3 Kubernetes 核心概念
      4. 1.3.4. 3.4 Kubernetes 安装
        1. 1.3.4.1. Minikube(本地开发环境)
        2. 1.3.4.2. Kubeadm(生产环境)
      5. 1.3.5. 3.5 Kubernetes 基本命令
    4. 1.4. 4. Kubernetes 进阶
      1. 1.4.1. 4.1 部署策略
        1. 1.4.1.1. 滚动更新(Rolling Update)
        2. 1.4.1.2. 蓝绿部署(Blue-Green)
      2. 1.4.2. 4.2 服务发现
      3. 1.4.3. 4.3 存储
      4. 1.4.4. 4.4 配置管理
    5. 1.5. 5. Docker 与 Kubernetes 结合
      1. 1.5.1. 5.1 使用 Docker 构建镜像
      2. 1.5.2. 5.2 在 Kubernetes 中部署 Docker 镜像
      3. 1.5.3. 5.3 最佳实践
    6. 1.6. 6. 常见问题和解决方案
      1. 1.6.1. 6.1 Docker 常见问题
        1. 1.6.1.1. 问题:权限不足
        2. 1.6.1.2. 问题:容器无法访问网络
        3. 1.6.1.3. 问题:镜像构建失败
      2. 1.6.2. 6.2 Kubernetes 常见问题
        1. 1.6.2.1. 问题:Pod 处于 Pending 状态
        2. 1.6.2.2. 问题:Pod 处于 CrashLoopBackOff 状态
        3. 1.6.2.3. 问题:Service 无法访问
    7. 1.7. 7. 命令速查表
      1. 1.7.1. Docker 命令速查表
      2. 1.7.2. Kubernetes 命令速查表

Docker 和 Kubernetes 知识点与操作说明

Docker 和 Kubernetes 知识点与操作说明

1. Docker 基础

1.1 什么是 Docker

Docker 是一个开源的容器化平台,它允许开发者将应用程序及其依赖项打包到一个轻量级、可移植的容器中,然后在任何支持 Docker 的环境中运行。

1.2 Docker 的优势

  • 轻量级:容器共享宿主机内核,不需要运行完整的操作系统
  • 可移植性:容器可以在任何支持 Docker 的环境中运行,包括开发、测试和生产环境
  • 一致性:确保应用程序在不同环境中具有相同的运行行为
  • 高效利用资源:容器启动速度快,资源占用少
  • 隔离性:容器之间相互隔离,避免应用程序之间的干扰

1.3 Docker 核心概念

  • 镜像(Image):是一个只读的模板,包含了运行应用程序所需的所有内容,包括代码、运行时环境、库和配置
  • 容器(Container):是镜像的一个运行实例,可以被创建、启动、停止和删除
  • 仓库(Repository):用于存储 Docker 镜像的地方,分为公共仓库(如 Docker Hub)和私有仓库
  • Dockerfile:是一个文本文件,包含了构建 Docker 镜像的指令
  • Docker Compose:用于定义和运行多容器 Docker 应用程序的工具

1.4 Docker 安装

Ubuntu/Debian 安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 更新软件包列表
sudo apt update

# 安装必要的依赖包
sudo apt install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common

# 添加 Docker 的官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

# 添加 Docker 稳定版仓库
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

# 更新软件包列表并安装 Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io

# 验证 Docker 是否安装成功
sudo docker run hello-world

CentOS/RHEL 安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 安装必要的依赖包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

# 添加 Docker 的官方仓库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 安装 Docker
sudo yum install -y docker-ce docker-ce-cli containerd.io

# 启动 Docker 服务并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker

# 验证 Docker 是否安装成功
sudo docker run hello-world

1.5 Docker 基本命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# 查看 Docker 版本
docker version

# 查看 Docker 信息
docker info

# 搜索 Docker 镜像
docker search ubuntu

# 拉取 Docker 镜像
docker pull ubuntu:latest

# 查看本地镜像
docker images

# 删除本地镜像
docker rmi ubuntu:latest

# 运行容器
docker run -it ubuntu:latest /bin/bash # 交互式运行
docker run -d -p 8080:80 nginx # 后台运行并映射端口
docker run --name mycontainer -v /host/path:/container/path ubuntu:latest # 命名容器并挂载卷

# 查看运行中的容器
docker ps

# 查看所有容器(包括已停止的)
docker ps -a

# 停止容器
docker stop container_id/name

# 启动容器
docker start container_id/name

# 重启容器
docker restart container_id/name

# 删除容器
docker rm container_id/name # 删除已停止的容器
docker rm -f container_id/name # 强制删除运行中的容器

# 查看容器日志
docker logs container_id/name
docker logs -f container_id/name # 实时查看日志

# 进入运行中的容器
docker exec -it container_id/name /bin/bash

# 查看容器详细信息
docker inspect container_id/name

# 查看容器资源使用情况
docker stats container_id/name

2. Docker 进阶

2.1 Docker 镜像构建

Dockerfile 基本结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 指定基础镜像
FROM ubuntu:latest

# 维护者信息
MAINTAINER Your Name <your@email.com>

# 执行命令
RUN apt update && apt install -y nginx

# 设置环境变量
ENV NGINX_VERSION=1.21.6

# 复制文件
COPY index.html /usr/share/nginx/html/

# 暴露端口
EXPOSE 80

# 定义卷
VOLUME ["/var/log/nginx"]

# 运行命令
CMD ["nginx", "-g", "daemon off;"]

构建镜像

1
2
docker build -t mynginx:latest .  # 在当前目录构建镜像
docker build -t mynginx:v1.0 -f Dockerfile.prod . # 指定 Dockerfile 文件

2.2 Docker 网络

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 查看网络
docker network ls

# 创建网络
docker network create mynetwork

# 查看网络详细信息
docker network inspect mynetwork

# 运行容器并加入网络
docker run -d --name container1 --network mynetwork nginx
docker run -d --name container2 --network mynetwork mysql

# 从容器中 ping 另一个容器
docker exec -it container1 ping container2

2.3 Docker 卷

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 创建卷
docker volume create myvolume

# 查看卷
docker volume ls

# 查看卷详细信息
docker volume inspect myvolume

# 运行容器并挂载卷
docker run -d -v myvolume:/app nginx

# 挂载主机目录到容器
docker run -d -v /host/path:/container/path nginx

# 删除卷
docker volume rm myvolume

2.4 Docker Compose

安装 Docker Compose

1
2
3
4
5
6
7
8
# 下载 Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/v2.14.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 设置执行权限
sudo chmod +x /usr/local/bin/docker-compose

# 验证安装
docker-compose --version

Docker Compose 文件示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
version: "3.8"

services:
web:
build: .
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
depends_on:
- db
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: mydb
MYSQL_USER: user
MYSQL_PASSWORD: password
volumes:
- mysql_data:/var/lib/mysql

volumes:
mysql_data:

Docker Compose 命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 启动服务
docker-compose up # 前台运行
docker-compose up -d # 后台运行

# 查看服务状态
docker-compose ps

# 查看服务日志
docker-compose logs
docker-compose logs -f web # 实时查看 web 服务日志

# 停止服务
docker-compose stop

# 停止并删除服务
docker-compose down

# 启动单个服务
docker-compose up -d web

# 查看服务依赖
docker-compose config --services

3. Kubernetes 基础

3.1 什么是 Kubernetes

Kubernetes(简称 K8s)是一个开源的容器编排平台,用于自动化容器的部署、扩展和管理。它可以帮助用户管理大规模的容器化应用程序。

3.2 Kubernetes 的优势

  • 自动扩缩容:根据负载自动调整容器数量
  • 自愈能力:自动重启失败的容器,替换或迁移容器
  • 服务发现和负载均衡:内置服务发现和负载均衡机制
  • 滚动更新:支持零停机时间的应用程序更新
  • 存储编排:自动挂载所选的存储系统
  • 配置管理:集中管理应用程序配置

3.3 Kubernetes 核心概念

  • Pod:是 Kubernetes 中最小的部署单元,可以包含一个或多个容器
  • Deployment:用于管理 Pod 的声明式方法,提供副本管理、滚动更新等功能
  • Service:定义了 Pod 的访问方式,提供负载均衡和服务发现
  • Namespace:用于将集群划分为多个虚拟集群,实现资源隔离
  • Volume:用于 Pod 中的容器共享数据,提供数据持久化
  • ConfigMap:用于存储非敏感的配置信息
  • Secret:用于存储敏感信息,如密码、密钥等
  • Ingress:管理外部对集群中服务的访问
  • StatefulSet:用于管理有状态应用程序
  • DaemonSet:在集群的每个节点上运行一个 Pod
  • Job/CronJob:用于管理一次性任务或定时任务

3.4 Kubernetes 安装

Minikube(本地开发环境)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 安装 Minikube(需要先安装 Docker)
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

# 启动 Minikube
minikube start

# 安装 kubectl
sudo snap install kubectl --classic # Ubuntu/Debian
sudo yum install -y kubectl # CentOS/RHEL

# 验证集群状态
kubectl cluster-info
kubectl get nodes

Kubeadm(生产环境)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# 安装必要的依赖包
sudo apt install -y apt-transport-https curl # Ubuntu/Debian
sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # CentOS/RHEL

# 添加 Kubernetes 仓库
# Ubuntu/Debian
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

# CentOS/RHEL
sudo cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
EOF

# 安装 Kubernetes 组件
sudo apt install -y kubelet kubeadm kubectl # Ubuntu/Debian
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes # CentOS/RHEL

# 启动 kubelet 服务
sudo systemctl enable kubelet
sudo systemctl start kubelet

# 初始化集群(在主节点上运行)
sudo kubeadm init --pod-network-cidr=10.244.0.0/16

# 配置 kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 安装网络插件(Flannel)
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

# 加入工作节点(在工作节点上运行)
# 使用 kubeadm init 输出的 join 命令,例如:
# sudo kubeadm join 192.168.1.100:6443 --token abcdef.1234567890abcdef --discovery-token-ca-cert-hash sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef

3.5 Kubernetes 基本命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# 查看集群信息
kubectl cluster-info

# 查看节点
kubectl get nodes

# 查看命名空间
kubectl get namespaces

# 创建命名空间
kubectl create namespace mynamespace

# 查看 Pod
kubectl get pods
kubectl get pods -n mynamespace # 查看指定命名空间的 Pod
kubectl get pods -o wide # 查看 Pod 详细信息

# 创建 Pod
kubectl run nginx --image=nginx # 创建一个 nginx Pod

# 查看 Deployment
kubectl get deployments

# 创建 Deployment
kubectl create deployment nginx-deployment --image=nginx

# 扩展 Deployment
kubectl scale deployment nginx-deployment --replicas=3

# 查看 Service
kubectl get services

# 创建 Service
kubectl expose deployment nginx-deployment --port=80 --type=NodePort

# 查看 ConfigMap
kubectl get configmaps

# 查看 Secret
kubectl get secrets

# 查看 Ingress
kubectl get ingress

# 查看所有资源
kubectl get all
kubectl get all -n mynamespace # 查看指定命名空间的所有资源

# 查看资源详细信息
kubectl describe pod pod-name
kubectl describe deployment deployment-name
kubectl describe service service-name

# 查看 Pod 日志
kubectl logs pod-name
kubectl logs -f pod-name # 实时查看日志

# 进入 Pod
kubectl exec -it pod-name -- /bin/bash

# 删除资源
kubectl delete pod pod-name
kubectl delete deployment deployment-name
kubectl delete service service-name
kubectl delete namespace mynamespace # 删除命名空间及其所有资源

# 应用配置文件
kubectl apply -f deployment.yaml

# 删除配置文件中的资源
kubectl delete -f deployment.yaml

# 编辑资源
kubectl edit deployment deployment-name

4. Kubernetes 进阶

4.1 部署策略

滚动更新(Rolling Update)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.19.0
ports:
- containerPort: 80

蓝绿部署(Blue-Green)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# 蓝色部署
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-blue
spec:
replicas: 3
selector:
matchLabels:
app: nginx
version: blue
template:
metadata:
labels:
app: nginx
version: blue
spec:
containers:
- name: nginx
image: nginx:1.19.0
ports:
- containerPort: 80

# 绿色部署
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-green
spec:
replicas: 3
selector:
matchLabels:
app: nginx
version: green
template:
metadata:
labels:
app: nginx
version: green
spec:
containers:
- name: nginx
image: nginx:1.20.0
ports:
- containerPort: 80

# Service(切换流量)
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
version: blue # 切换到 blue 或 green
ports:
- protocol: TCP
port: 80
targetPort: 80
type: NodePort

4.2 服务发现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# ClusterIP Service
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: myapp
ports:
- protocol: TCP
port: 80
targetPort: 8080

# NodePort Service
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: myapp
ports:
- protocol: TCP
port: 80
targetPort: 8080
nodePort: 30080
type: NodePort

# LoadBalancer Service
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: myapp
ports:
- protocol: TCP
port: 80
targetPort: 8080
type: LoadBalancer

# Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
spec:
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80

4.3 存储

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# 持久卷(PersistentVolume)
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy:
Retain
hostPath:
path: /mnt/data

# 持久卷声明(PersistentVolumeClaim)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
namespace: mynamespace
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi

# 使用持久卷的 Pod
apiVersion: v1
kind: Pod
metadata:
name: my-pod
namespace: mynamespace
spec:
containers:
- name: my-container
image: nginx
volumeMounts:
- name: my-volume
mountPath: /data
volumes:
- name: my-volume
persistentVolumeClaim:
claimName: my-pvc

4.4 配置管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
name: my-config
namespace: mynamespace
data:
config.json: |
{
"database": {
"host": "db.example.com",
"port": 3306
},
"api": {
"url": "https://api.example.com"
}
}
app.properties: |
app.name=MyApp
app.version=1.0.0

# Secret
apiVersion: v1
kind: Secret
metadata:
name: my-secret
namespace: mynamespace
type: Opaque
data:
username: dXNlcm5hbWU= # base64 编码的 "username"
password: cGFzc3dvcmQ= # base64 编码的 "password"

# 使用 ConfigMap 和 Secret 的 Pod
apiVersion: v1
kind: Pod
metadata:
name: my-pod
namespace: mynamespace
spec:
containers:
- name: my-container
image: myapp
env:
- name: DB_USERNAME
valueFrom:
secretKeyRef:
name: my-secret
key: username
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: my-secret
key: password
- name: APP_CONFIG
valueFrom:
configMapKeyRef:
name: my-config
key: app.properties
volumeMounts:
- name: config-volume
mountPath: /etc/app
volumes:
- name: config-volume
configMap:
name: my-config

5. Docker 与 Kubernetes 结合

5.1 使用 Docker 构建镜像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 创建 Dockerfile
cat > Dockerfile <<EOF
FROM node:14-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
EOF

# 构建镜像
docker build -t myapp:v1 .

# 标记镜像
docker tag myapp:v1 username/myapp:v1

# 推送镜像到 Docker Hub
docker login
docker push username/myapp:v1

5.2 在 Kubernetes 中部署 Docker 镜像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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: username/myapp:v1
ports:
- containerPort: 3000
env:
- name: NODE_ENV
value: "production"

---
apiVersion: v1
kind: Service
metadata:
name: myapp-service
spec:
selector:
app: myapp
ports:
- protocol: TCP
port: 80
targetPort: 3000
type: LoadBalancer

5.3 最佳实践

  • 使用轻量级基础镜像:如 Alpine Linux
  • 最小化镜像层:合并 RUN 命令,使用 .dockerignore 文件
  • 使用多阶段构建:减少最终镜像大小
  • 设置容器资源限制:CPU 和内存限制
  • 使用健康检查:确保容器正常运行
  • 使用 ConfigMap 和 Secret:管理配置和敏感信息
  • 使用命名空间:实现资源隔离
  • 使用标签和选择器:组织和管理资源
  • 使用 Deployment:管理 Pod 生命周期
  • 定期更新镜像:保持镜像安全

6. 常见问题和解决方案

6.1 Docker 常见问题

问题:权限不足

解决方案:将用户添加到 docker 组

1
2
3
sudo usermod -aG docker $USER
# 重新登录或执行以下命令以应用更改
su - $USER

问题:容器无法访问网络

解决方案:检查 Docker 网络配置

1
2
3
docker network inspect bridge
# 重启 Docker 服务
sudo systemctl restart docker

问题:镜像构建失败

解决方案:检查 Dockerfile 语法和依赖

1
2
3
4
# 查看构建日志
docker build -t myapp .
# 使用 --no-cache 选项重新构建
docker build --no-cache -t myapp .

6.2 Kubernetes 常见问题

问题:Pod 处于 Pending 状态

解决方案:检查节点资源和调度约束

1
2
kubectl describe pod pod-name
kubectl get nodes -o wide

问题:Pod 处于 CrashLoopBackOff 状态

解决方案:检查容器日志和配置

1
2
kubectl logs pod-name
kubectl describe pod pod-name

问题:Service 无法访问

解决方案:检查 Service 配置和 Pod 状态

1
2
kubectl describe service service-name
kubectl get endpoints service-name

7. 命令速查表

Docker 命令速查表

功能 命令
查看版本 docker version
拉取镜像 docker pull image-name
运行容器 docker run -d -p 8080:80 image-name
查看运行中的容器 docker ps
查看所有容器 docker ps -a
停止容器 docker stop container-id/name
删除容器 docker rm container-id/name
查看日志 docker logs container-id/name
构建镜像 docker build -t image-name .
查看镜像 docker images
删除镜像 docker rmi image-name

Kubernetes 命令速查表

功能 命令
查看集群信息 kubectl cluster-info
查看节点 kubectl get nodes
查看 Pod kubectl get pods
查看 Deployment kubectl get deployments
查看 Service kubectl get services
创建 Deployment kubectl create deployment name --image=image-name
扩展 Deployment kubectl scale deployment name --replicas=3
暴露 Service kubectl expose deployment name --port=80 --type=NodePort
查看日志 kubectl logs pod-name
进入 Pod kubectl exec -it pod-name -- /bin/bash
应用配置 kubectl apply -f file.yaml
删除资源 kubectl delete -f file.yaml

希望这份 Docker 和 Kubernetes 知识点与操作说明对你有所帮助!如果有任何问题,请随时查阅 Docker 官方文档Kubernetes 官方文档