【Kubernetes系列】认识Docker

Docker是一个基于Linux容器化技术的开源项目,Go 语言开发,具有可移植性和轻量级的特性。

一、概述

1. Docker 引擎

Docker使用C/S架构,主要包含三个组件:
1)Docker CLI(command line interface),客户端,使用Docker API。
2)REST API,负责传递客户端的指令到服务端。
3)Docker deamon(dockerd),是服务端,一个守护进程。它接收Docker API的请求管理Docker对象,可与其它守护进程通信,从而更好的管理Docker服务。大致包含三部分:Docker Server、Engine、Job
CLI通过REST API与dockerd做交互。dockerd创建和管理Docker对象,比如镜像、容器、网络、卷。

2. Docker仓库

存放Docker镜像,默认的公共仓库是Docker Hub,可配置。

3. 一些常用的Docker对象

1)镜像,创建容器的只读模版,可使用Dockerfile构建自己的镜像。在Dockerfile中,定义创建创建和运行镜像所需的步骤,其中的每条指令都会在镜像中创建一个层,当更改Dockerfile并重建镜像时,仅重建那些被修改的层。
2)容器,是一个镜像的运行实例,可连接到一个或多个网络,或者将存储连接到它。
3)服务,可以在多个Docker守护进程之间扩展容器,高版本中支持集群。

4. 核心组件

1)Containerd:最初从 Docker 中拆分出来的,后被 Docker 捐给了 CNCF 基金会,现已从 CNCF 毕业。
2)runc:runc 是在 Docker 与其他公司共同成立 OCI 组织的时候,将自己的 libcontainer 运行时捐献出去发展而来的。

5. 底层技术

1)Namespaces

为Docker提供隔离的工作区。当创建容器时,Docker为容器创建了一组命名空间,这些名称空间提供了一层隔离,容器在这个单独的名称空间中运行,并且访问权仅限于该名称空间。
Docker引擎在Linux上使用的命名空间如下:
The pid namespace: Process isolation (PID: Process ID).
The net namespace: Managing network interfaces (NET: Networking).
The ipc namespace: Managing access to IPC resources (IPC: InterProcess Communication).
The mnt namespace: Managing filesystem mount points (MNT: Mount).
The uts namespace: Isolating kernel and version identifiers. (UTS: Unix Timesharing System).

2)Cgroups(Control groups)

cgroups将应用程序限制为一组特定的资源,允许Docker引擎将可用的硬件资源共享给容器,并有选择的实施限制和约束。如:限制容器可用的内存。

3)Union file systems(UnionFS)

通过创建layers的文件系统,Docker引擎通过使用UnionFS为容器提供构建模块。用户制作镜像的每一步操作,都会生成一个层,也就是一个增量rootfs。UnionFS最主要的功能是将多个不同位置的目录联合挂载(union mount)到同一个目录下

4)Container format

Docker引擎将namespaces、cgroups、UnionFS组合到container format中,默认的container format是libcontainer。

对于Docker等大多数Linux容器来说,Cgroups技术是用来制造约束的主要手段,而Namespace技术则是用来修改进程视图的主要方法。

参考:docs.docker.com/get-started…

二、Dockerfile的使用

1)基本格式

INSTRUCTION arguments
指令实际不区分大小写,但是约定使用大写

2)常用指令

FROM: 指定构建镜像所用的基础镜像,每个Dockerfile都必须有FROM指令。如果不想使用任何基础镜像,则需要使用 FROM scratch。
RUN: 指定构建过程中需要执行的操作。常用的 RUN 指令的形式是 shell 形式的,同时它还支持另外一种 exec 形式的,需要用 [] 括起来。
EXPOSE: 表示容器运行时要监听的端口。监听端口也可以通过 docker run 启动容器时,通过 -p 参数进行指定。
COPY和ADD: 复制指令,从上下文目录中复制文件或者目录到容器里指定路径。COPY 和 ADD,两者均可在镜像构建时,为镜像添加内容。
ARG和ENV: 用于在构建镜像过程中预定义变量。
ENTRYPOINT和CMD: 定义了当容器运行时,需要执行的命令。

3)多阶段构建

Dockerfile 中存在多个 FROM 指令,表示不同的阶段,后续阶段可以使用之前阶段的产物,或镜像中原本具备的内容。

命令参考:docs.docker.com/engine/refe…

三、使用(MacOS)

1)安装

brew install –cask –appdir=/Applications docker
验证是否安装成功:docker –version

2)配置镜像

在任务栏点击 Docker for mac 应用图标-> Perferences…-> Daemon-> Registrymirrors。在列表中填写加速器后,重启生效。

{
  ……
  "registry-mirrors": [
    "http://hub-mirror.c.163.com", 
    "https://docker.mirrors.ustc.edu.cn/", 
    "https://lkljkfsh.mirror.aliyuncs.com", 
    "https://reg-mirror.qiniu.com"
  ]
}
复制代码

阿里云镜像获取地址:cr.console.aliyun.com/cn-hangzhou…

参考:docs.docker.com/engine/refe…

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享