前端 10 问之 Docker (第一篇)

用户头像
局外人
关注
发布于: 2020 年 09 月 13 日
前端 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、如何停止所有运行的容器?



docker rm `docker ps -aq`



7、如何删除所有已停止的容器?



# 删除所有已停止的容器
docker rm $(docker ps -a -f"status=exited" -q)
# 或者
docker ststem prune



8、Dockerfile 中 COPY 与 ADD 的区别?



ADD 指令和 COPY 的格式和性质基本一致。但是在 COPY 基础上增加了一些功能,它可以自动解压缩文件。



另外需要注意的是,ADD 指令会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。



因此在 COPY 和 ADD 指令中选择的时候,可以遵循这样的原则,所有的文件复制均使用 COPY 指令,仅在需要自动解压缩的场合使用 ADD。



9、容器的端口是怎么映射到 host 主机上的?



容器所有到外部网络的连接,源地址都会被 NAT 成本地系统的 IP 地址。这是使用 iptables 的源地址转发实现的。



以 ubuntu16.04 做实验,参考如下:



用 docker 创建一个 nginx 服务:



docker run -p 9999:80 -d nginx



docker ps查看,可以看到nginx容器正在运行:





用 iptables 查看当前防火墙,执行:



iptables -t nat -nL





可以看到 Chain DOCKER172.17.0.5:80 被转发到了宿主机的 9999 端口



10、为什么两个容器可以互相 ping 通?



借助 网桥、VETH 的能力。



Docker 服务默认会创建一个 docker0 网桥,所有容器创建时都会通过veth默认链接到这个网桥上。





觉得不错可以 star 这个 repo 关注更多内容。

用户头像

局外人

关注

还未添加个人签名 2017.12.12 加入

还未添加个人简介

评论

发布
暂无评论
前端 10 问之 Docker (第一篇)