🛥️ Docker 简介:核心概念
Docker 就像一个神奇的工具箱,让开发者可以在微型便携的“容器”中构建、发布和管理他们的应用程序。容器就像虚拟房间,但比传统的虚拟机 (VM) 速度更快、效率更高。得益于 Docker,容器变得非常流行,如今已成为现代软件开发的必备工具。
什么是 Docker?
Docker 是一个开源平台,可自动在容器内部署应用程序。容器是独立的环境,包含运行应用程序所需的一切,包括代码、运行时、库和系统工具。Docker 为开发人员提供了构建、管理和分发这些容器的工具。
什么是开放容器计划(OCI)?
开放容器倡议(OCI)是由 Linux 基金会于 2015 年成立的开放治理结构,旨在为容器运行时和镜像规范创建行业标准,确保跨容器生态系统的互操作性。
Docker 最初开发了自己的容器运行时和镜像格式。然而,随着容器的兴起以及对更广泛标准化的需求,Docker 将其容器运行时技术runc贡献给了 OCI。如今,Docker 的生态系统遵循 OCI 标准,这使得 Docker 容器与其他符合 OCI 标准的运行时和工具兼容。
通过符合 OCI 标准,Docker 确保其容器和镜像可以在各种平台和工具上运行,从而促进更加开放和协作的容器生态系统。
容器为何有用?
- 可移植性:容器可以在任何支持 OCI 兼容运行时的系统上运行,确保应用程序在不同环境中的行为一致。
- 效率:容器共享主机系统的内核,与虚拟机相比,它们更轻量且启动速度更快。
- 可扩展性:容器可以轻松扩大或缩小以处理不同的负载。
- 一致性:容器通过封装所有依赖项和配置来减少“它在我的计算机上运行”的问题。
容器、虚拟机和裸机
裸机:
- 直接在物理硬件上运行,无需任何虚拟化。
- 提供最高性能和对硬件资源的直接访问。
- 最适合需要完全控制硬件的高性能工作负载和应用程序。
虚拟机(VM):
- 包括完整的操作系统,使它们变得更重。
- 需要更多资源并且需要更长时间才能启动。
- 适合在单台物理机上运行多个OS环境。
容器:
- 共享主机操作系统内核,使其变得轻量级。
- 使用更少的内存并快速启动。
- 非常适合微服务和快速部署。
方面 | 容器 | 虚拟机 | 裸机 |
---|---|---|---|
资源效率 | 高的 | 缓和 | 最高 |
启动时间 | 秒 | 分钟 | 不适用 |
*隔离 * | 流程级 | 完整的操作系统级别 | 完全物理隔离 |
可移植性 | 非常高 | 缓和 | 低的 |
表现 | 近原生 | 缓和 | 本国的 |
用例 | 微服务、CI/CD 管道 | 遗留应用程序、操作系统测试 | 高性能计算 |
Docker术语
- Dockerfile:包含构建 Docker 镜像的说明的文本文件。
- 镜像:用于创建容器的只读模板。镜像由 Dockerfile 构建,并遵循 OCI 镜像规范。
- 容器:镜像的可运行实例。容器可以被启动、停止和删除。
- 注册表:Docker 镜像的存储库。Docker Hub 是一个流行的公共注册表,其他符合 OCI 标准的注册表包括 Harbor 和 Quay。
Docker 命令行速查表
0.基本 Docker 命令
docker --version
:检查 Docker 版本。docker help
:显示 Docker 命令和选项。docker info
:显示有关 Docker 的系统范围信息。
1.图片
docker images
:列出所有本地镜像。docker pull <image>
:从 Docker Hub 下载镜像。docker build -t <image_name> .
:从当前目录中的 Dockerfile 构建镜像。docker rmi <image>
:删除图像。docker tag <source_image> <new_image>
:用新名称标记图像。
2.容器
docker run <image>
:从图像运行容器。docker run -it <image>
:以交互模式运行容器。docker run -d <image>
:以分离模式运行容器。docker ps
:列出正在运行的容器。docker ps -a
:列出所有容器(包括已停止的容器)。docker stop <container>
:停止正在运行的容器。docker start <container>
:启动一个已停止的容器。docker restart <container>
:重新启动容器。docker rm <container>
:移除已停止的容器。docker exec -it <container> <command>
:在正在运行的容器内运行命令。
3.容器管理
docker logs <container>
:查看容器的日志。docker top <container>
:显示容器中正在运行的进程。docker stats <container>
:显示资源使用情况统计的实时流。docker inspect <container>
:查看容器或镜像的详细信息。docker rename <old_name> <new_name>
:重命名容器。
4.网络
docker network ls
:列出所有 Docker 网络。docker network create <network_name>
:创建新网络。docker network connect <network> <container>
:将容器连接到网络。docker network disconnect <network> <container>
:断开容器与网络的连接。docker network inspect <network>
:查看有关网络的详细信息。
5.卷
docker volume ls
:列出所有卷。docker volume create <volume_name>
:创建卷。docker volume inspect <volume>
:显示有关卷的详细信息。docker volume rm <volume>
:删除卷。
示例:创建一个简单的 Docker 容器
让我们创建一个运行 Python 脚本的简单 Docker 容器。
- 创建 Python 脚本:将以下代码保存在名为的文件中
app.py
:
print("Hello, Docker!")
- 创建 Dockerfile:创建一个名为的文件,
Dockerfile
内容如下:
FROM python:3.9-slim
COPY app.py /app.py
CMD ["python", "/app.py"]
- 构建 Docker 镜像:
docker build -t python-app .
- 运行 Docker 容器:
docker run python-app
这将输出:
Hello, Docker!
结论
Docker 让使用容器构建、部署和运行应用程序变得轻而易举。Docker 遵循 OCI 标准,确保容器世界中的一切都能无缝协作。容器具有极高的效率、可移植性和可扩展性,因此成为现代软件开发的核心。如果您了解 Docker 以及它如何与 OCI 协同工作,那么您可以使用这项技术来加速您的工作流程,并确保您的应用程序在任何平台上都能正常运行。
下周我将深入探讨 docker 架构,敬请关注。
文章来源:https://dev.to/juniourrau/introduction-to-docker-core-concepts-and-basics-for-beginners-4n0h