温馨提示×

ubuntu虚拟机容器化应用实践

小樊
44
2025-08-27 16:50:45
栏目: 云计算

以下是在Ubuntu虚拟机上实践容器化应用的步骤,涵盖Docker和Kubernetes两种主流方案:

一、Docker容器化应用

1. 环境准备

  • 安装Docker
    sudo apt update
    sudo apt install docker.io
    sudo systemctl start docker && sudo systemctl enable docker
    
  • 验证安装
    sudo docker run hello-world
    

2. 构建应用镜像

  • 创建Dockerfile
    以Python应用为例,在项目目录创建Dockerfile
    FROM python:3.9-slim
    WORKDIR /app
    COPY . /app
    RUN pip install -r requirements.txt
    EXPOSE 5000
    CMD ["python", "app.py"]
    
  • 构建镜像
    docker build -t my-app:1.0 .
    

3. 运行容器

  • 单容器运行
    docker run -d -p 5000:5000 --name my-app my-app:1.0
    
  • 多容器编排(Docker Compose)
    创建docker-compose.yml
    version: '3'
    services:
      web:
        image: my-app:1.0
        ports:
          - "5000:5000"
      redis:
        image: redis:latest
    
    启动服务:
    docker-compose up -d
    

二、Kubernetes容器化应用

1. 环境准备

  • 安装Docker和Kubernetes
    sudo apt update
    sudo apt install -y docker.io kubelet kubeadm kubectl
    sudo systemctl enable docker && sudo systemctl start docker
    
  • 配置Docker使用systemd作为CGroup驱动
    编辑/etc/docker/daemon.json
    {
      "exec-opts": ["native.cgroupdriver=systemd"]
    }
    sudo systemctl restart docker
    

2. 部署Kubernetes集群

  • 初始化Master节点
    sudo kubeadm init --pod-network-cidr=10.244.0.0/16
    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
  • 加入Worker节点
    在其他虚拟机上执行Master节点输出的kubeadm join命令。

3. 部署容器化应用

  • 创建Deployment
    编写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: my-app:1.0
            ports:
            - containerPort: 5000
    
    部署应用:
    kubectl apply -f deployment.yaml
    
  • 暴露服务
    创建service.yaml
    apiVersion: v1
    kind: Service
    metadata:
      name: my-app-service
    spec:
      selector:
        app: my-app
      ports:
        - protocol: TCP
          port: 80
          targetPort: 5000
      type: LoadBalancer
    
    应用服务:
    kubectl apply -f service.yaml
    

4. 验证与管理

  • 查看Pod状态
    kubectl get pods
    
  • 查看服务详情
    kubectl get services
    
  • 删除资源
    kubectl delete -f deployment.yaml
    kubectl delete -f service.yaml
    

三、注意事项

  1. 资源分配
    • 虚拟机需预留足够CPU、内存和磁盘空间(建议至少2核4GB)。
    • 可通过kubectl top nodes监控节点资源使用情况。
  2. 网络配置
    • 确保虚拟机间网络互通,Kubernetes集群需配置CNI插件(如Flannel/Calico)。
  3. 数据持久化
    • 使用volumes将容器数据挂载到宿主机或云存储,避免重启后数据丢失。

通过以上步骤,可在Ubuntu虚拟机上完成从单容器到集群化的应用部署,满足开发、测试或轻量级生产环境需求。

0