【k8s004】 Docker 打包 K8s镜像

发布于:2025-03-18 ⋅ 阅读:(25) ⋅ 点赞:(0)

一. 准备工作

1. 安装 Docker: 官方安装文档

https://docs.docker.com/get-docker

2. 准备应用代码(示例使用 Node.js 应用)

二. 创建 Dockerfile

```dockerfile
# 使用官方基础镜像
FROM node:18-alpine

# 设置工作目录
WORKDIR /app

# 复制依赖文件
COPY package*.json ./

# 安装依赖
RUN npm install

# 复制源代码
COPY . .

# 暴露端口
EXPOSE 8080

# 启动命令
CMD ["npm", "start"]
```

3、构建镜像(注意最后的点号)

docker build -t my-app:1.0.0 .

#查看镜像
docker images | grep my-app

4、测试运行

运行容器

docker run -d -p 8080:8080 --name my-app my-app:1.0.0

验证运行

curl <http://localhost:8080>

5、推送镜像到仓库

# 登录 Docker Hub
docker login

# 标记镜像
docker tag my-app:1.0.0 username/my-app:1.0.0

# 推送镜像
docker push username/my-app:1.0.0

6、 Kubernetes 部署文件示例

deployment.yaml

 apiVersion: apps/v1
 kind: Deployment
 metadata:
   name: my-app
 spec:
   replicas: 3
   selector:
     matchLabels:
       app: my-app
   template:
     metadata:
       labels:
         app: my-app
     spec:
       containers:
       - name: my-app
         image: username/my-app:1.0.0
         ports:
         - containerPort: 8080
         resources:
           limits:
             memory: "512Mi"
             cpu: "500m"

service.yaml

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

7、部署到 Kubernetes

kubectl apply -f deployment.yaml
kubectl apply -f service.yaml

# 查看部署状态
kubectl get pods
kubectl get service

三、注意事项

  • ‌镜像标签‌: 避免使用 latest 标签,推荐语义化版本控制
  • ‌私有仓库‌: 如果使用私有仓库需配置 imagePullSecrets
  • ‌多阶段构建‌: 生产环境推荐使用多阶段构建减小镜像体积
  • ‌安全扫描‌: 使用 docker scan 扫描镜像漏洞
  • ‌资源限制‌: 在 Deployment 中合理配置 CPU/Memory 限制

8、常用调试命令

# 查看容器日志
kubectl logs <pod-name>

# 进入容器调试
kubectl exec -it <pod-name> -- /bin/sh

# 删除部署
kubectl delete -f deployment.yaml

四、注意事项

9、最佳实践

  • 使用 .dockerignore 文件排除不需要的文件
  • 配置健康检查(liveness/readiness probes)
  • 使用 CI/CD 流水线自动化构建和部署
  • 为不同环境维护不同的部署清单
  • 定期更新基础镜像的安全补丁