惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

B
Blog
D
Docker
J
Java Code Geeks
腾讯CDC
Blog — PlanetScale
Blog — PlanetScale
G
Google Developers Blog
M
MIT News - Artificial intelligence
L
LangChain Blog
T
The Blog of Author Tim Ferriss
P
Proofpoint News Feed
MyScale Blog
MyScale Blog
博客园 - Franky
GbyAI
GbyAI
Hugging Face - Blog
Hugging Face - Blog
aimingoo的专栏
aimingoo的专栏
Last Week in AI
Last Week in AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 聂微东
N
Netflix TechBlog - Medium
B
Blog RSS Feed
Y
Y Combinator Blog
阮一峰的网络日志
阮一峰的网络日志
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google DeepMind News
Google DeepMind News

陈少文的网站

巨变与机遇的未来十年 Kubernetes 平台管理软件压力测试方案 使用镜像部署 Hexo 静态页面 终于等到你 - GitHub 镜像仓库服务(ghcr.io) 一起来学 Go --(6)Interface 一起来学 Go --(5)Goroutine 和 Channel 什么是函数式编程 如何在 Kubernetes 集群集成 Kata 柯里化与偏函数 使用 PyGithub 自动创建 Label 软件产品是团队能力的输出 Helm 2 、Helm 3 比较 IoT 变现 Kubernetes 中的 DNS 服务 国内的 Helm 镜像源 Harbor 使用自签证书支持 Https 访问 DevOps 工具链之 Prow 如何使用 kfctl 安装 Kubeflow VS Code 无法下载 Go 插件的工具包 工程师更应具有服务精神 你不知道的 Docker 使用技巧 使用 Docker 运行 Tensorflow 论中国 什么是左移 如何清空 Git 仓库全部历史记录 一禅小和尚 有风吹过厨房 时间的玫瑰 如何在 CentOS 安装 GPU 驱动 开发 Tips(19)
Docker 基础
微信公众号 · 2017-07-28 · via 陈少文的网站

Please enable Javascript to view the contents

1. 什么是Docker

Docker诞生于2013年初,是dotCloud( Docker.Inc前称)公司内部的一个业余项目,源代码托管在GitHub上,基于Go语言并遵从 Apache 2.0 开源协议。

Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)等技术。

Docker 在 LXC 的基础上进行了进一步的封装,让用户不必关心容器的管理,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。

2. 基本概念

  • 镜像:容器运行时的只读模板,每一个镜像由一系列的层组成
  • 仓库:用于保存镜像,可以理解为代码控制中的代码仓库
  • 容器:包含了所有的某个应用运行所需要的环境,每个容器都是从镜像创建,是独立的应用平台
  • Dockerfile:包含创建镜像所有命令的文本文件
  • Docker Registry:官方提供的工具,可以用于构建私有的镜像仓库
  • Docker Hub:官方提供的公有 Docker Registry

3. 应用场景

  • 简化配置:运行环境和配置放在代码中部署,降低了硬件要求和应用环境之间的耦合度
  • 代码流水线管理:代码从开发机到正式环境,中间环节需要很多环境,Docker可以提供一致性的环境
  • 提高效率:可以利用Docker,让开发环境更加逼近正式环境
  • 隔离应用:Docker可以让一台机器上运行的不同应用,彼此相互隔离
  • 整合服务:Docker可以通过虚拟机,整合多个应用
  • 调试能力:Docker提供了很多的工具,用于为容器设置检查点、比较容器差异等,辅助调试
  • 多租户环境:使用Docker,可以为每个租户的应用层的多个实例创建隔离的环境
  • 快速部署:Docker通过创建容器部署,将部署过程压缩到秒级

4. Docker 运行结构

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。Docker 容器通过 Docker 镜像来创建。

  • C/S架构, Docker daemon 作为服务端接受来自客户的请求,并处理这些请求(创建、运行、分发容器)。 客户端和服务端既可以运行在一个机器上,也可通过 socket 或者RESTful API 来进行通信。
  • Docker daemon 一般在宿主主机后台运行,等待接收来自客户端的消息。 Docker 客户端则为用户提供一系列可执行命令,用户用这些命令实现跟 Docker daemon 交互。

image.png

5. Docker 核心架构

  • Docker Client:用户与Docker Daemon建立通信的终端
  • Docker Daemon

Docker Server,服务于Docker API;Engine,执行引擎;Job,Engine内工作最小执行单元

其中,Docker Server架构

  • driver

execdriver,管理容器的运行;Networkdriver,管理容器的网络;Graphdriver,管理容器的镜像

其中,execdriver:LXC,早版使用LXC作为创建管理容器的工具;Native,如今使用native来创建管理容器,native调用libcontainer

其中,graphdriver

  • graph

  • libcontainer

Docker 从 0.9 版本开始使用 libcontainer 替代了lxc,libcontainer几乎囊括了docker的全部核心技术。

  • networkdriver

  • Docker网络模式

Docker Daemon网络模式:
bridge桥接
None(disabled)

Docker Container网络模式:
bridge桥接模式
Host模式
other container模式
None(disabled)模式

6. Docker 命令

基本语法

Docker 命令有两大类,客户端命令和服务端命令。前者是主要的操作接口,后者用来启动 Docker daemon。

  • 客户端命令:基本命令格式为 docker [OPTIONS] COMMAND [arg…]
  • 服务端命令:基本命令格式为 docker daemon [OPTIONS]

可以通过 man docker 或 docker help 来查看这些命令。

  • 容器生命周期管理命令: run,start/stop/restart,kill,rm,pause/unpause,create,exec
  • 容器操作命令:ps,inspect,top,attach,events,logs,wait,export,port
  • 容器rootfs命令:commit,cp,diff
  • 镜像仓库命令:login,pull,push,search
  • 本地镜像管理命令:images,rmi,tag,build,history,save,import,-
  • info|version命令:info,version

7. 安装 Docker

Docker ToolBox(前往下载)包含了如下Docker工具:

  • Docker Machine:包含了docker-machine命令
  • 运行Docker命令所需要的引擎
  • Docker Compose:容器管理工具
  • Kitematic:Docker GUI界面
  • Oracle公司的VM VirtualBox

除此,还提供了一些 Docker 命令行Shell。

需要说明的是,在Windows环境下:
由于Docker守候进程依赖于Linux内核,无法直接在Windows环境中运行。需要使用docker-machine命令,创建一个Docker虚拟机,通过虚拟机提供Docker服务。

这里使用Docker ToolBox提供的GUI管理工具,创建一个本地的Nginx服务:

  • 下载镜像,创建容器。在Kitematic的UI界面可以一键创建容器,下图红色箭头所指:

  • 访问服务。下图红色箭头所指,可以直接访问到服务。

在Home旁边的Settings标签下,包含容器相关的参数,配置项(host,port,network等)。

8. Kubernetes

image.png

  • 简介:Kubernetes(k8s)是Google开源的容器集群管理系统。在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。
  • 优势:容器编排,轻量级,开源,弹性伸缩,负载均衡

9. 参考

  • 1.https://www.kancloud.cn/thinkphp/docker_practice/30894

微信公众号