跳到主要内容

Docker是什么

Docker 是一个开源的应用容器引擎,它允许开发者打包他们的应用以及应用的依赖包到一个可移植的容器中,然后这个容器可以在任何支持 Docker 的Linux或Windows机器上运行。Docker 容器的概念基于集装箱在物流领域的思想,即提供一个标准化的单元,可以快速、可靠地从一个环境迁移到另一个环境。

关键特点:

  1. 容器化:Docker 允许将应用程序及其环境封装在一个容器中,确保在不同的环境中有一致的运行行为。
  2. 可移植性:容器可以在任何支持 Docker 的操作系统上运行,这极大地简化了应用的部署和迁移。
  3. 隔离性:容器之间是相互隔离的,它们拥有自己的文件系统、网络和进程空间。
  4. 轻量级:与传统虚拟机相比,Docker 容器占用的资源更少,启动速度更快。
  5. 可扩展性:Docker 可以轻松地扩展服务,通过简单的命令即可创建、启动、停止和销毁容器。

主要组件:

  1. Docker客户端:用户与 Docker 交互的主要方式,通过命令行界面(CLI)发送命令给 Docker 守护进程。
  2. Docker守护进程(Dockerd):在宿主机上运行的后台服务,负责管理容器、镜像、网络和存储等。
  3. Docker镜像:一个只读的模板,用于创建 Docker 容器。镜像通常基于其他镜像并添加自定义层。
  4. Docker容器:容器是从镜像创建的运行实例。它可以被启动、停止、删除,每个容器都是独立运行的。
  5. Docker仓库:存储和分发 Docker 镜像的地方。Docker Hub 是 Docker 官方提供的一个公共仓库。
  6. Docker Compose:一个用于定义和运行多容器 Docker 应用的工具。它使用 YAML 文件配置应用程序的服务。 Docker 通过其容器化技术改变了软件的开发、交付和运行方式,是现代云原生应用和微服务架构的重要组成部分。

image-20250104155030984

Docker VS 虚拟机

特性Docker虚拟机 (VM)
虚拟化层级操作系统级别虚拟化 (OS-level)🟢硬件级别虚拟化 (Hypervisor-level)
启动时间🟢毫秒~秒级启动分钟级启动
资源消耗🟢轻量级,占用较少资源相对较重,每个虚拟机需要完整的操作系统
性能开销🟢较小(共享宿主机内核)较大(每个虚拟机有完整的操作系统)
隔离性容器之间共享宿主操作系统内核,隔离性较弱🟢完全隔离,每个虚拟机都有独立的操作系统
可移植性🟢高(可以在任何安装 Docker 的平台运行)较低(受限于虚拟机软件的兼容性)
部署效率🟢极高(可以快速部署和迁移)较低(启动和配置时间较长)
兼容性由于基于 Linux 的技术实现,在 Windows 和 macOS 上使用 Doceker 需安装 Docker-Desktop 模拟出一个 Linux 环境。🟢支持主流操作系统
使用场景APP开发环节,打包依赖环境。APP部署环节,提供软件隔离环境。APP运维,群组管理。提供硬件级的操作系统。

容器与Docker的关系?

Docker是容器的实现方式之一。

容器和虚拟机的关系?

通常会在物理机上安装 VM,在 VM上使用 Docker(容器)部署应用。

三、加入 docker 组

安装 Docker 后,非 root 用户使用 Docker 需要加上 sudo ,不方便。可以把用户加入 docker 用户组,用户组中的用户不需要使用 sudo 。

sudo usermod -aG docker $USER

注销后生效。

四、Docker镜像

国内网络需要配置镜像源,把 https://docker.1panel.live 换成有效的URL即可,可以添加多个镜像源。

{
"registry-mirrors": [
"https://docker.1panel.live"
]
}

修改配置后,重启 Docker 服务。

sudo systemctl restart docker

五、部署第一个 Docker 应用

docker run hello-world

hello-world 是一个简单的 Docker 应用,它的大小只有几KB。当它运行成功时会在屏幕上输出一段欢迎语,如此用户便能确认 Docker 的确安装成功了。

image-20250104181917624

用户首次执行 docker run hello-world 命令时,docker 在后台完成以下步骤:

六、了解镜像 (Image)

镜像可以理解为应用程序的安装包,默认从 Docker Hub 仓库下载镜像。与传统安装包不同的是镜像在打包时包含了程序的依赖环境,这样便不会出现”在我的电脑上运行的好好的,怎么到了你的电脑就不行了“的问题。

#列出已下载镜像的名单
docker image ls

#删除镜像xx
docker image rm 镜像xx

#删除所有停止的容器
docker image rm $(docker ps -aq)

#下载镜像xx
docker pull 镜像xx

七、了解容器 (Container)

容器是镜像的一个实例,运行时是一个隔离的进程,包含所有执行应用所需的环境。容器可以启动、停止、重启、删除等。

简单的理解为 安装好的程序

#基于镜像xx,安装并启动一个容器
docker run 镜像xx

#启动已停止的,名为xx的容器
docker start 容器xx

#列出正在运行容器的名单
docker ps

#列出所有容器的名单(包括停止的容器)
docker ps -a

在传统的环境中,许多的软件只能在系统上安装一次。在 Docker 环境中,由于容器的隔离特性:同一个镜像可以在电脑上部署无数个容器

八、了解 Docker Hub

Docker Hub 是一个官方的公共镜像仓库,用户可以上传或下载各种镜像。用户可以搭建私有仓库。

九、了解 Docker 网络

Docker 提供多种网络模式,容器之间可以通过 Docker 网络进行通信,支持桥接、宿主网络、容器网络等不同模式。

十、了解 Docker 数据持久化

Docker Volume 是用于持久化容器数据的机制,容器中的数据通常存储在 Volume 中,保证即使容器被删除,数据依然可以保留。

十一、了解 Docker 应用开发

Docker file:将普通应用打包为 Docker 镜像。

Docker Compose:将多个应用组合在一起,形成复杂服务。

十二、了解 Docker 集群管理

Kubernetes(K8s)是一个开源的容器编排系统,用于自动化容器化应用程序的部署、扩展和管理,它通过声明式配置和自动化调度,实现了跨多个主机的容器集群的协调和运行,支持负载均衡、服务发现、自我修复和滚动更新等功能,是当前云原生技术栈中的核心组件。

十三、了解 Docker 管理面板

面板比命令更加简单、直观,降低了部署和运维 Docker 应用的难度。

1Panel - 现代化、开源的 Linux 服务器运维管理面板 - 官网

PixPin_2025-01-20_16-45-07

十四、总结

  1. Docker 通过轻量级的容器化技术,使得应用部署变得更加高效、可移植和灵活。
  2. 学习 Docker 可以从 书籍 和 开始。
  3. 管理 Docker :
    • 命令行:常用命令必须学习。
    • 运维面板 :降低部署和运维的难度。
  4. 打包和部署 Docker 应用:学习 Docker file 和 Docker Compose