thinkphp手机网站制作,如何学好网站建设,重庆装修公司一览表,古云网站建设戳蓝字“CSDN云计算”关注我们哦#xff01;容器技术是这两年热门的话题#xff0c;因为容器技术给我们带来了很多方便的地方#xff0c;节约了不少成本#xff0c;不管是在运维还是开发上。今天#xff0c;就让我们来看看关于容器更加有深度的问题吧。1Q#xff1a;宿主… 戳蓝字“CSDN云计算”关注我们哦容器技术是这两年热门的话题因为容器技术给我们带来了很多方便的地方节约了不少成本不管是在运维还是开发上。今天就让我们来看看关于容器更加有深度的问题吧。1Q宿主如果和容器系统不同的话那不是和虚拟机一样一层层的调用那么Docker和虚拟机还有什么差别A要把Windows和Linux分清楚更要把内核(kernel)和用户空间(userland)分清楚。容器内的进程是直接运行于宿主内核的这点和宿主进程一致只是容器的userland不同容器的 userland由容器镜像提供也就是说镜像提供了rootfs。假设宿主是Ubuntu容器是CentOS。CentOS 容器中的进程会直接向Ubuntu宿主内核发送syscall而不会直接或间接的使用任何 Ubuntu 的 userland 的库。这点和虚拟机有本质的不同虚拟机是虚拟环境在现有系统上虚拟一套物理设备然后在虚拟环境内运行一个虚拟环境的操作系统内核在内核之上再跑完整系统并在里面调用进程。还以上面的例子去考虑虚拟机中CentOS的进程发送syscall内核调用该请求会被虚拟机内的CentOS的内核接到然后CentOS内核访问虚拟硬件时由虚拟机的服务软件截获并使用宿主系统也就是Ubuntu的内核及userland的库去执行。而且Linux和Windows在这点上非常不同。Linux的进程是直接发syscall的而Windows则把 syscall隐藏于一层层的DLL服务之后因此Windows的任何一个进程如果要执行不仅仅需要 Windows内核还需要一群服务来支撑所以如果Windows要实现类似的机制容器内将不会像Linux这样轻量级而是非常臃肿。看一下微软移植的Docker就非常清楚了。所以不要把Docker和虚拟机弄混Docker容器只是一个进程而已只不过利用镜像提供的 rootfs提供了调用所需的userland库支持使得进程可以在受控环境下运行而已它并没有虚拟出一个机器出来。2Q如果 Docker 升级或者重启的话那容器是不是都会被停掉然后重启啊 A在 1.12 以前的版本确实如此但是从 1.12 开始Docker 引擎加入了 --live-restore 参数使用该参数可以避免引擎升级、重启导致容器停止服务的情况。 默认情况该功能不会被启动如需启动需要配置 docker 服务配置文件。比如 Ubuntu 16.04 这类 systemd 的系统可以修改 /etc/systemd/system/multi-user.target.wants/docker.service 文件在 ExecStart 后面配置上 --live-restoreExecStart/usr/bin/dockerd \--registry-mirrorhttps://registry.docker-cn.com \--live-restore 上面的格式中使用了行尾 \ 的换行形式这点和 bash 脚本一样systemd 支持这种换行形式如对此不了解可以先去学习 bash 程序设计。 需要注意的是--live-restore 和 Swarm Mode 不兼容所以在集群环境中不要使用。实际上集群环境也不用担心某个服务器重启的问题因为其上的服务都会被调度到别的节点上因此服务并不会被中断。3 Q怎么固定容器 IP 地址每次重启容器都要变化 IP 地址怎么办 A一般情况是不需要指定容器 IP 地址的。这不是虚拟主机而是容器。其地址是供容器间通讯的容器间则不用 IP 直接通讯而使用容器名、服务名、网络别名。 为了保持向后兼容docker run 在不指定 --network 时所在的网络是 default bridge在这个网络下需要使用 --link 参数才可以让两个容器找到对方。 但这是有局限性的因为这个时候使用的是 /etc/hosts 静态文件来进行的解析比如一个主机挂了后重新启动IP可能会改变。虽然说这种改变Docker是可能更新/etc/hosts文件但是这有诸多问题可能会因为竞争冒险导致 /etc/hosts 文件损毁也可能还在运行的容器在取得 /etc/hosts 的解析结果后不再去监视该文件是否变动。种种原因都可能会导致旧的主机无法通过容器名访问到新的主机。 如果可能不要使用这种过时的方式而是用下面说的自定义网络的方式。而对于新的环境Docker 1.10以上应该给容器建立自定义网络同一个自定义网络中可以使用对方容器的容器名、服务名、网络别名来找到对方。这个时候帮助进行服务发现的是Docker 内置的DNS。所以无论容器是否重启、更换IP内置的DNS都能正确指定到对方的位置。4Q如何修改容器的 /etc/hosts 文件A容器内的 /etc/hosts 文件不应该被随意修改如果必须添加主机名和 IP 地址映射关系应该在 docker run 时使用 --add-host 参数或者在 docker-compose.yml 中添加 extra_hosts 项。不过在用之前应该再考虑一下真的需要修改 /etc/hosts 么如果只是为了容器间互相访问应该建立自定义网络并使用 Docker 内置的 DNS 服务。5Q怎么映射宿主端口Dockerfile 中的EXPOSE和 docker run -p 有什么区别 ADocker中有两个概念一个叫做 EXPOSE 一个叫做 PUBLISH 。 EXPOSE 是镜像/容器声明要暴露该端口可以供其他容器使用。这种声明在没有设定 --iccfalse的时候实际上只是一种标注并不强制。也就是说没有声明EXPOSE的端口其它容器也可以访问。但是当强制--iccfalse的时候那么只有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 的端口随机映射到宿主的某个端口。小伙伴们冲鸭后台留言区等着你关于容器今天你学到了什么还有哪些不懂的除此还对哪些话题感兴趣快来留言区打卡啦留言方式打开第XX天答……同时欢迎大家搜集更多问题投稿给我们风里雨里留言区里等你~---------------- 完 --------------1.微信群添加小编微信color_ld备注“进群姓名公司职位”即可加入【云计算学习交流群】和志同道合的朋友们共同打卡学习2.征稿投稿邮箱liudancsdn.net微信号color_ld。请备注投稿姓名公司职位。推荐阅读Kafka学习笔记“拼多多”惊爆重大 Bug程序员的眼泪羊毛党的狂欢“黄鳝门”视频女主播一审宣判12306能扛住明星出轨这种流量冲击吗V神说解释以太坊2.0最好的文章就是这篇了以太坊升级的拖油瓶竟只是这几行代码程序员有话说 | 程序猿在乘地铁的时候都在想什么? 文 推 荐 点击“阅读原文”打开 CSDN App 阅读更贴心喜欢就点击“好看”吧