1.什么是docker
docker是一个容器化平台,类似于一个集装箱,集装箱与集装箱之间互不影响,docker平台就是一个软件集装箱平台,我们可以构建应用程序,将其所有的依赖打包到一个容器中,然后就很方便的可以在其他机器上运行,他的优点主要就是提供一个轻量级的可隔离性的,可移植性的运行环境。
2.docker容器的几种状态
created:已创建 running:运行中 paused:暂停
exited:已退出 restarting:重启中
3.为什么要使用docker
docker和vmware相比
容器技术:占用磁盘空间小一般为KB;启动速度快,秒级启动;直接运行于宿主机的内核上,不同容器共享同一个linux内核,并发性上来看一台宿主机可以启动上百个容器,而且资源利用率高
虚拟机技术:完全与他相反,它占用磁盘空间大,启动速度慢,运行于Hypervisior上,一台主机最多可运行几十个虚拟机,且资源利用率低。
4.dockerfile中最常见的指令
FROM 指定基础镜像,用于构建新镜像
RUN 在构建运行指定命令
COPY和ADD 用于将本地文件或目录复制到容器中
ENV 设置环境命令
CMD 指定容器创建时的默认命令
EXPOSE 声明容器运行时监听的而特定网络端口(暴露端口)
5.COPY和ADD区别
COPY 指令用于简单地复制本地文件或目录到容器中,它的主要功能是文件复制。
ADD 指令除了复制本地文件和目录外,还可以执行一些额外的功能,例如解压缩文件、从 URL 复制文件、并且支持自动解压缩。
6.dockerfile的优化思路
从编译速度上进行如下优化:充分利用缓存,使用国内的软件源
镜像体积做如下优化:删除无用缓存,卸载无用软件包,使用较小的基础镜像
7.容器间的通信用什么方式
容器间可以使用link方式使荣期间相互通信,容器名称,
8.docker的网络模式总共有几种
docker网络模式主要有4中分别是
host模式 :容器和宿主机共享network namespace
container模式 :容器和另一个容器共享network namespace ,kubernetes中的pod就是多个容器共享一个network namespace
**none模式:**容器有独立的network namespace,但并没有对其进行任何网络设置,如分配veth pair和网桥连接,配置ip等
bridge模式 默认为该模式
9.docker底层如何实现
docker的底层实现依赖于多个关键技术和组件,其中最重要的是linux容器技术
主要有:namespace(命名空间),通过命名来相互隔离,cgroups(控制组)来限制和分配容器资源,确保容器之间不会相互干扰,chroot限制进程文件系统访问的工具,OverlayFS允许多个文件系统层叠加在一起,适用于docker镜像和容器管理
10.docker swarm是什么
Docker Swarm是docker的本地群集。是一种容器编排和集群管理工具,用于协调和管理多个docker容器节点,来创建高可用性的,分布式的容器应用程序集群它将docker主机池转变为单个虚拟docker主机。Docjer Swarm
提供标准的docker API,任何已经与docker守护进程通信的工具都可以使用Swarm透明地扩展到多个主
Docker Swarm 与 Kubernetes 是两个常见的容器编排工具,它们都用于管理容器化应用程序的部署和运行。Swarm 在较小规模和较简单的部署场景中可能更容易上手,而 Kubernetes 则更适用于大规模、复杂的容器编排和管理。
11.如何在生产环境中监控docker
docker自己也提供了一些基本的监控功能,可以使用docker命令docker stats和docker top命令
也可以使用一些专用的容器监控工具cAdvisor容器监控,使用prometheus采集数据,结合grafana展示数据
12.harbor仓库是如何搭建的高可用的?
harbor是一个开源的容器镜像管理系统,如果要搭建高可用的harbor仓库可采用多个harbor共享存储卷的方式、提供复制规则,同步镜像
13.docker-registry迁移到harbor如何做的?
首先备份docker registry数据(例如使用docker-save、docker-compose)或者直接备份docker镜像存储目录
然后通过scp或者docker load在目标harbor中导入镜像
14.什么是docker-compose
docker-compose是一个编排工具,同时管理多个容器,与他配对的是一个docker-compose.yaml文件,docker-compose文件必须包在一个包含docker-compose。yaml文件目录下才能使用
15.Data Volume的特点
datavolume是目录或是文件,并不是没有格式化的磁盘(块设备)
容器可以读写volume中的数据
volume数据可以被永久保存,即使使用它的容器已经销毁
16.volume,bind和tmpfs三者的相同点和区别
相同点:无论选择哪种类型去使用,数据在容器内都是相同的,他被视为容器文件系统中的目录或单个文件
不同点:
卷(volume)存储在由docker管理的主机文件系统的一部分中(/var/log/docker/volumes/)非docker的进程不应该修改这部分文件系统,卷是在docker中保留数据的最佳方式
绑定挂载(bind mount)也就是把主机的本地目录挂载到容器中某个挂载点,可以存储在主机系统的任何位置,他们甚至可能是重要的系统文件或目录。docker主机或docker容器上的非docker进程可以随时修改他们。
tmpfs挂载(tmpfs mount) 仅仅存储在主机系统的内存中,而不会写入主机系统的文件系统。