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 denied | usermod -aG docker $USER |
| 安装 | k3s GitHub 下载被重置 | 用 ranche-mirror 国内源 |
| 拉不到镜像 | ImagePullBackOff | 测源可用性 / ctr -n k8s.io images pull |
| 改配置不生效 | 规则加了没反应 | ConfigMap 改动要 rollout restart |