关于Docker&kubernetes的一些问题
本文是我自己在学习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的一些问题的更多相关文章
- GitLab + Jenkins + Docker + Kubernetes。
目前方案是GitLab + Jenkins + Docker + Kubernetes. 方案的工作流程如下:首先,开发人员提交代码代码提交:随后,GitLab 会自动触发Jenkins job,Je ...
- Docker&Kubernetes沙龙干货集锦:容器集群管理利器kubernetes详谈-CSDN.NET
Docker&Kubernetes沙龙干货集锦:容器集群管理利器kubernetes详谈-CSDN.NET undefined Package - crawler undefined 科学网- ...
- 7月19日Docker&Kubernetes技术沙龙总结 - DockOne.io
7月19日Docker&Kubernetes技术沙龙总结 - DockOne.io undefined
- Docker Kubernetes 项目
Kubernetes 是 Google 团队发起并维护的基于Docker的开源容器集群管理系统,它不仅支持常见的云平台,而且支持内部数据中心. 建于Docker之上的Kubernetes可以构建一个容 ...
- Docker Kubernetes 环境搭建
Docker Kubernetes 环境搭建 节点规划 版本 系统:Centos 7.4 x64 Docker版本:18.09.0 Kubernetes版本:v1.8 etcd存储版本:etcd-3. ...
- Docker Kubernetes 常用命令
Docker Kubernetes 常用命令 增 # 通过文件名或标准输入创建资源. kubectl create # 读取指定文件内容,进行创建.(配置文件可指定json,yaml文件). kube ...
- Docker Kubernetes 查询字段说明
Docker Kubernetes 查询字段说明 # 打印受支持的API版本 kubectl api-versions # 扩展 apiextensions.k8s.io/v1beta1 # 注册 ...
- Docker Kubernetes 命令行创建容器
Docker Kubernetes 命令行创建容器 环境: 系统:Centos 7.4 x64 Docker版本:18.09.0 Kubernetes版本:v1.8 管理节点:192.168.1.79 ...
- Docker Kubernetes 创建管理 Pod
Docker Kubernetes 容器扩容与缩容 环境: 系统:Centos 7.4 x64 Docker版本:18.09.0 Kubernetes版本:v1.8 管理节点:192.168.1.79 ...
- Docker Kubernetes 创建管理 Deployment
Docker Kubernetes YAML文件创建容器 通过创建Deployment来管理pods从而创建容器.它会同时创建容器.pod.以及Deployment ! 环境: 系统:Centos 7 ...
随机推荐
- 第二届360杯全国大学生信息安全技术大赛部分解题思路(WEB安全)
第一题如下: 用burpsuit设置好代理后,点击发送验证码,可以看到如下: 然后go之后可以看到如下的验证码: 提交验证码后即可获得key 第二题如下: 通过/data/mysql_error_tr ...
- 将PHP程序中返回的JSON格式数据用gzip压缩输出
//phpinfo(); 搜索下 zlib 是否开启 //此示例开启压缩 Content-Length:124 Size: 404B //未开启gzip压缩 Content-Length:675 Si ...
- Js String 属性扩展
String.prototype.startsWith = function (startStr) { var d = startStr.length; return (d >= 0 &am ...
- Video for Linux Two API Specification Revision 2.6.32【转】
转自:https://www.linuxtv.org/downloads/legacy/video4linux/API/V4L2_API/spec-single/v4l2.html Video for ...
- 华为上机测试题(大数相乘-java)
PS:这个不是自己写的,测试OK,供参考. /** * 大数相乘 */ public class BigData { public static void main(String[] args) { ...
- Centos7下zabbix部署(三)自定义监控项
引言 在前面的博客中我们介绍了zabbix自带的模板,并且完成了我们的一些比较常用的监控,现在我们如果想要监控我们磁盘的IO,这时候zabbix并没有给我们提供这么一个模板,所以我们需要自己来创建一个 ...
- PHP使用AJax轮询实现新订单实时提醒
业务逻辑:Ajax每隔10秒钟请求一次接口,该接口会去查询数据库是否有新的订单,如果有则返回新订单的数量,后台收到声音提示,更改后台提醒数量 提醒框可链接到订单列表,后台更改完订单状态后会提醒会消失 ...
- Google C++ 编码规范(中文版)
Google C++ 编码规范(英文)在线地址:http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml 中文版PDF下载:本地下载
- 「kuangbin带你飞」专题十七 AC自动机
layout: post title: 「kuangbin带你飞」专题十七 AC自动机 author: "luowentaoaa" catalog: true tags: - ku ...
- Codeforces 1027F. Session in BSU
题目直通车:Codeforces 1027F. Session in BSU 思路: 对第一门考试,使用前一个时间,做标记,表示该时间已经用过,并让第一个时间指向第二个时间,表示,若之后的考试时间和当 ...