《Docker……》笔记-11 附录A常见问题汇总
来源:互联网 发布:中式现代服装 知乎 编辑:程序博客网 时间:2024/06/11 14:08
杨保华 戴王剑 曹亚伦.《Docker技术入门与实战》 〔M〕.机械工业出版社,2015年2月∶P270-275.
1 镜像相关
- 如何批量清理临时镜像文件?
答:可使用sudo docker rmi $(sudo docker images -q -f dangling=true)
命令。 - 如何查看镜像支持的环境变量?
答:可用sudo docker run IMAGE env
命令。 - 本地镜像文件都存放在哪里?
答:都存放在/var/lib/docker/目录下,,其中container存放容器信息,graph存放镜像信息,aufs存放具体的镜像层文件。 - 构建Docker镜像应该遵循哪些原则?
答:尽量保持镜像功能的明确和内容的精简。要点包括:- 尽量选取满足需求但较小的基础系统镜像。
- 清理编译生成文件、安装包的缓存临时文件。
- 安装各软件时要指定准确的版本号,避免引入不需要的依赖。
- 从安全角度考虑,应尽量使用系统的库和依赖。
- 若安装应用时需配置一些特殊的环境变量,在安装后要还原不需要保持的变量值。
- 使用Dockerfile创建镜像时需要添加.dockerignore文件或使用干净的工作目录。
2. 容器相关
- 容器退出后,通过docker ps 命令查看不到,数据会丢失吗?
答:不会丢失,只有删除容器才会清除所有数据。 - 如何停止所有正在运行的容器?
答:可用sudo docker kill $(sudo docker ps -q)
命令。 - 如何清理批量后台停止的容器?
答:可用sudo docker rm $(sudo docker ps -a -q)
命令。 - 如何给容器指定一个固定IP地址,而不是每次重启容器IP地址都会变。
答:参考笔记10,第二十章中介绍的点对点连接创建和pipwork工具。 - 如何临时退出一个正在交互的容器的终端,而不终止它?
答:按Ctrl-p Ctrl-q。 - 很多应用容器都是默认后台运行的,怎样查看它们的输出和日志信息?
答:使用docker logs命令,后面跟容器名称或ID信息。 - 使用“docker port”命令映射容器的端口时,系统报错:
Error:No public port '80' published for e7d817698b6f
,是什么意思?
答:- 创建镜像时Dockerfile要指定正确的EXPOSE的端口。
- 容器启动时指定PublishAllPort=true。
- 可以在一个容器中运行多个应用进程吗?
答:一般不推荐。如果有类似需求,可通过一些额外的进程管理机制。 - 如何控制容器占用系统资源(CPU、内存)的份额?
答:在使用docker create命令创建容器或使用docker run创建并启动容器时,可用-c|--cpu-shares[=0]
参数来调整容器使用CPU的权重;使用-m|--memory[=MEMORY]
参数来调整容器使用内存的大小。
3. 仓库相关
- 仓库、注册服务器、注册索引有何关系?
答:仓库是存放一组关联镜像的集合。注册服务器是存放实际镜像文件的地方。注册索引则负责维护用户的账号、权限、搜索、标签等管理。因此,注册服务器利用注册索引来实现认证等管理。
4. 配置相关
- Docker的配置文件放在哪里,如何修改配置?
**答:**Ubuntu系统的配置文件是/etc/default/docker,Centos系统的配置文件放在/etc/sysconfig/docker。 - 如何更改Docker的默认存储位置?
**答:**Docker默认存储位置是/var/lib/docker,如果希望将Docker的本地文件存储到其他分区,可用Linux软连接来实现。
5. Docker与虚拟化
- Docker与LXC(Linux Container)有何不同?
**答:**LXC利用Linux上相关技术实现了容器。Docker则在如下的几个方面进行了改造:- 移植性:通过抽象容器配置,容器可实现从一个平台移植到另一个平台;
- 镜像系统:基于AUFS的镜像系统为容器的分发带来了很多的便利,同时共同的镜像层只需要存储一份,实现高效率的存储;
- 版本管理:类似于Git的版本管理理念,用户可以更方便的创建、管理镜像文件;
- 仓库系统:仓库系统大大降低了镜像的分发和管理的成本;
- 周边工具:各种现有工具(配置管理、云平台)对Docker的支持,以及基于Docker的PaaS、CI等系统,让Docker应用更加方便和多样化。
- Docker与Vagrant有何不同?
答:两者定位完全不同。- Vagrant类似于Boot2Docker(一款运行Docker的最小内核),是一套虚拟机的管理环境。Vagrant可在多种系统上和虚拟机软件中运行,,可在Windows、Mac等非Linux平台上为Docker提供支持、自身具有较好的包装性和移植性。
- 原生的Docker自身只能在Linux平台上运行,但启动和运行的性能都比虚拟机要快,更适合快速开发和部署应用的场景。
简单说:Vagrant适合用于管理虚拟机,而Docker适合用于管理应用环境。
- 开发环境中Docker和Vagrant该如何选择?
**答:**Docker不是虚拟机,而是进程隔离,对于资源的消耗很少。Vagrant是虚拟机上做的封装,虚拟机本身会消耗资源。
若本地使用的是OSX或Windows环境,需要开虚拟机,单一开发环境下vagrant更简单;多环境开发下推荐在vagrant内再使用Docker进行环境隔离。
6. 其他问题
- Docker能在非Linux平台上运行吗?
答:可以,需要使用boot2docker等软件创建一个轻量级的Linux虚拟机层。 - 如何将一台宿主主机的docker环境迁移到另一台宿主主机?
答:停止Docker服务。将整个docker存储文件夹复制到另一台宿主主机,然后调整另一台宿主主机配置即可。 - 创建Docker容器后,在宿主机用“ip netns show”为何看不到容器的网络名字空间?
**答:**Docker创建容器后,删除了/var/run/netsns目录中的网络名字空间文件,可手动恢复。
首先,使用下面命令查看容器进程信息,如这里的1234.$ sudo docker inspect --format='{{. state.pid}}' $container_id 1234
接下来,在/proc目录下,把对应的网络名字空间文件链接到/var/run/netns目录$ sudo ln -s /proc/1234/ns/net /var/run/netns/
然后,即可通过正常的系统命令来查看或操作容器的名字空间了。如:$ sudo ip netns show
0 0
- 《Docker……》笔记-11 附录A常见问题汇总
- 《Docker……》笔记-12 附录C Docker命令查询
- 附录 A. 常见问题乱弹
- Docker 常见问题汇总
- Docker 常见问题汇总
- 【大话设计模式】附录A 笔记
- 附录A
- 附录A
- 《Docker……》笔记-8 Docker核心技术
- 《Docker……》笔记-9 Docker 安全
- 《深入Linux内核架构》附录A<体系结构相关知识>笔记
- 《JavaScript语言精粹》学习笔记——附录A.毒瘤
- Docker常见问题
- Docker常见问题
- Hadoop 学习笔记十 常见问题汇总
- 附录A 9. 矩阵
- 附录A expr命令
- 附录A 建构环境
- jdbc学习笔记4
- C++中int main(int argc, char *argv[])解释
- 第五十一讲 Spark优化之“钨丝计划”
- 关于前端性能优化的小想法
- JavaScript中数组slice和splice的对比小结
- 《Docker……》笔记-11 附录A常见问题汇总
- C# 设计模式巩固笔记
- STM32F4、F2系列拥有两个片上USB-OTG的应用问题
- 构建maven的SSH项目
- leecode 解题总结:260. Single Number III
- Leetcode 4 Median of Two Sorted Arrays(二分)
- [连载]嵌入式实时操作系统AIOS设计与实现
- 获取字符串高度或宽度
- u盘安装linux操作系统So Easy