当前位置: 首页 > news >正文

【k8s004】 Docker 打包 K8s镜像

文章目录

    • 一. 准备工作
      • 1. 安装 Docker: [官方安装文档](https://docs.docker.com/get-docker/)
      • 2. 准备应用代码(示例使用 Node.js 应用)
    • 二. 创建 Dockerfile
      • 3、构建镜像(注意最后的点号)
      • 4、测试运行
      • 5、推送镜像到仓库
      • 6、 Kubernetes 部署文件示例
      • 7、部署到 Kubernetes
    • 三、注意事项
      • 8、常用调试命令
    • 四、注意事项
      • 9、最佳实践

一. 准备工作

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 流水线自动化构建和部署
  • 为不同环境维护不同的部署清单
  • 定期更新基础镜像的安全补丁
http://www.dtcms.com/a/75326.html

相关文章:

  • 《灵珠觉醒:从零到算法金仙的C++修炼》卷三·天劫试炼(67)混元无极算素数 - 埃拉托斯特尼筛法
  • 阿里云服务器环境部署 一
  • 【从0到1搞懂大模型】RNN基础(4)
  • 路由的原理
  • pytorch小记(九):pytorch中创建指定形状的张量: torch.empty
  • python中a is None 和 a==None有区别吗
  • 簡易傢俬購物Apps
  • 设计模式(行为型)-观察者模式
  • Linux内核传输层源码分析SCTP
  • IP关联的定义和避免方法
  • 高可用环境下Nginx服务管理脚本优化实践
  • 应用商店上新:Couchbase Enterprise Server集群
  • 【RHCE实验】搭建主从DNS、WEB等服务器
  • Spring Boot整合JWT 实现双Token机制
  • Oracle GoldenGate 全面解析
  • Description of a Poisson Imagery Super Resolution Algorithm 论文阅读
  • 管家婆实用贴-如何设置打印机共享
  • Vue.js 与 RESTful API 集成之处理 GET、POST 请求
  • Flutter_学习记录_状态管理之GetX
  • Spring Security 教程:从入门到精通(含 OAuth2 接入)
  • 利用JavaScript在网页中获取当前的时间并展现在网页上
  • 【算法day13】最长公共前缀
  • 接上一篇,C++中,如何设计等价于Qt的信号与槽机制。
  • TCP/IP四层网络模型
  • LeetCode hot 100 每日一题(10)——56. 合并区间
  • Chainlit 自定义元素开发指南:使用 JSX 和受限导入实现交互式界面
  • 软件工程:数据字典
  • 图解AUTOSAR_CP_WatchdogDriver
  • Python的类和对象(4)
  • Python函数默认参数为什么不能用可变对象