设为首页 收藏本站
查看: 1526|回复: 0

[经验分享] docker常见问题汇总

[复制链接]

尚未签到

发表于 2018-5-29 10:25:23 | 显示全部楼层 |阅读模式
  一、需求
  公司本地环境上了xen和kvm,但上周,CTO跑过来跟我说,你这几天熟悉一下docker,公司打算利用docker做自动化持续集成,和快速部署,原有测试环境,可以先跑着。我想起去年,申请购入一本docker入门书,然后用了一个星期看完了,也总算有初步认识与运用。

  正如前人所说,好记性不如烂笔头,我一般看完一本书,都会总结一下。以下书里讲到,我把它敲下来放到博客上,随时查阅!
  二、镜像相关
  1、如何批量清理临时镜像文件?
docker rmi $(docker images -q -f dangling=true)  2、如何查看镜像支持环境变量?
docker run IMAGE env  3、本地的镜像文件都存放哪里?
与docker相关本地资源都存放在/var/lib/docker/目录树下,其中container目录存放容器信息,graph目录存放镜像信息,aufs目录下存放具体镜像层次文件。疑问的是,在我centosy6.5下找不到aufs这个目录  4、构建Docker镜应该遵循哪些原则?
整体原则上,尽量保持镜像功能的明确和内容精简,要点包括:尽量选取满足需求但较小的基础系统镜像,例如大部分时候可以选择debian:wheezy镜像,仅有85M大小清理编译生成文件,安装包的缓存等临时文件安装各个软件时候要指定准确版本号,并避免引入不需要的依赖。从安全角度考虑,应用要尽量使用系统的库和依赖如果安装应用的时候需要配置一些特殊的环境变量,在安装后要还原不需保持的变量值使用Docker创建镜像时候要添加.dockerignore文件或使用干净的工作目录  三、容器相关的
  1、容器退出后,通过docker ps 命令查看不到,数据会丢失么?
容器退出后会处于终止(exited)状态,此时可以通过docker ps -a 查看,其中数据也不会丢失,还可通过docker start 命令来启动。只有删除掉容器才会清除所有数据  2、如何停止所有正在运行的容器?
docker kill $(docker ps -q)  3、如何清理批量后台停止的容器?
docker rm $(docker ps -a -q)  4、如何给容器指定一个固定的IP地址,而不是每次重启容器IP地址都会变?
参考本书第20章,会涉及到点对点连接创建和pipwork工具  5、如何临时退出一个正在交互的容器的终端,而不是终止它?
按ctrl-P ,ctrl -q 。如果按Ctrl -c 往往会让容器应用进程终止,进而会终止容器。疑问,我的centos6.5和ubuntu 下,这个这两人个键无法启作用  6、很多应用容器都是默认后台运行的,怎么查看它们的的输出和日志信息?
docker logs 后面跟容器名称或ID信息  7、使用“docker port” 命令映射容器的端口时,系统报错Error:No public port '80' published ofr e7d817698b6f,是什么意思
创建镜像时Dockerfile要指定正确的EXPOSE的端口容器启动时指定PublishALLPort=true  8、可以在一个容器中同时运行多个应用进程吗?
一般不推荐在同一个容器内运行多个应用进程。如果有类似需求,可以通过一些额外的进程管理机制。比如supervisord来管理所运行的进程。可以参考https://docs.docker.com/article/using_supervisord/  9、如何控制容器占用系统资源(CPU,内存)的份额?
在使用docker create 创建容器或使用docker run 创建并启动容器的时候,可以使用-c|--cpu-share[=0]参数来调整容器使用CPU的权重;使用-m|--memory[=MEMORY]参数来调整容器使用内存大小  四、仓库相关
  1、仓库(Repository),注册服务器(Registy),注册索引(Index)有何关系?
仓库是存放一组关联镜像的集合,比如同一个应用的不同版本的镜像。注册服务器是存放实际镜像文件的地方。注册索引则负责维护用户的账号,权限,搜索,标签等管理。因此注册服务器利用注册索引来实现认证等管理  2、从非官方仓库(例如dl.dockerpool.com)下载镜像时候,有时候提示“Error:Invalid registry endpoint https://dl.dockerpool.com:5000/v1/.......”?
Docker自1.3.0版本后,加强了对镜像的安全性的验证,需要手动添加对非官方仓库的信任编辑Docker配置文件,其其添加:DOCKER_OPTS="--insecure-registry dl.dockerpool.com:5000"之后,重启docker服务  五、配置相关
  1、Docker的配置文件在哪里,如何修改配置?
Ubutu系统配置文件是/etc/default/docker,centos系统配置文件放在/etc/sysconfig/docker。我以centos6.5来[root@master ~]# cat /etc/sysconfig/docker# /etc/sysconfig/docker## Other arguments to pass to the docker daemon process# These will be parsed by the sysv initscript and appended# to the arguments list passed to docker -d other_args='--insecure-registry 10.1.9.214:5000'#other_args='--iptables=true'DOCKER_CERT_PATH=/etc/docker # Resolves: rhbz#1176302 (docker issue #407)DOCKER_NOWARN_KERNEL_VERSION=1 # Location used for temporary files, such as those created by# # docker load and build operations. Default is /var/lib/docker/tmp# # Can be overriden by setting the following environment variable.# # DOCKER_TMPDIR=/var/tmp#other_args="-b=br0"  2、如何更改Docker默认存储位置?
Docker 的默认存储位置是/var/lib/docker,如果希望将docker的本地文件存储其他分区,可以使用Linux软件连接方式来实现  六、Docker与虚拟化
  1、Docker 和LXC(Linux Container)有何不同?
LXC利用Linux上相关技术实现了容器。Docker则在如下几方面进行了改进:移值性: 通过抽象容器配置,容器可以实现从一个平台移植到另一个平台;镜像系统:基于AUFS的镜像系统为容器的分发带来了很多便利,同时共同的镜像层只需存储一份,实现高效率的存储;版本管理:类似于Git的版本管理理念,用户可以更方便的创建,管理镜像文件;仓库系统:仓库系统大大降低了镜像分发和管理成本;周边工具:各种工具(配置管理,云平台)对Docker的支技,以及基于Docker的PasS,CI等系统,让Docker的应用更加方便和多样化。  2、Docker与Vagrant有何不同?
两者定位不同Vagrant类似于Boot2Docker(一款运行Docker的最小内核),是一套虚拟机的管理环境。Vagrant可以在多种系统上和虚拟机软件中运行,可以在windowns,Mac等非Linux平台上为Docker提供支技,自身具有较好包装性和移值性。原生Docker自身只能运行在Linux平台上,但启动和运行的性能都要比虚拟机要愉,往往更适合快速开发和部署应用的场景。简单来说:Vagrant适合来管理虚拟机,而Docker适合用来管理应用环境。  3、开发环境Docker和Vagrant该如何选择?
Docker不是虚拟机,而是进程隔离,对于资源消耗很少。但需要Linux环境支技。Vagrant是虚拟机做的封装,虚拟机本身会消耗资源。如果本地使用OSX或者Windows环境,那就开虚拟机,单一开发环境下vagrant更简单;多环境开发下推荐vagrant里再使用Docker进行环境隔离  七、其他问题
  1、如何将一台宿 主主机的docker环境迁移 到另外一台宿主主机?
停止Docker服务。将整个docker存储文件夹复制到另外一台宿主主机,然后调整另外一台宿主主机配置即可  2、创建Docker空器后,在宿主机用“ip netns show”为何看不到容器的网络名字空间?
Docker在创建容器后,删除了/var/run/netns目录的网络名字空间文件。因此,可以手动恢复它。首先,使用下面的的命令查看容器进程信息,比如这里的1234.docker inspect --format='``.`State`.`Pid`' $container_id1234接下来,在/proc目录 下,把对应的网络名字空间文件链接到/var/run/netns目录。ln -s /proc/1234/ns/net /var/run/netns/然后,可以通过正常系统命令来查看或操作容器命名空间了,如ip netns show1234  疑问:Centos6.5的内核已经支持network namespace, 但安装的iproute版本过低,不支持ip nets 命令。升级iproute 至 iproute-2.6.32-130.el6ost.netns.2.x86_64。
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-482483-1-1.html 上篇帖子: docker 监控浅谈 下篇帖子: 开源docker轻量级管理平台shipyard部署(中文版)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表