Docker实践和应用详解

文章目录

  • Docker实践和应用详解
    • 一、引言
    • 二、Docker基础
      • [1、Docker 安装](#1、Docker 安装)
      • [2、Docker 基本命令](#2、Docker 基本命令)
    • [三、Docker 应用实践](#三、Docker 应用实践)
      • [1、使用 Docker 构建 Web 应用](#1、使用 Docker 构建 Web 应用)
        • [1.1、创建 Node.js 项目](#1.1、创建 Node.js 项目)
      • [2、Docker Compose 多容器应用](#2、Docker Compose 多容器应用)
    • [四、Docker 在生产环境中的应用](#四、Docker 在生产环境中的应用)
    • 五、总结

Docker实践和应用详解

一、引言

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

二、Docker基础

1、Docker 安装

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

bash 复制代码
# 更新软件包
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 获取官方镜像
bash 复制代码
docker pull ubuntu:latest
  • 启动容器:启动一个 Ubuntu 容器并进入交互模式
bash 复制代码
docker run -it ubuntu:latest /bin/bash
  • 查看运行中的容器:列出当前正在运行的容器
bash 复制代码
docker ps
  • 停止容器:停止指定的容器
bash 复制代码
docker stop <container_id>
  • 删除容器:删除已停止的容器
bash 复制代码
docker rm <container_id>
  • 删除镜像:删除本地的镜像
bash 复制代码
docker rmi ubuntu:latest

三、Docker 应用实践

1、使用 Docker 构建 Web 应用

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

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

  2. 编写 docker-compose.yml

yaml 复制代码
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. 构建和运行服务

在项目根目录下执行:

bash 复制代码
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 容器镜像,并上传到容器镜像仓库。

    bash 复制代码
    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,并进行水平扩展。

    bash 复制代码
    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 都展现出了其强大的功能和灵活性。


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

参考文章

相关推荐
KwokRoot19 分钟前
Nginx正向代理配置
运维·nginx
encoding-console35 分钟前
docker安装consul并启动的详细步骤
docker·容器·consul
m0_748229991 小时前
从零到上线:Node.js 项目的完整部署流程(包含 Docker 和 CICD)
docker·容器·node.js
shelby_loo1 小时前
Azure学生订阅上手实操:快速搭建Docker+WordPress环境
microsoft·docker·azure
互联网资讯2 小时前
详解共享WiFi小程序怎么弄!
大数据·运维·网络·人工智能·小程序·生活
yanzhyan2 小时前
【Linux】Linux命令:free
linux·运维·服务器
web前端神器2 小时前
服务器机房迁移,centos系统root无法登录,也无法联网等问题
运维·服务器·centos
小诺大人3 小时前
Docker 安装 elk(elasticsearch、logstash、kibana)、ES安装ik分词器
elk·elasticsearch·docker
孤寂大仙v4 小时前
【Linux】环境变量
linux·运维·服务器
稳联技术4 小时前
DeviceNet转Profinet网关+FANUC机器人:打造工业界的灭霸手套,掌控无限可能
运维·服务器