前端 10 问之 Docker (第一篇)
1、容器技术解决了什么问题?
解决了开发人员和运维人员的沟通
容器镜像是轻量的、可执行的独立软件包 ,包含软件运行所需的所有内容:代码、运行时环境、系统工具、系统库和设置。
容器化软件适用于基于Linux和Windows的应用,在任何环境中都能够始终如一地运行。
容器赋予了软件独立性 ,使其免受外在环境差异(例如,开发和预演环境的差异)的影响,从而有助于减少团队间在相同基础设施上运行不同软件时的冲突。
一句话概括容器:容器就是将软件打包成标准化单元,以用于开发、交付和部署。
2、docker 底层用了哪些技术?
namespace:做隔离pid,net,ipc,mnt,uts
control groups:做资源限制
union file systems:container和image的分层
3、容器和虚拟机有什么区别?
容器是APP层面的隔离,虚拟化是物理层面的隔离;
容器占用的空间较少(容器镜像大小通常只有几十兆),瞬间就能完成启动。
每个VM都包含一整套操作系统、一个或多个应用、必要的二进制文件和库资源,因此占用大量空间。而且 VM 启动也相对缓慢。
4、什么是 DevOps?
DevOps是一种重视“软件开发人员(Development)”和“IT运维技术人员(Operations)”之间沟通合作的文化、运动或惯例。通过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。具体来说,就是在软件交付和部署过程中提高沟通与协作的效率,旨在更快、更可靠的的发布更高质量的产品。
5、image 与 container 的区别?
image
文件和 meta data 的集合
分层的,每一层可以添加改变删除文件,成为一个新的Image
不同的 image 可以共享相同的 layer
本身是 read-only 的
container
通过 image 创建
在 image layer 上建立一个 container layer(可读写)
image 负责 app 的存储和分发,container 负责运行 app
6、如何停止所有运行的容器?
7、如何删除所有已停止的容器?
8、Dockerfile 中 COPY 与 ADD 的区别?
ADD 指令和 COPY 的格式和性质基本一致。但是在 COPY 基础上增加了一些功能,它可以自动解压缩文件。
另外需要注意的是,ADD 指令会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。
因此在 COPY 和 ADD 指令中选择的时候,可以遵循这样的原则,所有的文件复制均使用 COPY 指令,仅在需要自动解压缩的场合使用 ADD。
9、容器的端口是怎么映射到 host 主机上的?
容器所有到外部网络的连接,源地址都会被 NAT 成本地系统的 IP 地址。这是使用 iptables 的源地址转发实现的。
以 ubuntu16.04 做实验,参考如下:
用 docker 创建一个 nginx 服务:
docker ps
查看,可以看到nginx容器正在运行:
用 iptables 查看当前防火墙,执行:
可以看到 Chain DOCKER
中 172.17.0.5:80
被转发到了宿主机的 9999 端口
10、为什么两个容器可以互相 ping 通?
借助 网桥、VETH 的能力。
Docker 服务默认会创建一个 docker0 网桥,所有容器创建时都会通过veth默认链接到这个网桥上。
觉得不错可以 star 这个 repo 关注更多内容。
评论