6.1 镜像 (Images)
想要高效使用 Docker,首先需要理解几个关键术语:镜像,容器
和 注册表
。咱们一起来搞清楚它们的用途以及它们之间是怎么协作的。
Docker 镜像 就是一个模板,用来创建容器。镜像包括了运行应用程序所需的一切:操作系统、应用程序、库与依赖、还有配置文件。如果类比到 OOP: Docker 镜像就像是一个类,而容器就是类的对象。镜像是通过 Dockerfile 来创建的,Dockerfile 是一个描述创建镜像步骤的文本文件。
镜像的主要特性:
- 分层结构: 镜像由多个层组成。每个镜像都有一个基础层,后续的每一层都是对上一层的修改。这种设计不仅能节省空间,还加速了下载速度。
- 可复用性: 一个镜像可以被用来创建多个容器。
- 可移植性: 镜像可以在不同的系统中互相传递,这使得它们在开发、测试以及在不同环境中部署应用非常理想。
镜像的使用示例:
创建自己的镜像: 你可以通过编写 Dockerfile 来创建你自己的镜像,在文件中指定应用程序及其依赖的设置。
FROM ubuntu:latest
RUN apt-get update && apt-get install -y python3
COPY . /app
CMD ["python3", "/app/app.py"]
使用现成的镜像: 你也可以使用 Docker Hub 上已有的镜像,快速部署一些标准的应用程序,比如 Web 服务器或者数据库。
docker pull nginx
这个命令会从 Docker Hub 公共存储库中下载 nginx 镜像。
6.2 容器(Containers)
Docker 容器是镜像的运行实例。容器将应用程序及其依赖项隔离在单独的运行环境中,这样可以独立于主机系统和其他容器运行。容器非常轻量,因为它们使用的是主机操作系统的内核,而不像虚拟机需要创建一个单独的内核。
容器的主要特性:
- 隔离: 容器将应用程序隔离,保证它们独立运行,并防止依赖冲突。
- 轻量: 与虚拟机相比,容器消耗更少的资源,因为它们不需要单独的操作系统。
- 快速启动: 容器的启动和停止速度比虚拟机快很多,这使得它们非常适合动态环境和扩展。
容器的使用示例:
运行容器: 你可以使用 docker run 命令从镜像运行容器。
docker run -d -p 80:80 --name mynginx nginx
管理容器: Docker 提供了用于管理容器的命令:start、stop、restart、rm 和 exec。
docker stop mynginx
docker rm mynginx
你将在接下来的讲座中了解所有命令及其参数。
6.3 注册表 (Registries)
Docker注册表 是Docker镜像的存储库。注册表让开发者和组织可以存储、管理和分发容器镜像。有公开的和私有的注册表。
注册表的主要特点:
- 公开注册表: 类似Docker Hub,提供由社区或官方开发者创建的大量镜像的访问权限。
- 私有注册表: 用于在组织内部存储和管理镜像,提供访问控制和安全性。
- 与CI/CD集成: 注册表可以轻松与持续集成和部署系统集成,从而自动化镜像的构建和部署流程。
注册表的使用示例:
1. Docker Hub: 公共的(也是最受欢迎的)Docker镜像注册表。提供许多现成的(且通常是经过验证的,可以通过下载统计看到)镜像的访问权限。
docker pull nginx
docker push myusername/myimage:tag
2. 私有注册表: 你可以通过Docker Registry设置并使用自己的注册表。
docker run -d -p 5000:5000 --name registry registry:2
docker tag myimage localhost:5000/myimage
docker push localhost:5000/myimage
镜像、容器和注册表的交互
这三个组件密切相关,构成了使用Docker的基础:
- 创建镜像: 开发者通过Dockerfile创建镜像并将其保存在本地。
- 将镜像上传到注册表: 镜像上传到注册表(比如Docker Hub或私有注册表),在这里存储,并可供其他用户或系统使用。
- 启动容器: 用户从注册表下载镜像并启动容器,从而隔离应用程序并确保其运行。
6.4 编排 (Orchestration)
编排 是在分布式环境中管理多个容器的过程。编排工具帮助自动化部署、扩展和管理容器。
- Kubernetes: 最流行的容器编排平台,可以管理不同节点上的容器集群。
- Docker Swarm: Docker内置的编排平台,用于创建和管理Docker集群。
- 编排功能: 自动扩展、自我修复、网络管理和负载均衡。
6.5 网络 (Networks)
Docker 的网络功能让容器之间以及容器与外部世界互相通信。Docker 提供了几种不同类型的网络来满足各种使用场景。
- Bridge: 默认的网络模式,由 Docker 创建。桥接网络中的容器可以互相通信。
- Host: 容器使用主机机器的网络接口,直接访问它们。
- Overlay: 用于在多个 Docker 守护进程之间创建网络。需要用于编排。
- None: 禁用容器的所有网络接口。对于隔离任务非常有用。
6.6 卷 (Volumes)
卷 (Volumes) 是一种用于容器数据持久化存储的机制。它可以将数据保存到容器外部,从而避免在容器重启或删除时数据丢失。
- 创建卷: 卷通过命令 docker volume create 创建。
- 挂载卷: 卷通过运行时添加
-v
参数连接到容器。 - 优势: 卷提供了方便的数据保存和容器间数据共享,并且相比绑定目录 (bind mounts),性能更好。
重要!
卷是一个虚拟硬盘,可以连接到虚拟机或容器。通常存储在宿主操作系统中,作为普通文件存在。
GO TO FULL VERSION