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 项目
- 创建项目目录:
mkdir docker-node-app
cd docker-node-app
- 初始化项目并安装依赖:
npm init -y
npm install express
- 编写
app.js
:
// app.js
const express = require('express');
const app = express();
const PORT = 3000;
app.get('/', (req, res) => {
res.send('Hello, Docker!');
});
- 编写
Dockerfile
:
FROM node:14
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]
- 构建并运行 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 来编排和部署这两个服务。
- 项目结构
my-webapp/
├── frontend/ # React 应用
├── backend/ # Node.js API
└── docker-compose.yml
- 编写 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:
- 构建和运行服务
在项目根目录下执行:
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. 部署流程
以下是该案例的部署流程:
- 配置 Kubernetes 集群:包括安装和配置 Kubernetes 主节点和工作节点。
- 创建容器镜像:为前端应用和后端应用创建 Docker 容器镜像,并上传到容器镜像仓库。
docker build -t your-docker-registry/flask-app:latest . docker push your-docker-registry/flask-app:latest
- 创建 Kubernetes 对象:使用 Kubernetes 命令和 YAML 文件,创建 Kubernetes 的 Deployment、Service、Ingress 和 Persistent Volume 等对象,以及配置相关的资源配额和自动扩展策略。
- 应用部署和扩展:使用 kubectl 命令或 Kubernetes 控制台,部署前端应用和后端应用的 Deployment,并进行水平扩展。
kubectl apply -f flask-deployment.yaml kubectl apply -f flask-service.yaml
- 配置负载均衡:创建 Kubernetes 的 Service 和 Ingress 对象,将前端应用暴露给外部流量,并配置负载均衡规则。
- 数据库持久化:创建 Kubernetes 的 Persistent Volume 和 Persistent Volume Claim 对象,将 MySQL 数据库的数据持久化存储,并绑定到后端应用的 Deployment。
- 监控和日志:配置 Kubernetes 的监控和日志系统,收集和分析集群和应用的性能指标和日志数据。
通过这个案例,我们可以看到 Docker 和 Kubernetes 如何在生产环境中提供强大的容器化应用部署和管理能力。这种集成方案不仅提高了运维效率,还为系统稳定性和可扩展性提供了强有力的支持 。
五、总结
Docker 提供了一种轻量级、可移植的容器化解决方案,使得应用的部署、扩展和管理变得更加简单和高效。通过本文的实践和应用详解,我们可以看到 Docker 在开发、测试和生产环境中的广泛应用。无论是构建简单的 Web 应用,还是实现复杂的多容器应用部署,Docker 都展现出了其强大的功能和灵活性。
版权声明:本博客内容为原创,转载请保留原文链接及作者信息。
参考文章:
原文地址:https://blog.csdn.net/NiNg_1_234/article/details/144371097
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!