对于docker的使用也快一年了,但是没有做什么像样的笔记,所以打算对于这个比较强大的容器,进行一些简单的知识总结,为了方便后期的一些学习使用,然后也算是阶段性的知识总结吧。
介绍
就来说说我对于docker的理解,它就像是一个容器,把所以咱们需要使用的一些应用程序放在里面,在使用的时候进行管理操作,可以对于每个软件进行隔离,保护。主要是对于环境没有要求,在部署的时候,也非常方便,就算出现问题,也是很容易去解决的
优势:
- 高效合理的利用资源
- 快速的启动(直接运行在宿主内核,无需启动完整的操作系统)
- 一致的运行方式(镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性)
- 更轻松的维护和拓展(分层存储,镜像)
注意点
可以有加速器:使用国内的镜像加速
如果需要的话,可以默认自启动
systemctl enable docker
结构
Docker提供一个C/S架构的平台,客户端和服务端通过REST-API通信。
服务端
是docker的守护进程,负责监听API请求并且管理Docker对象。守护进程还可以和其他的守护进程通信来管理Docker服务。
客户端
客户端进程,是交互的主要方式
仓库
是一个集中的存储,分发镜像的服务
对象资源
镜像(Image)
在这里有一个例子,在操作系统中有内核和用户两种空间,加入是linux,在内核启动之后,会挂载root文件系统为其提供用户空间支持,而docker就像是一个root文件系统。
docker相当于是一个特殊的文件系统,里面含有容器需要的程序,库,资源,配置等文件外,还包含了一些为运行是准备的参数。但是他的里面不会包含动态的数据。在内容创建之后,也不会改变的。
分层储存
Docker
充分利用Union FS
技术,将镜像的文件系统设计成分层存储的架构(镜像并不是一个整体,而是一组文件系统叠加组成)
但是这到底是怎么用呢?首先知道是一层层构建的,只能去操作当前的哪一层,不能去改变上一层中的数据。就好比是下面这样的,开一个ubuntu的容器,在镜像里面配置一些网络文件,然后再以这个容器构建为镜像,后面就使用这个镜像去开一个容器,然后操作其他的问题的话,就只能在上面的基础上去操作的了,在不能修改之前配置的网络的文件了。
容器**(Container)**
在上面,有时候讲容器,有时候讲镜像,所以搞得比较糊涂,所以说明一下两者的guanxi/,镜像就好比可执行文件,容器就像是进程,所以可以使用一个镜像去创建多个容器,每个容器都有自己的root文件,各种配置文件,就是互相隔离的环境。当一个容器运行的时候,镜像就是基础层,然后在上面再创建一个存储层,这个被称为,容器存储层,它的生命周期和容器的生命周期是一样的。
容器的可读层是共享的,通过同一个Image启动的容器,全部都共享这个image。
网络
容器中的网络是和宿主机隔离的,所以如果是要在容器里面部署一些网络的应用的话,就是要配置网络。
下面是一些配置模式:
- bridge(网桥模式):默认的网络驱动模式。为每一个容器分配、设置IP等,并将容器连接到一个
docker0
虚拟网桥,通过docker0
以及Iptables nat表配置与宿主机通信。 - host(主机模式):容器不会虚拟出自己的网卡,而是直接使用宿主机的IP和端口
- none:关闭容器的网络功能 跨主机:
- overlay:跨主机的容器通信或者使用
Swarm mode
时使用 - maxvlan:从VM迁移过来,需要mac地址的模式
数据卷
在上面的内容中,会发现容器是独立的,所以在容器的存储层中,也是无法写入数据的,那么要进行写入的时候,就需要绑定宿主机或者使用数据卷,这些都会直接跳过容器存储层,性能和稳定性就是比较高的。这样的话,这些信息就是独立于容器之外,就算容器出现问题,或者销毁,也是不会影响的。
面试问题
基本了解了一些docker的基础知识,然后去网上找到一些关于docker的面试经典题目,在下面总结一下。基础一些题,搜索引擎上面都是可以找到的,下面的总结的是视频里面的
- Docker是什么?
- 是一个实现容器技术的工具
- 开源的应用容器引擎
- 使用C/S,通过远程API管理
- 可以打包一个应用及依赖包到一个轻量级、可移植的容器中
- 答:Docker是一个容器化平台,它以容器的形式将应用程序及其所有依赖项打包在一起,以确保应用程序在任何环境中无缝衔接。
- Docker与虚拟机的不同点在哪里
- 虚拟化级别:
- Docker:Docker 是一种操作系统级别的虚拟化技术,它利用 Linux 内核的功能(如 cgroups 和 namespaces)来创建容器。Docker 容器共享主机操作系统的内核,并在其上运行独立的用户空间。
- 虚拟机:虚拟机是一种硬件级别的虚拟化技术,它通过在物理服务器上运行虚拟化软件层(称为 hypervisor 或虚拟机监控程序)来创建虚拟的硬件环境。每个虚拟机都包含一个完整的操作系统、用户空间和应用程序。
- 资源利用:
- Docker:由于容器共享主机操作系统的内核,因此 Docker 容器更加轻量级,并且启动速度更快、资源消耗更少。
- 虚拟机:每个虚拟机都包含自己的操作系统内核,因此占用的资源更多,启动速度较慢。
- 隔离性:
- Docker:Docker 容器提供了一定程度的隔离,但是容器之间共享主机的内核,因此隔离性相对较弱。容器之间可以共享文件系统、网络和进程空间。
- 虚拟机:虚拟机提供了更高级别的隔离,每个虚拟机都有自己独立的内核和资源,因此虚拟机之间的隔离性更好。
- 部署和管理:
- Docker:Docker 容器的部署和管理相对简单,可以使用 Docker 镜像来快速部署应用程序,并且可以使用 Docker Compose 或 Kubernetes 等工具来管理容器。
- 虚拟机:虚拟机的部署和管理相对复杂,需要创建和配置虚拟机、安装操作系统、应用程序等,并且需要使用虚拟化管理工具(如 VMware、VirtualBox)来管理虚拟机的生命周期。
- 适用场景:
- Docker:适用于轻量级的、快速部署的应用程序,特别是微服务架构中的应用程序。Docker 也适用于构建和测试环境,以及持续集成和持续交付(CI/CD)流水线。
- 虚拟机:适用于需要更高级别隔离、安全性和稳定性的应用程序,以及运行不同操作系统的应用程序。虚拟机也适用于虚拟化服务器、开发和测试环境,以及传统的企业应用程序
- 虚拟化级别:
- Docker容器的有几种状态
- 答:四种:运行,已暂停,重新启动,已退出
- Dockerfile中最常用的指令
From。 Label, RUn,cmd
- Copy和add有什么区别
add:当拷贝容器的时候会自动解压,但是copy是不会的。
- 什么是Docker镜像
用于创建容器,由其他的镜像层组成,允许通过网络传输镜像的时候发送最少的数据。
- Docker使用工作流程
- 编写 Dockerfile:
- Dockerfile 是一个文本文件,包含了构建 Docker 镜像所需的指令和参数。
- 在 Dockerfile 中定义了从基础镜像(Base Image)中构建镜像的步骤,以及所需的软件包、环境变量、文件和配置等。
- 构建镜像:
- 使用
docker build
命令根据 Dockerfile 构建 Docker 镜像。 - Docker build 命令会按照 Dockerfile 中的指令逐步执行,生成一个包含了应用程序和运行环境的镜像。
- 使用
- 运行容器:
- 使用
docker run
命令基于构建好的镜像启动容器。 - Docker run 命令可以指定容器的名称、端口映射、卷挂载、环境变量等配置参数。
- 使用
- 容器执行:
- 一旦容器启动,Docker 将执行 Dockerfile 中定义的命令,并在容器中运行应用程序。
- 容器执行的操作包括启动应用程序、运行服务、处理请求等。
- 容器交互:
- 用户可以通过
docker exec
命令在运行中的容器中执行命令,与容器进行交互。 - 通过
docker exec -it
命令可以进入容器的交互式 shell 环境,进行调试、查看日志等操作。
- 用户可以通过
- 监控和管理:
- Docker 提供了一系列命令和工具,用于监控和管理容器的运行状态。
- 用户可以使用
docker ps
查看正在运行的容器列表,使用docker logs
查看容器日志,使用docker stats
查看容器资源使用情况等。
- 停止和删除:
- 当应用程序完成任务或不再需要时,用户可以使用
docker stop
命令停止容器,使用docker rm
命令删除容器。 - 如果不再需要使用的镜像,也可以使用
docker rmi
命令删除镜像。
- 当应用程序完成任务或不再需要时,用户可以使用
- 编写 Dockerfile: