Docker 的安装介绍
Docker 架构
Docker 使用的是 C/S(客户端-服务器)架构。Docker 客户端与 Docker 守护进程对话,Docker daemon 负责构建、运行和分发 Docker 容器。Docker 客户端和守护进程可以运行在同一个系统上,或者你可以将 Docker 客户端连接到一个远程的 Docker 守护进程。Docker 客户端和守护进程使用 REST API,通过 UNIX 套接字或网络接口进行通信。另一个 Docker 客户端是 Docker Compose,它可以让你处理由一组容器组成的应用程序。
客户端 Client: Docker 客户端(docker)通过命令行(docker build/pull/run)使用 Docker API 与 Docker daemon 守护进程通信。一个 Docker 客户端可以与多个守护进程通信。
主机 Host: 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。
守护进程 Docker daemon: Docker 守护进程(dockerd)监听 Docker API 请求,并管理 Docker 对象,如 images 镜像、containers 容器、betworks 网络和 volumes 数据卷。一个守护进程也可以与其他守护进程通信来管理 Docker 服务。Docker daemon 启动可以使用 service 或者 systemctl 操作.
systemctl start docker.service,然后我们使用 ps 命令就能看到 docker daemon 进程了,同时查看和 client 交互的 socket 文件也存在了。$ ps aux | grep dockerd jaime 1724 0.0 0.0 6404 2124 pts/0 S+ 22:53 0:00 grep --color=auto dockerd $ ll /var/run/docker.sock srw-rw---- 1 root docker 0 Jan 4 14:00 /var/run/docker.sock=
镜像 Image:Docker Image,用于创建 Docker 容器的只读模板,就相当于是一个 root 文件系统。比如官方镜像 ubuntu 就包含了完整的一套 Ubuntu 最小系统的 root 文件系统。
镜像可以理解成计算机系统中的程序,也就是静态的位于磁盘上面可以通过特定方式执行的文件(程序是操作系统可以识别的特定的二进制文件,Docker 镜像是可以被 Docker Daemon 识别并执行的特定文件)。
镜像和普通的可执行文件的区别在于镜像是分层架构,每个镜像一般都依赖于一个基础镜像。最基本的镜像叫 scratch 镜像。当然我们也可以构建自己的镜像,然后发布到镜像中心别人就也可以使用了。
Docker 镜像的构建是通过一个 DSL 语言来编写的,叫 Dockerfile。
容器 Container:Docker Container 是独立运行的一个或一组应用,A container is a runnable instance of an image(容器是镜像的运行实例)。
这个定义和进程的定义非常类似:进程是程序的运行实例。这样我们就可以将镜像类比为程序,容器类比为进程,这样就更好理解了。
我们可以使用 Docker 的 CLI 命令或者 API 来创建、启动、停止和删除容器等操作。同时对于运行状态的容器我们可以登录进去,类似 ssh 命令等操作。
容器默认是和其他容器以及其宿主机隔离开的。具体的隔离策略可以进行自定义设置。
镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。使用 Docker API 或 CLI 来创建、启动、停止、移动或删除一个容器。你可以将一个容器连接到一个或多个网络,将存储连接到它,甚至可以根据其当前状态创建一个新的镜像。默认情况下,一个容器与其他容器和它的主机是相对隔离的。你可以控制一个容器的网络、存储或其他基础子系统与其他容器或主机的隔离程度。一个容器是由它的镜像以及你在创建或启动它时提供给它的任何配置选项所定义的。当一个容器被移除时,对其状态的任何改变,如果没有存储在持久性存储中,就会消失。
仓库 Registry:仓库可看成一个代码控制中心,用来保存 Images 镜像。一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个 tag 标签;每个标签对应一个镜像。
通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。
Docker Registry 有多种不同的表现,比如 Docker Hub 就是一个公开的注册中心,同时各大云厂商也提供了自己的注册中心,比如阿里云、腾讯云等,甚至你可以搭建自己的私有注册中心。
Docker 默认使用 Docker Hub,比如我们执行
docker pull <image-name>时,Docker 默认去 Docker Hub 中寻找名字为 image-name 的镜像。如果使用自己的 Registry 需要进行单独的配置。
容器与镜像的关系类似于面向对象编程中的对象与类。
| Docker | 面向对象 |
|---|---|
| Cotainer 容器 | 对象 |
| Image 镜像 | 类 |
Docker Desktop
Docker Desktop 是适用于 Mac 或 Windows 环境的应用程序,使您能够构建和共享容器化的应用程序和微服务。Docker Desktop 包括 Docker 守护程序(dockerd)、Docker 客户端(docker)、Docker Compose、Docker Content Trust、Kubernetes 和 Credential Helper。更多信息请参见 Docker Desktop。