08 | 白话容器基础(四):重新认识Docker容器
该思维导图由 AI 生成,仅供参考
- 深入了解
- 翻译
- 解释
- 总结
本文深入介绍了Docker容器技术的核心原理和操作流程,通过实际案例和命令演示,读者可以深入了解Docker容器的基本概念和操作流程。作者首先展示了如何用Python编写Web应用,并通过Dockerfile制作容器镜像,详细解释了Dockerfile中各个原语的作用。接着演示了如何通过docker run命令启动容器,并通过curl命令访问容器内应用的返回结果。此外,文章还深入解释了Linux Namespace的隔离机制和docker exec的实现原理,以及如何通过setns()系统调用加入到容器进程的Namespace中。另外,文章还介绍了Docker镜像上传到Docker Hub的操作,以及使用docker commit指令的情况。最后,文章还讲解了Docker项目另一个重要的内容:Volume(数据卷),并详细解释了Volume机制的原理和使用方式。整篇文章通俗易懂,适合读者快速了解Docker容器的基本概念和操作流程。通过对Linux Namespace、Cgroups和rootfs的深入解读,读者可以更清晰地理解容器技术的运行原理。文章还提出了一些思考题,引发读者对容器技术更深入的思考和探讨。
《深入剖析 Kubernetes》,新⼈⾸单¥68
全部留言(187)
- 最新
- 精选
- 黄文刚 收货很大,感谢张磊!请教一个问题,请问在容器内部如何获取宿主机的IP? 谢谢。
作者回复: 单靠容器,在隔离开的情况下是拿不到的。但是有了kubernetes之后这些系统信息都可以从环境变量里拿到。这个功能叫downwardapi
2018-09-10478 - silver所以说 docker exec 每次都会创建一个和容器共享namespace的新进程?
作者回复: 可以这么理解,i.e. spawn a new process in existing namespace
2018-09-1034 - long904图中不太明白为什么'CMD'属于只读层,那如果 dockfile 里面 yum install 并且 commit 的话,这些 CMD 执行的 yum 命令修改的内容还属于只读层?
作者回复: 任何镜像里的内容,都属于只读层。commit之后的东西当然也属于只读层。
2018-09-13424 - 陶希阳想知道云服务器等技术是不是也是通过namespace + cgroup实习的?
作者回复: 当然不是,那可是正儿八经的虚拟化技术
2018-09-10522 - Geek_9ca34e;老师,有个地方还是不太明白,以下是你些的原文: 注意:这里提到的 " 容器进程 ",是 Docker 创建的一个容器初始化进程(dockerinit),而不是应用进程 (ENTRYPOINT + CMD) dockerinit 会负责完成根目录的准备、挂载设备和目录、配置 hostname 等一系列需要在容器内进行的初始化操作。 最后,它通过 execv() 系统调用,让应用进程取代自己,成为容器里的 PID=1的进程。 我有以下疑问: 1、dockerinit 是一个进程,完成初始化之后 ,让应用进程取代自己,那么dockerinit 进程会自动销毁么? 2、这里的dockerinit和应用进程在宿主机中是两个不同的进程id么? 3、执行 docker exec -it container bin/sh 命令后,bin/sh 命令创建的进程只是加入了container的namespace,但是从宿主机的角度它是一个独立的进程,只是共享了namespace信息么? 4、一个容器内部是否只有一个进程?,或者说容器只是一个房间(由namespace和cgroup组成),而其他的进程都是走进了这个房间,让大家以为这个房间就是一个系统,里面包含了这么多进程,其实在宿主机的角度他们都是一个个进程,只是共享了namespace和cgroup 而已,这样理解对么?
作者回复: 是。替换当然就是为了保证pid不变。注意,容器里的其他进程都是1号进程的子进程,不存在独立的说法。
2018-09-21321 - 大卫张老师,当Dockerfile中使用sh脚本启动,而不是exec启动java应用时,若通过docker stop不能优雅的停掉Java进程。查资料说可用trap接受信号处理,这个有什么其他好的解决办法没?
作者回复: trap sig term kill很标准的做法
2019-01-0417 - 蔡鹏飞docker run 时指定-v挂载宿主机目录到容器目录,即使容器原有目录内有数据,也会被我宿主机目录数据替代的呀。难道是和我使用的storage-driver有关?我用的是overlay存储。
作者回复: 这个行为其实是可配置的
2018-09-12513 - 帅老师好,又来问您问题了。生产中有没有什么好的工具管理本地的docker registry,比如磁盘满了想清理等等的操作。期待老师的回复,谢谢!
作者回复: harbor啊
2018-10-1812 - ShJin、Cheng那么老师,请问有没有办法禁止通过exec -it的方式进入容器?
作者回复: 权限控制的办法很多,但这也啥意义呢?我手写一个20行的C语言代码就可以加入容器的namespace 啊。所以不随便给人root权限比较重要吧。
2018-09-1710 - jssfy请问docker挂载有何限制没,是否随便一个目录都可以挂载?在容器里应该是root用户,岂不是可以对目录无节制地操作,哪怕原本主机目录中有些文件并不允许当前用户访问?是否可以相应限制
作者回复: 无限制。至于用户权限,是有user namespace可以做一定的限制。
2018-09-1110