本节我们对 Docker 镜像做个小结. 这一部分我们首先讨论了镜像的分层结构,然后学习了如何构建镜像,最后实践使用 Docker Hub 和本地 registry. 下面是镜像的常用操作子命令: images    显示镜像列表 history   显示镜像构建历史 commit    从容器创建新镜像 build     从 Dockerfile 构建镜像 tag       给镜像打 tag pull      从 registry 下载镜像 push      将 镜像 上传到 regi…
镜像是 Docker 容器的基石,容器是镜像的运行实例,有了镜像才能启动容器.为什么我们要讨论镜像的内部结构? 如果只是使用镜像,当然不需要了解,直接通过 docker 命令下载和运行就可以了. 但如果我们想创建自己的镜像,或者想理解 Docker 为什么是轻量级的,就非常有必要学习这部分知识了. 一.最小的镜像 1.运行hello-world镜像 hello-world 是 Docker 官方提供的一个镜像,通常用来验证 Docker 是否安装成功. 我们先通过 docker pull 从 D…
前面我们已经介绍了ps/top/stats.Sysdig.Weave Scope.cAdvisor 和 Prometheus 多种容器监控工具和方案,是时候做一个比较了.下面将从五个方面来对比它们之间的优劣. 部署容易度 ps/top/stats 无疑是最容易使用的,它们是 Docker 自带的子命令,随时随地都可以用来快速了解容器的状态.其余几种也都能以容器的方式运行,总的来说都不算复杂.相对而言,Prometheus 涉及的组件比较多,搭建整个方案需要运行的容器数量也要多些,部署和管理的难道…
docker managed volume 与 bind mount 在使用上的最大区别是不需要指定 mount 源,指明 mount point 就行了.还是以 httpd 容器为例: 我们通过 -v 告诉 docker 需要一个 data volume,并将其 mount 到 /usr/local/apache2/htdocs.那么这个 data volume 具体在哪儿呢? 这个答案可以在容器的配置信息中找到,执行 docker inspect 命令: docker inspect 21a…
上节我们通过 kubeadm 在 k8s-master 上部署了 Kubernetes,本节安装 Pod 网络并添加 k8s-node1 和 k8s-node2,完成集群部署. 安装 Pod 网络 要让 Kubernetes Cluster 能够工作,必须安装 Pod 网络,否则 Pod 之间无法通信. Kubernetes 支持多种网络方案,这里我们先使用 flannel,后面还会讨论 Canal. 执行如下命令部署 flannel: kubectl apply -f https://raw.…
上一节我们完成了 Kubernetes Dashboard 的安装,本节就来实践一下. Dashboard 界面结构 Dashboard 的界面很简洁,分为三个大的区域. 顶部操作区在这里用户可以搜索集群中的资源.创建资源或退出. 左边导航菜单通过导航菜单可以查看和管理集群中的各种资源.菜单项按照资源的层级分为两类:Cluster 级别的资源  Namespace 级别的资源  默认显示的是 default Namespace,可以进行切换: 中间主体区在导航菜单中点击了某类资源,中间主体区就会…
Weave Scope 的最大特点是会自动生成一张 Docker 容器地图,让我们能够直观地理解.监控和控制容器.千言万语不及一张图,先感受一下. 下面开始实践 Weave Scope. 安装 执行如下脚本安装运行 Weave Scope. curl -L git.io/scope -o /usr/local/bin/scope chmod a+x /usr/local/bin/scope scope launch scope launch 将以容器方式启动 Weave Scope. 根据提示,…
本节讨论 Prometheus 的核心,多维数据模型.我们先来看一个例子. 比如要监控容器 webapp1 的内存使用情况,最传统和典型的方法是定义一个指标 container_memory_usage_bytes_webapp1 来记录 webapp1 的内存使用数据.假如每1分钟取一次样,那么在数据库里就会有类似下面的记录. 好,现在需求发生了点变化,我们需要知道所有 webapp 容器的内存使用情况.如果还是采用前面的方法,就不得不增加新的指标 container_memory_usage…
上一节已经部署好了 Graylog,现在学习如何用它来管理日志. 首先启动测试容器. docker run -d \ --log-driver=gelf \ --log-opt gelf-address=udp://localhost:12201 \ --log-opt tag="log-test-container-A" \ busybox sh -c 'while true; do echo "This is a log message from container A&…
从主机的层面来看,Docker Swarm 管理的是 Docker Host 集群.所以先来讨论一个重要的概念 - 集群化(Clustering). 服务器集群由一组网络上相互连接的服务器组成,它们一起协同工作.一个集群和一堆服务器最显著的区别在于: 集群能够像 单个 系统那样工作,同时提供高可用.负载均衡和并行处理. 如果我们部署应用和服务时选择的是多个独立的服务器而非集群,资源的整体利用率则很难达到最优,因为我们无法提前知道如何分布这些应用才能达到资源利用的最大化.而且,应用使用资源的趋势是…