过关斩将之路-docker(IT枫斗者)
1问:什么是docker?有何作用?
1答:是个容器化平台,它以容器的形式将应用程序和它相关的依赖都打包在一起,以确保您的应用程序在任何环境中无缝运行。
作用:
他将我们开发的应用程序打成个镜像,不管是DEV还是QA还是线上,拿走镜像直接运行即可,不会再出现因为环境不一致导致程序有问题的情况,减少了扯皮的时间。
部署简单方便。
方便我们统一管理应用程序以及方便OP动态伸缩。
2问:它与虚拟机有什么区别?
2答:
传统虚拟机,虚拟出一个硬件,运行一个完整的操作系统,然后在这个操作系统上安装软件和部署等操作。
容器内的应用直接运行在宿主机上,容器是没有自己内核的,也没有虚拟我们的硬件环境,多个容器之间是共享硬件资源和宿主机内核的,所以很轻便。
容器之间彼此隔离,每个容器内部都有一个属于自己的文件系统,互不影响。
3问:Docker容器有哪几种状态?如何查看Docker容器的状态?
3答:运行、已暂停、重新启动、已退出。采取 docker ps -a查看容器的状态。
4问:Docker的流程是怎样的?
4答:

5问:Docker的原理是怎么样的?
5答:Docker是一个Client-Server结构的系统,Docker的守护进程运行在主机上,通过Socket从客户端访问,DockerServer接收到Docker Client的指令就会执行对应的命令(比如 docker run等)。docker之间互相隔离。

6问:什么是Docker镜像?
6答:Docker镜像是Docker容器的源代码。用于创建容器。使用build命令创建镜像,并且在使用run启动时它们将生成容器。镜像存储在Docker仓库中。
7问:Docker镜像和层有什么区别?
7答:
镜像:Docker镜像是由一系列只读层构建的;
层:每个层代表镜像Dockerfile中的一条指令;
重要的是,每个层只是与之前一层的一组差异层,也就是相同的层就不再重新pull了,节省了空间。
8问:什么是Docker容器呢?
8答:Docker容器包括应用程序及其所有依赖项,但与其他容器共享内核,在主机操作系统的用户空间中作为独立进程运行。Docker容器是Docker镜像的实例。
9问:说说Docker的一些常用命令?
9答:

10问:Docker如何停止所有运行的容器?
10答:
重点考察的是$符号,相当于for循环遍历。
docker kill $(docker ps -q)
docker如何清理批量后台停止的容器?
docker rm $(docker ps -a -q )
11问:Dockerfile中常用指令有哪些?
11答:

12问:Dockerfile中的COPY和ADD有啥区别?
12答:
ADD:拷贝文件或目录到容器中,如果是URL或压缩包便会自动下载或自动解压;
COPY:拷贝文件或目录到容器中,跟ADD类似,但不具备自动下载或解压的功能;
13问:如何构建一个dockerfile?
13答:
编写一个dockerfile文件
docker build构建成一个镜像
docker run启动镜像为容器
docker push发布镜像到远程仓库
13问:如何构建一个dockerfile?
13答:
编写一个dockerfile文件
docker build构建成一个镜像
docker run启动镜像为容器
docker push发布镜像到远程仓库
14问:Dockerfile的CMD和ENTRYPOINT的区别?
14答:两个都是运行容器时执行的shell命令的功能。区别:

15问:如何发布docker镜像到Dockerhub?
15答:
注册账号:https://hub.docker.com/
登录dockerhub账号:,然后回车会让输入密码。
提交镜像到dockerhub, docker push 镜像名称:TAG
16问:Docker数据怎么持久化?
16答:

17问:多个容器之间怎么实现数据共享?
17答:让多个容器之间挂载到同一个容器的目录下。命令:

比如容器A挂载xxx目录到宿主机/home/work下了,然后容器B和容器C挂载到了容器A的xxx上,这时候A、B、C三个容器共享同一份挂载目录,修改其中一个,其他两个会同步修改,停掉容器且删除容器后数据也不会丢失!因为他在宿主机上有备份。
18问:为什么需要数据共享?
18答:
如果容器太多,每一次都要写 -v xxx:xxx ,过于复杂,也容易出错,这时候可以通过 docker create创建共享容器,然后启动的时候通过 --volumes-from 指定创建的共享容器名称即可,也就是说可以把上面 -v xxx:xxx 这一串统一放到一个地方去管理,容器启动的时候直接引用这个统一配置即可,方便统一管理。
19问:说说docker的网络管理。
19答:
单向容器间通信采取 --link,原理就是在hosts文件里添加映射。
双向容器间互通采取自定义网络的方式,然后将应用加入到同网络中即可双向互通。好处在于便于管理,不同集群采取不同网络。
