本文是我自己在学习docker以及kubernetes的过程中遇到的一些问题,以及同事在听过培训之后一些问题,事后我自己去网上找些资料以及问一些资深大牛,我在此做一个归纳总结,将这些问题的解答做一个分享:

1.     容器内的数据该保存在镜像里还是宿主机中?

一般来说,如果是运行时的动态数据,那么这部分数据文件不应该保存在镜像内。在运行时尽量保持容器基础文件不可变的特性,,而变化部分使用挂载宿主目录,或者数据卷来解决。建议看一下官网 docker volume 的文档:https://docs.docker.com/engine/tutorials/dockervolumes/

2.      如果一个docker容器有几百个端口要映射到宿主机,只能一个个-p映射吗?

Docker的-p是可以用范围的,例如:-p 80001-8010:90001-9010。

3.      怎么映射宿主机端口?Dockerfile中的expose和docker run –p 有啥却别?

Docker中有两个概念,一个叫做 EXPOSE ,一个叫做 PUBLISH 。

EXPOSE 是镜像/容器声明要暴露该端口,可以供其他容器使用。这种声明,在没有设定 --icc=false的时候,实际上只是一种标注,并不强制。也就是说,没有声明 EXPOSE 的端口,其它容器也可以访问。但是当强制 --icc=false 的时候,那么只有 EXPOSE 的端口,其它容器才可以访问。

PUBLISH 则是通过映射宿主端口,将容器的端口公开于外界,也就是说宿主之外的机器,可以通过访问宿主IP及对应的该映射端口,访问到容器对应端口,从而使用容器服务。

EXPOSE 的端口可以不PUBLISH,这样只有容器间可以访问,宿主之外无法访问。而 PUBLISH 的端口,可以不事先 EXPOSE,换句话说 PUBLISH 等于同时隐式定义了该端口要 EXPOSE。

docker run 命令中的 -p, -P 参数,以及 docker-compose.yml 中的  ports 部分,实际上均是指PUBLISH。小写 -p 是端口映射,格式为 [宿主IP:]<宿主端口>:<容器端口>,其中宿主端口和容器端口,既可以是一个数字,也可以是一个范围,比如:1000-2000:1000-2000。对于多宿主的机器,可以指定宿主IP,不指定宿主IP时,守护所有接口。大写 -P 则是自动映射,将所有定义 EXPOSE 的端口,随机映射到宿主的某个端口。

4.      通过docker images命令显示的镜像很大,每次都要下载这么大的镜像么?

其实这个显示的是计算后的大小,docker image是分层存储的,自docker的1.10以后,已有的层能够被共享,不会被重复下载,只需下载变化的层,所以实际下载的比这个数值要小。

5.      Docker的日志问题?

Dockerdaemon 的日志一般是交给了 Upstart(Ubuntu 14.04) 或者 systemd (CentOS 7,Ubuntu 16.04)。前者一般位于 /var/log/upstart/docker.log 下,后者一般通过 jounarlctl-u docker 来读取。不同系统的位置都不一样。Docker 容器的日志,均可以通过 docker logs 来访问,而且可以像 tail -f 一样,使用 docker logs -f 来实时查看。如果深究其日志位置,每个容器的日志默认都会以 json-file 的格式存储于 /var/lib/docker/containers/<容器id>/<容器id>-json.log下,不过并不建议去这里直接读取内容,因为Docker提供了更完善地日志收集方式。

关于日志收集,Docker内置了很多日志驱动,可以通过类似于 fluentd, syslog 这类服务收集日志。无论是 docker daemon,还是容器,都可以使用日志驱动。比如,如果打算用 fluentd 收集某个容器日志,可以这样启动容器:

$ docker run -d \

--log-driver=fluentd \

--log-opt fluentd-address=10.2.3.4:24224 \

--log-opt tag="docker.{{.Name}}"\

Nginx

其中 10.2.3.4:24224 是 fluentd 服务地址,实际环境中应该换成真实的地址

可以参考一下这篇文章:https://segmentfault.com/a/1190000000730444

6.      Dockercommit怎么用?何时用?

一般来说,不要用commit提交镜像,而是通过写Dockerfile的方式创建镜像。

使用 docker commit 制作的镜像被称为黑箱镜像,换句话说,就是里面进行的是黑箱操作,除本人外无人知晓。即使这个制作镜像的人,过一段时间后也不会完整的记起里面的操作。那么当有些东西需要改变时,或者因基础镜像更新而需要重新制作镜像时,会让一切变得异常困难,就如同重新安装调试配置服务器一样,失去了 Docker 的优势了。而使用Dockerfile来创建镜像,可以直接使用 Shell 命令,非常方便。而且,这样制作的镜像更加透明,也容易维护,在基础镜像升级后,可以简单地重新构建一下,就可以继承基础镜像的安全维护操作。

7.      如何查看自己私库上的镜像?

两种办法,一种是使用 Registry V2 API。可以列出所有镜像:

curl http://<私有registry地址>/v2/_catalog

如果私有 Registry尚支持 V1 API(已经废弃),可以使用 docker search

docker search <私有registry地址>/<关键字>

8.      kubernetespod是否可以有多个镜像?

答案是肯定的,可以有多个镜像,因为Pod对应于由若干容器组成的一个容器组,同个组内的容器共享一个存储卷(volume)。Pod主要是在容器化环境中建立了一个面向应用的“逻辑主机”模型,它可以包含一个或多个相互间紧密联系的容器。当时同事提出这个问题时,我说的好像是不能有多个镜像,对此我表示,很(hao)报(gan)歉(ga),怪我学艺不精,我给大家找了一个官网的例子:

apiVersion: v1

kind: Pod

metadata:

name: www

spec:

containers:

- name: nginx

image: nginx

volumeMounts:

- mountPath: /srv/www

name: www-data

readOnly: true

- name: git-monitor

image: kubernetes/git-monitor

env:

- name: GIT_REPO

value: http://github.com/some/repo.git

volumeMounts:

- mountPath: /data

name: www-data

volumes:

- name: www-data

emptyDir: {}

一pod多容器容易出现一些问题,有兴趣的同学可以看看这篇文章:

http://www.mamicode.com/info-detail-1213739.html

9.      kubernetes的configMap的使用?

configMap的出现就是为了将应用代码和配置区分开来,用法很简单,在kubernetes的培训时候给大家演示过,在咱们的kubernetes管理平台,租户这个角色可以去创建一个个configMap,而用户在起应用的时候,可以选择你所需要的configMap,挂载到容器中相应的目录下面即可,关于kubernetes的configMap的详细解析,大家可以参考着三篇文章:

Kubernetes 1.2 新功能解析:ConfigMap (上):https://segmentfault.com/a/1190000004890223

Kubernetes 1.2 新功能解析:ConfigMap (中):http://www.tuicool.com/articles/uuu6Vry

Kubernetes 1.2 新功能解析:ConfigMap (下):https://segmentfault.com/a/1190000004940306

10.  问一句kubernetes为啥叫k8s?

强行凑十个问题,其实这个问题才是精髓,曾经一度困扰我,是因为发音相近么?呵呵,too young too simple,实话实说了吧,主要是因为懒,数数 k 和 s 中间多少个字母?8个吧,这个8 的意思就是省略8个字母,懒得敲了……其实这类用法很多,比如i18n (internationalization), l10n (localization) 等等,歪果仁也懒得打字啊。

关于Docker&kubernetes的一些问题的更多相关文章

  1. GitLab + Jenkins + Docker + Kubernetes。

    目前方案是GitLab + Jenkins + Docker + Kubernetes. 方案的工作流程如下:首先,开发人员提交代码代码提交:随后,GitLab 会自动触发Jenkins job,Je ...

  2. Docker&Kubernetes沙龙干货集锦:容器集群管理利器kubernetes详谈-CSDN.NET

    Docker&Kubernetes沙龙干货集锦:容器集群管理利器kubernetes详谈-CSDN.NET undefined Package - crawler undefined 科学网- ...

  3. 7月19日Docker&Kubernetes技术沙龙总结 - DockOne.io

    7月19日Docker&Kubernetes技术沙龙总结 - DockOne.io undefined

  4. Docker Kubernetes 项目

    Kubernetes 是 Google 团队发起并维护的基于Docker的开源容器集群管理系统,它不仅支持常见的云平台,而且支持内部数据中心. 建于Docker之上的Kubernetes可以构建一个容 ...

  5. Docker Kubernetes 环境搭建

    Docker Kubernetes 环境搭建 节点规划 版本 系统:Centos 7.4 x64 Docker版本:18.09.0 Kubernetes版本:v1.8 etcd存储版本:etcd-3. ...

  6. Docker Kubernetes 常用命令

    Docker Kubernetes 常用命令 增 # 通过文件名或标准输入创建资源. kubectl create # 读取指定文件内容,进行创建.(配置文件可指定json,yaml文件). kube ...

  7. Docker Kubernetes 查询字段说明

    Docker Kubernetes  查询字段说明 # 打印受支持的API版本 kubectl api-versions # 扩展 apiextensions.k8s.io/v1beta1 # 注册 ...

  8. Docker Kubernetes 命令行创建容器

    Docker Kubernetes 命令行创建容器 环境: 系统:Centos 7.4 x64 Docker版本:18.09.0 Kubernetes版本:v1.8 管理节点:192.168.1.79 ...

  9. Docker Kubernetes 创建管理 Pod

    Docker Kubernetes 容器扩容与缩容 环境: 系统:Centos 7.4 x64 Docker版本:18.09.0 Kubernetes版本:v1.8 管理节点:192.168.1.79 ...

  10. Docker Kubernetes 创建管理 Deployment

    Docker Kubernetes YAML文件创建容器 通过创建Deployment来管理pods从而创建容器.它会同时创建容器.pod.以及Deployment ! 环境: 系统:Centos 7 ...

随机推荐

  1. [04]JS获取文件大小方法

    </pre><pre name="code" class="html"><input id="file" ty ...

  2. Android横竖屏切换解决方案

    Android横竖屏切换解决方案 首先在Mainifest.xml的Activity元素中加入android:configChanges="orientation|keyboardHidde ...

  3. codechef AUG17 T2 Chef and Mover

    Chef and Mover Problem Code: CHEFMOVR Chef's dog Snuffles has so many things to play with! This time ...

  4. vue v-model 与 vuex state数据绑定问题

    最近开发的项目 需要用input 的v-model 直接绑定到vuex的store数据 因为v-model 能与data的数据绑定 尝试了半天 代码如下 <template> <di ...

  5. uva12265 贩卖土地 单调栈

    输入一个n*m的矩阵,每个格子可能是空地,也可能是沼泽.对于每个空地格子,求出以它为右下角的空矩形的最大周长,然后统计每个周长出现了多少次. 输入包含多组测试数据,第一行输入一个正整数N,表示输入样例 ...

  6. Ubuntu角色登录答疑

    1.su 命令验证出错: $ su - rootPassword: su: Authentication failureSorry. 这时候输入 $ sudo passwd rootEnter new ...

  7. UpdateLayeredWindow后,使用Gdi DrawText文字透明的解决办法

    来源:http://stackoverflow.com/questions/5309914/updatelayeredwindow-and-drawtext 要点就是在先在memDc DrawText ...

  8. Python_Tips[3] -> sort/sorted 排序函数

    排序函数 / Sort Function list自带的sort函数可以实现对列表的排列功能,具有同样功能的还有sorted函数. 基本形式 列表有自己的sort方法,其对列表进行原址排序,既然是原址 ...

  9. Kth Smallest Element in a Sorted Matrix -- LeetCode

    Given a n x n matrix where each of the rows and columns are sorted in ascending order, find the kth ...

  10. luogu P1340 兽径管理

    题目描述 约翰农场的牛群希望能够在 N 个(1<=N<=200) 草地之间任意移动.草地的编号由 1到 N.草地之间有树林隔开.牛群希望能够选择草地间的路径,使牛群能够从任一 片草地移动到 ...