目录
#centos镜像几个G,但是docker centos镜像才几百兆,这是为什么?
docker题目:
#docker的工作原理
客户端向服务器发送请求,服务器负责构建,运行和分发容器。客户端和服务器可以运行在同一个Host上,客户端也可以通过socket或REST API与远程的服务器通信。Docker的守护进程运行在主机上,通过Socket,客户端可以向守护进程发送命令,守护进程接收到客户端发送来的指令就会执行。
#为什么会出现docker
为了解决单机部署应用和虚拟化的局限性而诞生
#什么是docker容器:
Docker容器就是将应用程序与服务及其依赖打包一起合成的镜像运行后就是容器,容器不需要安装不同的操作系统,都只有一个程序服务运行基础,并最大程度的节省空间。简单来说,容器就是镜像运行的实例;
#什么是dockerfile
是一个包含用于创建镜像的命令的文本文档,在文件命令行中使用指令记录了构建镜像的所有步骤,docker通过读取dockerfile指令自动生成镜像。
#解释 Docker 组件
服务端:容器服务的提供者,安装docker软件后即可使用docker相关命令运行docker
客户端:提供了一套标准的用来操作容器服务器的docker命令
镜像:一个程序服务的载体,创建容器的模版,镜像是运行容器的基础,想运行什么样的服务就运行什么样的镜像
容器:当一个镜像运行后即产生了容器容器
镜像仓库:储存docker镜像的一个仓库
#容器化与虚拟化有什么区别
虚拟化:一种可以模拟物理硬件并将其表示为独立计算机的技术,它是硬件级虚拟化。
容器化:操作系统级别的虚拟化,但是没有硬件虚拟化,不会模拟整个物理机器,只是模拟计算机的操作系统。因此,多个应用程序可以共享同一OS内核。
#描述docker的生命周期
创建-运行-暂停-取消暂停-启动-停止-重启-杀死-销毁删除
#什么是docker对象标签
是存储为字符串的键值对,可以使元数据添加到docker对象
#什么是docker
Docker是一个容器化管理平台,以容器的形式将应用程序与服务以及依赖打包一起,可以将次程序在任何环境中运行。
#docker的作用
容器化的操作系统,每一个容器中只运行一个用户想运行的软件或服务,每一个容器消耗的资源相比于传统虚拟化小很多,最大程度节省服务器硬件资源,让相同配置服务器运行更多的容器服务
#docker的网络模式
None 无网络模式
Host 共享主机网络
Bridge 桥接模式
Container 自定义IP地址
#bind mount和volume manager持久化
Bind明确制定了本机向容器中挂载目录,但容器目录内容会被挂在目录覆盖
Volume manager 本机向容器挂载时有指定的挂载点(可使用inspect详细查看)
#dockerfile指令有哪些
From 指定从哪一个容器开始运行
Run 构建镜像时运行指定的命令
Copy 复制本机文件到容器中
Add 复制文件时,若是压缩文件在复制过程中会将压缩包解压
User 构建镜像时,指定某个用户运行
Env 设置环境变量,环境变量可被后面的指令使用,并保持运行
Arg 设置变量,但是在运行时不会存在这些变量
Expose 定义端口号
Workdir 设置进入镜像中的当前工作目录
Cmd 可以指定容器运行时要执行的命令,可以有多个cmd,但只有最后一个生效但可以被 docker run命令的参数覆盖
Entrypoint 指定容器运行时执行的命令,若有多个entrtpoint只有最后一个有效,但不会忽略,一定会执行。
Healthcheck 容器健康状况检查命令
Volume 将本机目录挂载到容器
#dockerfile中cmd与entrypoint的区别
Cmd:可以有多个,但只有最后一个执行,若docker run指定命令,就不会执行cmd
Entrypoint 若同时有cmd,那么cmd会附加到entrypoint指令后,若此时有docker run指令,那么参数会覆盖cmd,附加到entrypoint后。
#不同主机之间docker 如何实现服务互通
路由方式和网桥方式,都可以使跨主机之间的Docker容器互通
#假如你docker跑了一个服务,你是怎么把代码放进去的。
使用docker exec -it 直接使用添加命令活新开一个shell界面进入到容器中添加,
也可以使用docker attach直接进入当前界面添加,但若是正前台运行服务会影响服务运行
#说一下docker的compose、swarm?
Docker Compose是 docker 提供的一个命令行工具,用来定义和运行由多个容器组成的应用。使用 compose,我们可以通过 YAML 文件声明式的定义应用程序的各个服务,并由单个命令完成应用的创建和启动。
Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署,显然 Docker Swarm 会更加适合。
Swarm deamon只是一个调度器(Scheduler)加路由器(router),Swarm自己不运行容器,它只是接受Docker客户端发来的请求,调度适合的节点来运行容器,这就意味着,即使Swarm由于某些原因挂掉了,集群中的节点也会照常运行,放Swarm重新恢复运行之后,他会收集重建集群信息。
#centos镜像几个G,但是docker centos镜像才几百兆,这是为什么?
所有容器都是共享宿主机的Linux 内核的,docker镜像只需提供一个很小的rootfs即可,只需要包含最基本的命令,工具,程序库即可,
#Dockerfile构建镜像出现异常,如何排查?
根据异常时上一层已经构建好的临时镜像,将临时镜像运行为容器,然后在容器里面运行安装命令来定位具体的异常。