Docker知识点总结
一:Docker 简介
一、Docker 是什么?
1. Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架包括系统。
2. Docker 是基于Go语言实现的云开源项目,诞生于2013年初,最初是dotCloud公司发起。由镜像(Image)、容器(Container)、仓库(Repository) 三大核心组成。
3. Docker 通过对应用组件的封装、分发、部署、运行等生命周期的管理,达到应用组件级别的“一次封装,到处运行”。这里应用组件,即可以是Web应用,也可以是一套数据库服务,甚至是一个操作系统或编译器。
二、为什么要使用 Docker?
1. Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。
2. 更快速的交付和部署(使用docker,开发人员可以用镜像来快速构建一套标准的开发环境;开发完成之后,测试和运维人员可以直接使用相同环境来部署代码)。
3. 响应式部署和扩展(docker容器几乎可以在任意平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。可以在不同的平台轻松地迁移应用)。
4. 更简单的更新管理(使用Dockerfile,只需要修改小小的配置,就可以替代以往大量的更新工作)。
1. 与传统的虚拟机对比
2. 传统开发流程
3. Docker开发流程
三、Docker 架构
1. Docker 核心三要素
1. 镜像(Image):用于创建 Docker 容器的模板,相当于一个 root 文件系统。镜像内部是一个精简的操作系统和应用运行所需要的文件以及所有依赖(镜像不包含内核,容器都是共享所在Docker主机的内核),比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
2. 容器(Container):容器是镜像的运行时实例,可以从单个镜像启动一个或多个容器。
3. 仓库(Repository):用于存放镜像,可以理解为代码控制中的代码仓库。一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。
2. 核心架构
1. Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
2. Docker 容器通过 Docker 镜像来创建。
3. 运行原理
1. 命令行工具或CLI在被称为用户空间的内存中运行,就像是在操作系统上运行的其他程序。运行 Docker 可以认为是在用户空间运行着两个程序:一个是 Docker 守护进程,另一个是 DockerCLI,DockerCLI 是与用户交互的 Docker 程序。上图也显示了三个运行着的容器,每个都是以 Docker 守护程序的子进程运行,封装在容器中。在容器中运行的程序只能访问该容器内部的内存空间和资源(除非特别规定可以访问容器外部资源)。
2. Docker 可以执行、复制和轻松的分发容器,Docker 通过一种打包和分发的软件完成传统容器的封装,这个用来充当容器(Container)分发角色的组件被称为 镜像(Image)。
四、安装部署(Centos7)
1. 查看内核版本(高于3.10)
2. 卸载旧版本 Docker
3. 安装需要的软件包
4. 设置 yum 源
5. 安装 Docker
6. 启动docker
7. 配置阿里云镜像加速
1. 获取自己的镜像加速地址:点击“创建我的容器镜像”
2. 编写配置文件
二:Docker 核心操作
一、Docker 镜像
1. 简介:镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件。它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。
2. 镜像分层
1. 原理:Docker 镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS(联合文件系统):是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。Union 文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
2. 特性
1. 一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。
2. Docker镜像都是只读的。当容器启动时,一个新的可写层被加载到镜像的顶部。
3. 共享资源。一个基础镜像可以实例多个容器。
3. 多架构镜像(Multi-architecture Image)
1. 原理:在拉取镜像的时候,Docker 客户端会调用 Docker 镜像仓库服务的 API 完成拉取。如果该镜像有 Manifest 列表,则 Docker 客户端会找到当前主机架构对应的 Manifest 并解析出组成该镜像的镜像层加密ID,然后从镜像仓库中拉取每个镜像层。
2. 作用:是为了解决镜像支持不同架构(Linux、Windows、ARM等)的问题。为了实现这个特性,镜像仓库服务API支持两种重要的结构:Manifest列表和Manifest。Manifest列表是指某个镜像标签支持的架构列表,其支持的每种架构都有自己的Manifest定义,其中列举了镜像的构成。如下图所示,图中左侧是Manifest列表,其中包含了该镜像支持的每种架构。Manifest列表的每一项都有一个箭头,指向具体的Manifest,其中包含了镜像配置和镜像层数据。
4. 常用操作
二、Docker 容器
1. 容器是镜像的运行时实例,可以从单个镜像启动一个或多个容器。
2. 相对于虚拟机,容器较轻量级,而且容器启动非常快————与虚拟机运行在完整的操作系统之上相比,容器会共享其所在主机的操作系统/内核(一个很简单是证明方法就是在容器内部查看下进程,在容器所在主机的操作系统上也能找到容器内部运行的进程(由于容器拥有隔离的PID,所以进程号会不同,但是进程确是相同的))。
3. Docker在创建容器的时候会为每个容器分配一个唯一的标识符,也会分配一个人性化的名称(如果用户没有指定名称的话)。
4. Docker容器有四种状态:运行中(Up)、暂停中(Paused)、已退出(Exited)、重新启动中(一种临时状态),状态转移图如下:
5. 常用操作
6. 重启策略(--restart
重启策略)
1. always:除非容器被明确停止,否则会一直尝试重启处于停止状态的容器。当Docker daemon重启的时候,停止的容器也会被重启。
2. unless-stopped:unless-stopped 和 always 最大区别的就是使用 unless-stopped 策略并处于已退出状态的容器,不会在Docker daemon重启的时候被重启。
3. on-failure:退出容器并且返回值不是0的时候重启容器,就算容器处于已退出状态,在Docker daemon重启的时候,容器也会重启。
三、Docker 网络
1. 网络容器模型:Closed容器、Bridged容器(默认)、Joined容器、Open容器,所有的Docker容器都要符合这四种模型中的一种。这些模型定义了一个容器如何与其他的本地容器、主机网络进行通信。
2. Closed 容器:不允许任何的网络流量,运行在这种容器中的进程只能访问本地回环接口。
3. Bridged 容器:默认的网络容器模型,有两个接口,一个是本地回环接口,另一个接口通过网桥连接到主机网络。可以通过主机网络访问任何主机网络能访问的外部网络。
4. Joined 容器:所有容器共享一个网络栈,容器之间没有任何网络隔离。Joined容器通过将某一个容器接口的访问权限提供给另外一个新的容器来构建。
5. Open容器:没有网络容器,共享主机网络,并且对主机网络有完全的访问权。
6. 常用操作
四、Docker 卷和数据持久化
1. 简介:
1. 术语:一个主机或容器的目录树是由一组挂载点创建而成,这些挂载点描述了如何能构建出一个或多个文件系统。存储卷是容器目录树上的挂载点,提供了容器无关的数据管理方式。
2. 个人理解:将主机磁盘的某个目录挂载到容器的文件系统(主机上的这个目录就称为存储卷),那么在容器内对这个挂载点的操作实际上都是对主机上那个目录的操作。比如将主机目录 /opt/soft 挂载到容器的 /soft 目录,那么容器中对 /soft 的所有操作实际上都是对主机目录 /opt/soft 的操作。
2. 类型
1. 绑定挂载存储卷:使用用户提供的主机目录或文件,在启动容器时需要加入选项 -v <主机位置>:<容器挂载点>。
2. 管理存储卷:使用 Docker 的管理空间,在启动容器时需要加入选项 -v <容器挂载点>。Docker 守护进程会自动在主机文件系统(/var/lib/docker/volumes)中创建一个目录来挂载到容器中指定的挂载掉点。
3. 常用操作
五、Docker 资源限制
1. 简介
1. cgroup:是将任意进程进行分组化管理的Linux内核功能,限制某个或者某些进程的分配资源。
2. subsystem:用于控制cgroup中的进程行为的内核组件。
3. hierarchy:由cgroup组成的层级树,每个hierarchy都对应一个cgroup虚拟文件系统,都有系统上的所有task,此外低 level 的hierarchy 不能超过高 level 设定的资源上限。
2. subsystem(资源控制器)
1. blkio:控制块设备的访问,比如带宽等。
2. cpu:控制进程占用cpu的多少。
3. cpuacct:记录cgroup 中进程使用的 CPU 情况。
4. cpuset:为 cgroup 中的进程分配 CPU 和内存节点。
5. devices:控制进程对设备的访问。
6. freezer:挂起或者恢复 cgroup 中的进程。
7. memory:设定 cgroup 中进程的内存限制,统计使用的内存资源。
8. net_cls:使用等级识别符(classid)标记网络数据包,使得Linux 流量控制程序(tc)识别具体 cgroup 中的数据包。
3. 常用操作
六、Docker API
1. 种类
1. Docker Registry API:docker镜像仓库的api,通过操作这套API,你可以自由的自动化、程序化的管理你的镜像仓库。
2. Docker Hub API:用户管理操作的API,docker hub是使用校验和公共 namespaces 的方式来存储账户信息、认证账户、进行账户授权。API同时也允许操作相关的用户仓库和 library 仓库。
3. Docker Remote API:用于控制主机 Docker 服务端的 API,等价于 docker命令行客户端。 有了它,你能远程操作docker容器,更重要的是你可以通过程序自动化运维docker进程。
2. 配置(需要重启 Docker)
1. 在 /etc/sysconfig/docker 文件中添加 OPTIONS=' -H tcp://0.0.0.0:2357 -H unix:///var/run/docker.sock '
2. 在 /usr/lib/systemd/system/docker.service 文件中 ExecStart 后面添加 -H tcp://0.0.0.0:2357 -H unix:///var/run/docker.sock
3. 使用
三:Docker 实例
一、应用容器化技术
1. supermin5 构建镜像
2. Dockerfile 创建镜像
1. 简介
1. Dockerfile是一个包含用于组合映像的命令的文本文档,可以在命令行中调用任何命令。 Docker 通过读取 Dockerfile 中的指令自动生成映像。
2. Docker build命令用于从 Dockerfile 构建映像,可以使用 -f
标志指向文件系统中任何位置的Dockerfile。
2. 常用命令
3. 示例
二、Dockerfile 构建 MySQL
三、Dockerfile 构建 Apache+PHP
四、Dockerfile 构建 Tomcat
__EOF__

本文链接:https://www.cnblogs.com/mh20131118/p/12261590.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix