1. Docker
Docker是一个开发平台,用于开发应用、交付应用、运行应用。
Docker允许用户将基础设施中的应用单独分割出来,形成更小的颗粒(容器),从而提高交付软件的速度。
Docker容器与虚拟机类似,但两者的原理不同。容器是将操作系统层虚拟化,虚拟机是虚拟化硬件,因此容器更具有便携性、高效地利用服务器。容器更多的用于软件的一个标准化单元。
由于容器的标准化,因此它可以部署到任何一个地方。
Docker利用Linux核心中的资源分离机制,例如cgroups,以及Linux核心名字空间(namespaces),来创建独立的容器。
2. 基础架构
Docker引擎
Docker引擎是一个服务端-客户端结构的应用,主要有这些不好:Docker守护进程、Docker Engine API,Docker客户端。
- Docker守护进程(也叫dockerd),是一个持久化的进程,用户管理容器。守护进程会监听Docker Engine API的请求。
- Docker Engine API,是用于与Docker守护进程交互用的API。
- Docker客户端,也叫docker,大部分用户与Docker交互的主要方式。用户通过客户端将命令发送给守护进程。
Docker注册中心
Docker注册中心(Docker registry)是用于存储Docker的镜像。
对象
Docker的对象是指Images、Containers、Networks、Volumes、Plugins等等。
- 容器 是镜像的可运行的实例。容器可通过API或CLI(命令行)进行操控;
- 镜像是一个只读模板,用于指示创建容器。
- 服务允许用户跨越不同的Docker守护进程的情况下增加容器,并将这些容器分成管理者和工作者。
3. 文件格式
Docker有两种文件格式,Dockerfile 和 Compose file。Dockerfile定义了单个容器的内容和启动时候的行为。Compose file定义了一个多容器应用。
Dockerfile
Docker可以依照Dockerfile的内容,自动化地构建镜像。Dockerfile是包含用户想要如何构建镜像的所有命令的文本。
FROM ubuntu:18.04
COPY ./app
RUN make /app
CMD python /app/app.py
关键词:
RUN
.RUN
会在当前镜像的顶层上添加新的一层(layer),并在该层上执行命令,执行结果将会被提交。提交后的结果将会用于Dockerfile的下一步。ENTRYPOINT
,入口点。ENTRYPOINT
允许你配置容器,使之成为可执行程序。即,ENTRYPOINT
允许你为容器增加一个入口点。CMD
用于为已创建的镜像提供默认的操作,当不想要用默认操作时候,可用docker run IMAGE[:TAG|@DIGEST][COMMAND]
进行替换。
Compose文件
Compose文件是一个YAML文件,定义了服务、网络、卷。
- **服务(service)**定义各容器的配置,定义内容将命令行参数的方式传给
docker run
命令。 - 网络(network),将定义内容给
docker network create
命令。 - 卷(volume),将定义内容传给
docker volume create
命令。
docker run
命令中有一些选项,和Dockerfile文件中的指令效果一样(如:CMD,EXPOSE,VOLUME,ENV)。
Compose文件可使用Shell变量(Variable)。
4. 网络
Brige
在Docker里,网桥网络使用的是软件形式的网桥。使用相同的网桥的容器进入该网络,而非该网络的容器刷故无法接入。
bridge
是网桥驱动,是Docker默认的网络驱动(接口名为 docker0
)