Docker 与 K8s 实战:容器化到集群编排的命令速查

分类:Docker和K8s集群
标签: Docker、容器、Docker Compose、k3s、Kubernetes、kubectl、Pod
摘要: 从”单个容器”到”集群自动调度”,这是容器技术的一条主线。本文把 Docker 的日常命令、Compose 编排、再到 k3s(K8s)的集群命令串起来,含网络模式、扩缩容等常考点和踩坑。


一、Docker 基础命令(容器 = 集装箱)

docker ps                 # 看运行中容器
docker ps -a              # 看所有容器
docker images             # 看本地镜像
docker pull 镜像           # 拉镜像
docker run -d --name web -p 8080:80 nginx   # 起容器并映射端口
docker logs web           # 看容器日志(排障首选)
docker exec -it web bash  # 进容器内操作
docker stop/start/restart web   # 启停
docker rm web             # 删容器(先stop)
docker rmi 镜像           # 删镜像

关键:网络模式怎么选
– bridge + -p:默认,容器独立内网,靠 -p 宿主机:容器 映射端口。适合 Web/MySQL 等业务。
– host:直接复用宿主机网络,不需要映射,但会占宿主机端口。适合 netdata 这类要看宿主机真实状态的监控。

⚠️ 坑:host 模式下容器没 -p,docker ps 的 PORTS 列是空的,不代表没监听——用 ss -tlnp 确认真实端口。


二、Docker Compose(多容器一键编排)

多个容器互相配合(如 nginx + mysql + app),用一份 docker-compose.yml 定义,一条命令全部拉起。

services:
  web:
    image: nginx
    ports: ["8080:80"]
    volumes: ["./html:/usr/share/nginx/html:ro"]
  db:
    image: mysql:5.7
    environment:
      MYSQL_DATABASE: blog
      MYSQL_ROOT_PASSWORD: "<你的密码>"
docker-compose up -d     # 拉起整套
docker-compose down      # 停掉并移除
docker-compose ps        # 看这套服务状态
docker-compose logs web  # 看某个服务日志

坑:多个后端若共享同一数据卷,写文件验证”负载均衡”会假象全命中一个节点——要按容器 ID / 进程维度验证。

三、k3s(K8s 轻量集群)安装与命令

k3s = 单台机器上跑一个完整 K8s 集群,命令和标准 K8s 完全一致。
安装(国内源别踩坑):

curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -
kubectl get nodes    # 看到 control-plane Ready 即成功

镜像加速(最容易翻车):

mkdir -p /etc/rancher/k3s
vim /etc/rancher/k3s/registries.yaml
systemctl restart k3s                      # 改完必重启
# mirrors.docker.io.endpoint 里填国内源,地址别带前导空格

核心概念四件套(一句话记忆):
| 对象 | 一句话 |
|——|——–|
| Pod | 跑容器的最小单元 |
| Deployment | 管副本数量、挂了自动补 |
| Service | 给一组 Pod 统一入口 |
| Namespace | 空间隔离 |
常用 kubectl 命令:

kubectl get nodes            # 看节点
kubectl get pods             # 看所有 Pod
kubectl get deployment       # 看部署
kubectl get svc              # 看服务(找访问端口)
kubectl create deployment web --image=nginx   # 创建部署
kubectl scale deployment web --replicas=3     # ★一条命令扩到3个
kubectl expose deployment web --port=80 --type=NodePort   # 暴露访问入口
kubectl logs deploy/web --tail=50             # 看某个部署日志
kubectl rollout restart deployment web        # 改了配置后重启生效
kubectl describe pod web-xxxx | tail -20      # 看 Pod 详情/报错

四、踩坑速记

场景坑解决
权限docker.sock permission deniedusermod -aG docker $USER
安装k3s GitHub 下载被重置用 ranche-mirror 国内源
拉不到镜像ImagePullBackOff测源可用性 / ctr -n k8s.io images pull
改配置不生效规则加了没反应ConfigMap 改动要 rollout restart