自学内容网 自学内容网

Docker实践和应用详解

Docker实践和应用详解

一、引言

Docker 是一个开源的应用容器引擎,它允许开发者打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

在这里插入图片描述

二、Docker基础

1、Docker 安装

在 Linux 系统上安装 Docker 的步骤如下:

# 更新软件包
sudo apt-get update

# 安装依赖
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common

# 添加 Docker 官方的 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 设置稳定版仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 安装 Docker
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

# 启动 Docker 并设置开机启动
sudo systemctl start docker
sudo systemctl enable docker

# 验证安装是否成功
docker --version

2、Docker 基本命令

  • 拉取镜像:从 Docker Hub 获取官方镜像
docker pull ubuntu:latest
  • 启动容器:启动一个 Ubuntu 容器并进入交互模式
docker run -it ubuntu:latest /bin/bash
  • 查看运行中的容器:列出当前正在运行的容器
docker ps
  • 停止容器:停止指定的容器
docker stop <container_id>
  • 删除容器:删除已停止的容器
docker rm <container_id>
  • 删除镜像:删除本地的镜像
docker rmi ubuntu:latest

三、Docker 应用实践

1、使用 Docker 构建 Web 应用

我们将通过 Docker 来构建一个简单的 Node.js Web 应用,并打包为 Docker 镜像以便运行在不同环境中。

1.1、创建 Node.js 项目
  1. 创建项目目录:
mkdir docker-node-app
cd docker-node-app
  1. 初始化项目并安装依赖:
npm init -y
npm install express
  1. 编写 app.js
// app.js
const express = require('express');
const app = express();
const PORT = 3000;
app.get('/', (req, res) => {
    res.send('Hello, Docker!');
});
  1. 编写 Dockerfile
FROM node:14
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]
  1. 构建并运行 Docker 容器:
docker build -t docker-node-app .
docker run -p 3000:3000 docker-node-app

2、Docker Compose 多容器应用

假设我们有一个包含前端 React 应用和后端 Node.js API 的 Web 服务,我们希望通过 Docker Compose 来编排和部署这两个服务。

  1. 项目结构
my-webapp/
├── frontend/ # React 应用
├── backend/  # Node.js API
└── docker-compose.yml
  1. 编写 docker-compose.yml
version: '3.8'
services:
  frontend:
    build: ./frontend
    ports:
      - "3000:3000"
    depends_on:
      - backend
  backend:
    build: ./backend
    ports:
      - "4000:4000"
    environment:
      - MONGO_URI=mongodb://mongo:27017/mydatabase
  mongo:
    image: mongo:latest
    ports:
      - "27017:27017"
    volumes:
      - mongo-data:/data/db
volumes:
  mongo-data:
  1. 构建和运行服务

在项目根目录下执行:

docker-compose up --build

这将根据 docker-compose.yml 文件构建并启动所有服务。访问 http://localhost:3000 即可查看 React 前端应用,它会与运行在 http://localhost:4000 的 Node.js 后端 API 进行交互。

四、Docker 在生产环境中的应用

在生产环境中,Docker 结合 Kubernetes(K8s)等容器编排工具,能够实现大规模应用的自动化部署、扩展和管理。以下是一个实际的应用案例,展示了如何使用 Docker 和 Kubernetes 来部署和管理一个电子商务应用。

实际应用案例:电子商务应用

1. 部署架构

我们的 Kubernetes 集群采用主从架构,包括以下组件:

  • 主节点(Master Node):负责集群管理、调度和控制平面操作。
  • 工作节点(Worker Node):承载容器实例运行的节点,执行主节点的指令。
2. 应用组件

该电子商务应用的主要组件包括:

  • 前端应用(Frontend App):使用 React 框架编写,容器化部署在 Kubernetes 集群中,负责用户界面展示和交互。
  • 后端应用(Backend App):使用 Node.js 编写,处理用户请求,管理产品目录和订单信息,容器化部署在 Kubernetes 集群中。
  • 数据库(Database):使用 MySQL 作为关系型数据库,通过 Kubernetes 的持久化存储卷(Persistent Volume)进行数据持久化,存储产品和订单数据。
  • 负载均衡器(Load Balancer):通过 Kubernetes 内部负载均衡器,将前端应用的请求分发给多个后端应用实例,实现负载均衡和高可用性。
3. 部署流程

以下是该案例的部署流程:

  1. 配置 Kubernetes 集群:包括安装和配置 Kubernetes 主节点和工作节点。
  2. 创建容器镜像:为前端应用和后端应用创建 Docker 容器镜像,并上传到容器镜像仓库。
    docker build -t your-docker-registry/flask-app:latest .
    docker push your-docker-registry/flask-app:latest
    
  3. 创建 Kubernetes 对象:使用 Kubernetes 命令和 YAML 文件,创建 Kubernetes 的 Deployment、Service、Ingress 和 Persistent Volume 等对象,以及配置相关的资源配额和自动扩展策略。
  4. 应用部署和扩展:使用 kubectl 命令或 Kubernetes 控制台,部署前端应用和后端应用的 Deployment,并进行水平扩展。
    kubectl apply -f flask-deployment.yaml
    kubectl apply -f flask-service.yaml
    
  5. 配置负载均衡:创建 Kubernetes 的 Service 和 Ingress 对象,将前端应用暴露给外部流量,并配置负载均衡规则。
  6. 数据库持久化:创建 Kubernetes 的 Persistent Volume 和 Persistent Volume Claim 对象,将 MySQL 数据库的数据持久化存储,并绑定到后端应用的 Deployment。
  7. 监控和日志:配置 Kubernetes 的监控和日志系统,收集和分析集群和应用的性能指标和日志数据。

通过这个案例,我们可以看到 Docker 和 Kubernetes 如何在生产环境中提供强大的容器化应用部署和管理能力。这种集成方案不仅提高了运维效率,还为系统稳定性和可扩展性提供了强有力的支持 。

五、总结

Docker 提供了一种轻量级、可移植的容器化解决方案,使得应用的部署、扩展和管理变得更加简单和高效。通过本文的实践和应用详解,我们可以看到 Docker 在开发、测试和生产环境中的广泛应用。无论是构建简单的 Web 应用,还是实现复杂的多容器应用部署,Docker 都展现出了其强大的功能和灵活性。


版权声明:本博客内容为原创,转载请保留原文链接及作者信息。

参考文章


原文地址:https://blog.csdn.net/NiNg_1_234/article/details/144371097

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!