一、Docker的基本概念
- Docker 使用的是 C/S 结构,即客户端/服务器体系结构。
- Docker 客户端与 Docker 服务器进行交互时,Docker 服务端负责构建、运行和分发 Docker 镜像。
- Docker 客户端和服务端可以运行在一台机器上,我们可以通过 RESTful 、Stock 或网络接口与远程 Docker 服务端进行通信。
二、Docker的核心组件
- Docker Client
a. Docker Client ,也称 Docker 客户端。它其实就是 Docker 提供命令行界面(CLI)工具,是许多 Docker 用户与 Docker 进行交互的主要方式。
b. 客户端可以构建,运行和停止应用程序,还可以远程与 Docker_Host 进行交互。
c. 最常用的 Docker 客户端就是 Docker 命令,我们可以通过 Docker 命令很方便地在 Host 上构建和运行 Docker 容器。
- Docker Daemon
a. Docker Daemon 是服务器组件,以 Linux 后台服务的方式运行,是 Docker 最核心的后台进程,我们也把它称为守护进程。
b. 负责响应来自 Docker Client 的请求,然后将这些请求翻译成系统调用完成容器管理操作。
c. 该进程会在后台启动一个 API Server ,负责接收由 Docker Client 发送的请求,接收到的请求将通过 Docker Daemon 内部的一个路由分发调度,由具体的函数来执行请求。
d. Docker Daemon大致分为三个部分
- Docker Server
- Engine
- Job
Docker Daemon 可以认为是通过 Docker Server 模块接受 Docker Client 的请求,并在 Engine 中处理请求,然后根据请求类型,创建出指定的 Job 并运行。
Docker Daemon 运行在 Docker Host 上,负责创建、运行、监控容器,构建、存储镜像。
运行过程的作用有以下几种可能:
向 Docker Registry 获取镜像。
通过 GraphDriver 执行容器镜像的本地化操作。
通过 NetworkDriver 执行容器网络环境的配置。
通过 ExecDriver 执行容器内部运行的执行工作。
- Docker Image
a. Docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。
b. 镜像不包含任何动态数据,其内容在构建之后也不会被改变。我们可将 Docker 镜像看成只读模板,通过它可以创建 Docker 容器。
c. 镜像有多种生成方法:
- 从无到有开始创建镜像
- 下载并使用别人创建好的现成的镜像
- 在现有镜像上创建新的镜像
可以将镜像的内容和创建步骤描述在一个文本文件中,这个文件被称作 Dockerfile ,通过执行 docker build 命令可以构建出 Docker 镜像。
- Docker Registry
a. Docker Registry 是存储 Docker Image 的仓库
b. 运行 docker push、docker pull、docker search 时,实际上是通过 Docker Daemon 与 Docker Registry 通信。
- Docker Container
a. Docker 容器就是 Docker 镜像的运行实例,是真正运行项目程序、消耗系统资源、提供服务的地方
b. Docker Container 提供了系统硬件环境,我们可以使用 Docker Images 这些制作好的系统盘,再加上我们所编写好的项目代码,Run 一下就可以提供服务。
三、Docker常用命令
- 查看docker命令帮助文档
docker -h
- 拉取一个 Docker 镜像
docker pull <image_name>:<tag>
#不加tag,默认是latest
docker pull image_name
- 查看主机下的所有镜像
docker images
- 查看主机下所有的容器
#-a 是查看当前所有的容器,包括未运行的。不加-a表示查看当前正在运行的容器
docker ps -a
- 启动、重启或停止容器
docker start container_id
docker restart container_id
docker stop container_id
- 进入到某个容器中
docker attach container_id
- 运行容器,并且调用里面的 bash
docker run -t -i container_id /bin/bash
- 删除容器
docker rm container_id
- 删除镜像
docker rmi image_id