随笔分类 -  Docker

摘要:本文的演示环境为 ubuntu 16.04。 先在 Ansible Galaxy 搜索 docker,由 geerlingguy 贡献的 docker role 是目前最受欢迎的: 通过 ansible-galaxy 命令可以把上面搜索到的 role 安装到本地: 了解 docker role 的基 阅读全文
posted @ 2018-11-15 13:04 sparkdev 阅读(6290) 评论(0) 推荐(0) 编辑
摘要:本文介绍如何使用 Jenkins 的声明式 pipeline 为一个简单的 Golang web 应用搭建 CI 环境。如果你还不太了解 Jenkins 及其声明式 pipeline,请先参考笔者的 Jenkins 系列文章,或者直接到 Jenkins 官网进行学习。说明:本文的演示环境为 ubun 阅读全文
posted @ 2018-10-29 08:45 sparkdev 阅读(9196) 评论(6) 推荐(6) 编辑
摘要:在项目中,往往需要在 docker-compose.yml 文件中使用环境变量来控制不同的条件和使用场景。本文集中介绍 docker compose 引用环境变量的方式。说明:本文的演示环境为 ubuntu 16.04。 Compose CLI 与环境变量 Compose CLI(compose c 阅读全文
posted @ 2018-10-22 07:16 sparkdev 阅读(116708) 评论(13) 推荐(18) 编辑
摘要:笔者在前文《Docker Compose 简介》和《Dcoker Compose 原理》两篇文章中分别介绍了 docker compose 的基本概念以及实现原理。本文我们将继续探索 docker compose,并通过 demo 介绍一些主要的用法。 说明:本文的演示环境为 ubuntu 16.0 阅读全文
posted @ 2018-10-18 08:54 sparkdev 阅读(57404) 评论(7) 推荐(11) 编辑
摘要:Docker 的优势非常明显,尤其是对于开发者来说,它提供了一种全新的软件发布机制。也就是说使用 docker 镜像作为软件产品的载体,使用 docker 容器提供独立的软件运行上下文环境,使用 docker hub 等提供镜像的集中管理,这其中最重要的是使用 Dockerfile 定义容器的内部行 阅读全文
posted @ 2018-10-15 08:29 sparkdev 阅读(14892) 评论(10) 推荐(21) 编辑
摘要:Compose 是 docker 提供的一个命令行工具,用来定义和运行由多个容器组成的应用。使用 compose,我们可以通过 YAML 文件声明式的定义应用程序的各个服务,并由单个命令完成应用的创建和启动。 Compose 的使用方式非常简单,基本上就是下面的三板斧: 定义 Dockerfile 阅读全文
posted @ 2018-10-09 08:46 sparkdev 阅读(17074) 评论(5) 推荐(11) 编辑
摘要:笔者在前文《理解 docker 容器中的 uid 和 gid》介绍了 docker 容器中的用户与宿主机上用户的关系,得出的结论是:docker 默认没有隔离宿主机用户和容器中的用户。如果你已经了解了 Linux 的 user namespace 技术(参考《Linux Namespace : Us 阅读全文
posted @ 2018-09-13 08:49 sparkdev 阅读(47543) 评论(17) 推荐(29) 编辑
摘要:默认情况下,容器中的进程以 root 用户权限运行,并且这个 root 用户和宿主机中的 root 是同一个用户。听起来是不是很可怕,因为这就意味着一旦容器中的进程有了适当的机会,它就可以控制宿主机上的一切!本文我们将尝试了解用户名、组名、用户 id(uid)和组 id(gid)如何在容器内的进程和 阅读全文
posted @ 2018-09-10 08:54 sparkdev 阅读(79626) 评论(15) 推荐(34) 编辑
摘要:Dockerfile 中提供了两个非常相似的命令 COPY 和 ADD,本文尝试解释这两个命令的基本功能,以及其异同点,然后总结其各自适合的应用场景。 Build 上下文的概念 在使用 docker build 命令通过 Dockerfile 创建镜像时,会产生一个 build 上下文(contex 阅读全文
posted @ 2018-09-03 07:14 sparkdev 阅读(308052) 评论(11) 推荐(31) 编辑
摘要:Nginx 自己没有处理日志的滚动问题,它把这个球踢给了使用者。一般情况下,你可以使用 logrotate 工具来完成这个任务,或者如果你愿意,你可以写各式各样的脚本完成同样的任务。本文笔者介绍如何滚动运行在 docker 中的 nginx 日志文件(下图来自互联网)。 思路 Nginx 官方其实给 阅读全文
posted @ 2018-08-30 07:15 sparkdev 阅读(20127) 评论(6) 推荐(14) 编辑
摘要:Docker 正在被用在越来越多的场景中,对于不太习惯命令行工具的朋友来说,docker cli 用起来可能会比较吃力。本文笔者将介绍一个功能强大的 docker web 客户端:portainer(岸吊,参考下面插图)。按照 portainer 官方的说法,它可以让我们通过 UI 轻松的管理 do 阅读全文
posted @ 2018-06-28 15:23 sparkdev 阅读(11826) 评论(7) 推荐(14) 编辑
摘要:笔者在前文《Docker 网络之进阶篇》中介绍了 CNM(Container Network Model),并演示了 bridge 驱动下的 CNM 使用方式。为了深入理解 CNM 及最常用的 bridge 驱动,本文将探索 bridge 驱动的实现机制。说明:本文的演示环境为 ubuntu 16. 阅读全文
posted @ 2018-06-25 08:52 sparkdev 阅读(37730) 评论(8) 推荐(18) 编辑
摘要:笔者在《Docker 基础 : 网络配置》一文中简单介绍了容器网络的基本用法,当时网络的基本使用方式还处于 --link 阶段。时过境迁,随着 docker 的快速发展,其网络架构也在不断的演进。本文主要介绍 docker 的 CNM 网络模型以及新引入的 network 子命令。 Docker 网 阅读全文
posted @ 2018-06-20 08:47 sparkdev 阅读(28853) 评论(19) 推荐(38) 编辑
摘要:如果经常使用 docker,你会发现 docker 占用的资源膨胀很快,其中最明显也最容易被察觉的应该是对磁盘空间的占用。本文将介绍如何快速的清理 docker 占用的系统资源,具体点说就是删除那些无用的 镜像、容器、网络和数据卷。 查看 docker 占用的资源 在进行资源清理之前我们有必要搞清楚 阅读全文
posted @ 2018-06-14 07:15 sparkdev 阅读(50046) 评论(7) 推荐(15) 编辑
摘要:没有 https 加持的网站会逐渐地被浏览器标记为不安全的,所以为网站添加 https 已经变得刻不容缓。对于商业网站来说,花钱购买 SSL/TLS 证书并不是什么问题。但对于个人用户来说,如果能有免费的 SSL/TLS 证书可用将会是非常幸福的事情!Let's Encrypt 就是一个提供免费 S 阅读全文
posted @ 2018-06-11 08:31 sparkdev 阅读(43084) 评论(8) 推荐(14) 编辑
摘要:笔者在前文《RunC 简介》和《Containerd 简介》中分别介绍了 runC 和 containerd。本文我们将结合 docker 中的其它组件探索 docker 是如何把这些组件组织起来协调工作的。 Docker 的主要组件 安装 docker ,其实是安装了 docker 客户端、doc 阅读全文
posted @ 2018-06-07 07:59 sparkdev 阅读(43187) 评论(20) 推荐(41) 编辑
摘要:笔者在《Docker 镜像之进阶篇》中介绍了镜像分层、写时复制以及内容寻址存储(content-addressable storage)等技术特性,为了支持这些特性,docker 设计了一套镜像元数据管理机制来管理镜像元数据。另外,为了能够让 docker 容器适应不同平台不同应用场景对存储的要求, 阅读全文
posted @ 2018-06-04 08:32 sparkdev 阅读(31562) 评论(9) 推荐(12) 编辑
摘要:笔者在《Docker 基础 : 镜像》一文中介绍了 docker 镜像的基本用法,本文我们来介绍 docker 镜像背后的技术原理。 什么是 docker 镜像 docker 镜像是一个只读的 docker 容器模板,含有启动 docker 容器所需的文件系统结构及其内容,因此是启动一个 docke 阅读全文
posted @ 2018-05-28 08:23 sparkdev 阅读(32063) 评论(13) 推荐(31) 编辑
摘要:我们可以把 docker 抽象为下图所示的结构(此图来自互联网): 从图中可以看出,docker 对容器的管理和操作基本都是通过 containerd 完成的。 那么,containerd 是什么呢?Containerd 是一个工业级标准的容器运行时,它强调简单性、健壮性和可移植性。Containe 阅读全文
posted @ 2018-05-21 08:21 sparkdev 阅读(50526) 评论(11) 推荐(26) 编辑
摘要:RunC 是什么? RunC 是一个轻量级的工具,它是用来运行容器的,只用来做这一件事,并且这一件事要做好。我们可以认为它就是个命令行小工具,可以不用通过 docker 引擎,直接运行容器。事实上,runC 是标准化的产物,它根据 OCI 标准来创建和运行容器。而 OCI(Open Containe 阅读全文
posted @ 2018-05-14 08:21 sparkdev 阅读(50810) 评论(12) 推荐(27) 编辑