跳转到内容

Docker概念和架构 ​

课程介绍 ​

Docker是目前最流行的容器化技术,它可以将应用及其依赖打包成一个容器,实现快速部署和扩展。本课程将详细讲解Docker的概念、架构、核心组件等内容,帮助你掌握Docker的基础理论知识。

1. Docker概述 ​

1.1 什么是Docker ​

Docker是一个开源的容器化平台。

Docker的定义: Docker是一个开源的容器化平台,它可以将应用及其依赖打包成一个容器,实现快速部署和扩展。

Docker的特点:

特点说明
轻量级容器比虚拟机更轻量
快速部署容器启动速度快
一致性容器在不同环境中运行一致
可移植性容器可以在任何地方运行
隔离性容器之间相互隔离

1.2 Docker的历史 ​

Docker的发展历史。

Docker的发展:

时间事件
2013年Docker项目开源
2014年Docker 1.0发布
2015年Docker Registry v2发布
2017年Docker CE和Docker EE发布
2019年Docker Desktop发布
2020年Docker Hub免费版本限制
2021年Docker Desktop收费

1.3 Docker的优势 ​

Docker的优势。

Docker的优势:

优势说明
快速部署容器启动速度快
资源隔离容器之间相互隔离
环境一致性容器在不同环境中运行一致
可移植性容器可以在任何地方运行
易于扩展容器可以快速扩展
版本控制容器镜像可以版本控制
持续集成容器支持持续集成

2. Docker核心概念 ​

2.1 镜像(Image) ​

镜像是Docker容器的基础。

镜像的定义: 镜像是一个只读的模板,包含了运行应用所需的所有文件和配置。

镜像的特点:

特点说明
只读镜像一旦创建就不可修改
分层镜像采用分层存储
可重用镜像可以被多个容器使用
可版本化镜像可以版本控制

镜像示例:

bash
# 查看本地镜像
docker images

# 拉取镜像
docker pull ubuntu:20.04

# 构建镜像
docker build -t myapp .

2.2 容器(Container) ​

容器是Docker的运行实例。

容器的定义: 容器是镜像的运行实例,包含了运行中的应用及其依赖。

容器的特点:

特点说明
可运行容器是可运行的实例
可修改容器可以被修改
可隔离容器之间相互隔离
可删除容器可以被删除

容器示例:

bash
# 运行容器
docker run -d --name mycontainer ubuntu:20.04

# 查看运行中的容器
docker ps

# 查看所有容器
docker ps -a

# 停止容器
docker stop mycontainer

# 删除容器
docker rm mycontainer

2.3 仓库(Repository) ​

仓库是存储Docker镜像的地方。

仓库的定义: 仓库是存储Docker镜像的地方,分为公共仓库和私有仓库。

仓库的类型:

类型说明
公共仓库公开的镜像仓库,如Docker Hub
私有仓库私有的镜像仓库,如Harbor

仓库示例:

bash
# 登录Docker Hub
docker login

# 推送镜像到Docker Hub
docker push username/myapp

# 从Docker Hub拉取镜像
docker pull username/myapp

2.4 网络(Network) ​

网络是Docker容器之间通信的桥梁。

网络的定义: 网络是Docker容器之间通信的桥梁,支持多种网络模式。

网络的模式:

模式说明
bridge默认网络模式
host主机网络模式
none无网络模式
overlay覆盖网络模式

网络示例:

bash
# 查看Docker网络
docker network ls

# 创建Docker网络
docker network create mynetwork

# 运行容器并连接网络
docker run -d --name mycontainer --network mynetwork ubuntu:20.04

2.5 存储(Volume) ​

存储是Docker容器持久化数据的方式。

存储的定义: 存储是Docker容器持久化数据的方式,支持多种存储驱动。

存储的类型:

类型说明
volume卷存储
bind mount绑定挂载
tmpfs临时文件系统

存储示例:

bash
# 查看Docker卷
docker volume ls

# 创建Docker卷
docker volume create myvolume

# 运行容器并挂载卷
docker run -d --name mycontainer -v myvolume:/data ubuntu:20.04

3. Docker架构 ​

3.1 Docker架构概述 ​

Docker采用客户端-服务器架构。

Docker架构:

组件说明
Docker客户端用于与Docker守护进程通信
Docker守护进程负责构建、运行和管理容器
Docker Registry存储Docker镜像
Docker对象包括镜像、容器、网络和卷

3.2 Docker组件 ​

Docker的核心组件。

Docker组件:

组件说明
Docker EngineDocker引擎,包含Docker守护进程和Docker API
Docker CLIDocker命令行工具
Docker Compose用于定义和运行多容器应用
Docker Machine用于在虚拟机上安装Docker
Docker SwarmDocker集群管理工具

3.3 Docker工作流程 ​

Docker的工作流程。

Docker工作流程:

  1. 构建镜像:使用Dockerfile构建镜像
  2. 推送镜像:将镜像推送到Registry
  3. 拉取镜像:从Registry拉取镜像
  4. 运行容器:基于镜像运行容器
  5. 管理容器:管理容器的生命周期

Docker工作流程示例:

bash
# 1. 构建镜像
docker build -t myapp .

# 2. 推送镜像
docker push username/myapp

# 3. 拉取镜像
docker pull username/myapp

# 4. 运行容器
docker run -d --name mycontainer username/myapp

# 5. 管理容器
docker stop mycontainer
docker start mycontainer
docker rm mycontainer

4. Docker与虚拟机的区别 ​

4.1 Docker与虚拟机的对比 ​

Docker和虚拟机的对比。

对比表:

特性Docker虚拟机
启动时间秒级分钟级
资源占用低高
隔离级别容器级硬件级
镜像大小MB级GB级
性能接近原生有性能损耗
可移植性高低
管理复杂度低高

4.2 Docker的优势 ​

Docker相比虚拟机的优势。

Docker的优势:

优势说明
启动速度快容器启动速度快
资源占用低容器占用资源少
隔离级别适中容器提供足够的隔离
镜像体积小容器镜像体积小
性能接近原生容器性能接近原生
可移植性高容器可以在任何地方运行
管理复杂度低容器管理简单

5. Docker生态系统 ​

5.1 Docker生态系统概述 ​

Docker生态系统包括多个工具和服务。

Docker生态系统:

工具/服务说明
Docker EngineDocker引擎
Docker HubDocker官方镜像仓库
Docker Compose多容器应用编排
Docker SwarmDocker集群管理
Docker Machine虚拟机上安装Docker
Docker Desktop桌面端Docker
Docker Registry镜像仓库
Docker Cloud容器云服务

5.2 第三方工具 ​

Docker的第三方工具。

第三方工具:

工具说明
Harbor企业级镜像仓库
PortainerDocker管理界面
Kubernetes容器编排平台
Rancher容器管理平台
HelmKubernetes包管理
Istio服务网格

6. 实战案例 ​

案例1:运行一个简单的Nginx容器 ​

场景:运行一个简单的Nginx容器。

步骤:

bash
# 1. 拉取Nginx镜像
docker pull nginx

# 2. 运行Nginx容器
docker run -d --name nginx-container -p 80:80 nginx

# 3. 查看容器状态
docker ps

# 4. 访问Nginx
curl http://localhost

# 5. 停止容器
docker stop nginx-container

# 6. 删除容器
docker rm nginx-container

案例2:构建一个自定义镜像 ​

场景:构建一个自定义的Ubuntu镜像。

步骤:

bash
# 1. 创建Dockerfile
cat > Dockerfile << EOF
FROM ubuntu:20.04

RUN apt-get update && apt-get install -y curl

CMD ["curl", "--version"]
EOF

# 2. 构建镜像
docker build -t myubuntu .

# 3. 查看镜像
docker images

# 4. 运行容器
docker run --name myubuntu-container myubuntu

# 5. 删除容器
docker rm myubuntu-container

# 6. 删除镜像
docker rmi myubuntu

7. 常见问题 ​

问题1:Docker命令需要sudo权限 ​

问题:Docker命令需要sudo权限。

解决方法:

bash
# 将用户添加到docker组
sudo usermod -aG docker $USER

# 重新登录
exit

# 测试Docker命令
docker ps

问题2:Docker镜像拉取失败 ​

问题:Docker镜像拉取失败。

解决方法:

bash
# 检查网络连接
ping google.com

# 更换Docker镜像源
sudo vim /etc/docker/daemon.json

问题3:Docker容器启动失败 ​

问题:Docker容器启动失败。

解决方法:

bash
# 查看容器日志
docker logs container-name

# 检查容器配置
docker inspect container-name

# 重新运行容器
docker run -d --name container-name image-name

课程总结 ​

这节课我们学习了Docker概念和架构。

核心内容:

  • Docker概述(什么是Docker、Docker的历史、Docker的优势)
  • Docker核心概念(镜像、容器、仓库、网络、存储)
  • Docker架构(Docker架构概述、Docker组件、Docker工作流程)
  • Docker与虚拟机的区别
  • Docker生态系统
  • 实战案例(运行Nginx容器、构建自定义镜像)
  • 常见问题

重要命令:

  • docker images:查看本地镜像
  • docker pull:拉取镜像
  • docker build:构建镜像
  • docker run:运行容器
  • docker ps:查看容器
  • docker stop:停止容器
  • docker rm:删除容器
  • docker push:推送镜像

Docker是容器化技术的主流选择,掌握这些知识后,我们将在后续课程中学习Docker的安装和配置、镜像和容器管理等内容。

课后练习 ​

练习1(基础) ​

运行一个Nginx容器,并访问。

练习2(进阶) ​

构建一个自定义的Ubuntu镜像,并运行容器。

练习3(拓展) ​

创建一个Docker网络,并在网络中运行两个容器,测试它们之间的通信。

评论区

专业的Linux技术学习平台,从入门到精通的完整学习路径