Docker容器技术与高可用
目录
Docker概述
Docker 是一种开源的容器化平台,它允许开发者将应用程序及其依赖项(如库、配置文件等)打包到一个轻量级、独立的容器中,从而实现应用程序在不同环境中的快速、一致部署和运行。Docker 的出现极大地简化了应用程序的部署流程,提高了开发、测试和运维的效率
核心概念
- 容器(Container):
- 容器是 Docker 的核心概念,它是一个轻量级、独立的可执行软件包,包含运行应用程序所需的一切:代码、运行时、系统工具、系统库和设置。
- 容器与虚拟机(VM)不同,它们共享宿主机的操作系统内核,因此启动速度更快,资源占用更少。
- 容器之间是隔离的,一个容器的崩溃不会影响其他容器的运行。
- 镜像(Image):
- 镜像是一个只读的模板,用于创建容器。
- 镜像可以包含一个完整的操作系统环境,也可以仅包含应用程序及其依赖项。
- 镜像可以通过 Dockerfile(一种文本文件,包含了一系列指令和参数,用于构建镜像)来创建。
- 仓库(Registry):
- 仓库是集中存储和分发 Docker 镜像的地方。
- 最著名的公共仓库是 Docker Hub,用户可以在上面找到大量的官方镜像和社区镜像。
- 企业也可以搭建自己的私有仓库,用于存储和分发内部使用的镜像。
工作原理
Docker 使用客户端-服务器架构。Docker 客户端(如 docker 命令行工具)与 Docker 守护进程(Docker Daemon)通信,后者负责构建、运行和管理容器。当用户执行 docker run 命令时,Docker 守护进程会:
- 检查本地是否存在指定的镜像。
- 如果不存在,则从仓库中拉取该镜像。
- 使用镜像创建一个新的容器。
- 启动容器,并执行指定的命令或应用程序。
优势
- 环境一致性:容器确保了应用程序在不同环境(开发、测试、生产)中的一致性,减少了“在我的机器上能运行”的问题。
- 快速部署:容器可以快速启动和停止,适合微服务架构和持续集成/持续部署(CI/CD)流程。
- 资源高效:容器共享宿主机的操作系统内核,因此资源占用更少,可以在同一台宿主机上运行更多的容器。
- 隔离性:容器之间是隔离的,提高了系统的安全性和稳定性。
应用场景
- 微服务架构:将大型应用程序拆分为多个小型、独立的服务,每个服务运行在一个容器中。
- 持续集成/持续部署(CI/CD):通过容器化应用程序,实现快速、一致的构建和部署流程。
- 多环境部署:确保应用程序在不同环境(如开发、测试、生产)中的一致性。
- 资源受限环境:在资源受限的环境(如嵌入式系统、物联网设备)中运行应用程序。
Docker容器技术与传统虚拟机的比较
| 特性 | Docker容器 | 虚拟机 |
| 启动速度 | 秒级 | 分钟级 |
| 计算能力损耗 | 几乎没有 | 损耗50%左右 |
| 性能 | 接近原生 | 弱于原生 |
| 系统支持量(单机) | 上千个 | 几十个 |
| 隔离性 | 资源限制 | 完全隔离 |
安装Docker
本次实验连接国内镜像,或许会有些慢
关闭防火墙

下载Docker的repo文件

替换仓库地址

更新索引文件并安装Dokcer

添加国内镜像

修改系统内核

开启Dokcer

Docker基本操作
镜像操作
镜像作为容器的基础,需掌握拉取、查看、构建和删除等操作:
| 操作类型 | 命令示例 | 说明 |
|---|---|---|
| 拉取镜像 | docker pull nginx:latest | 从仓库下载指定镜像(如官方Nginx镜像) |
| 查看本地镜像 | docker images | 列出所有已下载的镜像,显示镜像ID、标签、大小等信息 |
| 构建镜像 | docker build -t myapp:v1 . | 通过当前目录的Dockerfile构建镜像,-t指定标签 |
| 删除镜像 | docker rmi nginx:latest | 删除指定镜像(若镜像被容器引用,需先删除容器) |
容器操作
命令格式:
docker create [选项] 镜像 运行的程序
常用选项:
-i:让容器的输入保持打开的状态
-t:让Docker分配一个伪终端
使用此命令可以查看所有容器的运行状态,添加-a选项,可以列出系统最近一次启动的容器
docker ps -a
容器是镜像的运行实例,需掌握启动、停止、查看和删除等操作:
| 操作类型 | 命令示例 | 说明 |
|---|---|---|
| 运行容器 | docker run -d -p 8080:80 --name web nginx | 后台启动Nginx容器,映射宿主机8080端口到容器80端口,并命名容器为web |
| 查看容器 | docker ps -a | 列出所有容器(-a显示已停止的容器),默认仅显示运行中的容器 |
| 停止容器 | docker stop web | 停止名为web的容器 |
| 启动容器 | docker start web | 启动已停止的容器 |
| 删除容器 | docker rm web | 删除已停止的容器(需先停止容器) |
| 进入容器 | docker exec -it web /bin/bash | 进入运行中的容器交互式终端(如需调试) |
数据持久化
容器数据默认随容器删除而丢失,需通过卷(Volume)或绑定挂载实现持久化:
| 操作类型 | 命令示例 | 说明 |
|---|---|---|
| 创建卷 | docker volume create mydata | 创建名为mydata的卷 |
| 绑定挂载 | docker run -v /host/path:/container/path nginx | 将宿主机目录挂载到容器内部 |
| 使用卷 | docker run -v mydata:/container/path nginx | 将卷mydata挂载到容器内部 |
网络管理
容器间通信需通过Docker网络实现:
| 操作类型 | 命令示例 | 说明 |
|---|---|---|
| 创建网络 | docker network create mynet | 创建名为mynet的自定义网络 |
| 连接容器 | docker run --network mynet nginx | 将容器连接到mynet网络 |
| 查看网络 | docker network ls | 列出所有网络 |
日志与监控
实时查看容器日志和资源使用情况:
| 操作类型 | 命令示例 | 说明 |
|---|---|---|
| 查看日志 | docker logs web | 输出容器web的日志 |
| 实时日志 | docker logs -f web | 实时跟踪容器日志(类似tail -f) |
| 资源监控 | docker stats web | 查看容器CPU、内存等资源使用情况 |
清理操作
释放磁盘空间,删除无用资源:
| 操作类型 | 命令示例 | 说明 |
|---|---|---|
| 删除所有停止容器 | docker container prune | 删除所有已停止的容器 |
| 删除未使用镜像 | docker image prune | 删除未被任何容器引用的镜像 |
| 删除所有无用资源 | docker system prune | 删除所有停止的容器、未使用的网络、悬空镜像和构建缓存 |
实用技巧
快速测试:
docker run --rm -it ubuntu /bin/bash |
运行一次性Ubuntu容器,退出后自动删除(--rm)。
-
环境变量传递:
docker run -e MY_VAR=value nginx通过
-e传递环境变量到容器。 -
资源限制:
docker run -m 512m --cpus=1 nginx限制容器内存为512MB,CPU核心数为1。
容器的导出与导入
导出命令格式:
docker export 容器ID/名称 >文件名
导入命令格式:
文件名|docker import- 生成的镜像名称:标签
鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。
更多推荐

所有评论(0)