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

推荐订阅源

月光博客
月光博客
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
N
Netflix TechBlog - Medium
大猫的无限游戏
大猫的无限游戏
爱范儿
爱范儿
Martin Fowler
Martin Fowler
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The Register - Security
The Register - Security
IT之家
IT之家
博客园_首页
Microsoft Security Blog
Microsoft Security Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
I
InfoQ
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Jina AI
Jina AI
Apple Machine Learning Research
Apple Machine Learning Research
M
MIT News - Artificial intelligence
博客园 - Franky
C
Check Point Blog
T
The Blog of Author Tim Ferriss
V
Visual Studio Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
T
Tailwind CSS Blog
Recent Announcements
Recent Announcements
云风的 BLOG
云风的 BLOG
美团技术团队
The Cloudflare Blog
Y
Y Combinator Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
MyScale Blog
MyScale Blog
The GitHub Blog
The GitHub Blog
D
DataBreaches.Net
Google DeepMind News
Google DeepMind News
V
V2EX
aimingoo的专栏
aimingoo的专栏
GbyAI
GbyAI
G
Google Developers Blog
S
SegmentFault 最新的问题
Hugging Face - Blog
Hugging Face - Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
U
Unit 42
罗磊的独立博客
量子位
MongoDB | Blog
MongoDB | Blog
Last Week in AI
Last Week in AI
Stack Overflow Blog
Stack Overflow Blog
小众软件
小众软件
D
Docker
人人都是产品经理
人人都是产品经理

陈少文的网站

巨变与机遇的未来十年 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) 使用 Velero 备份 Kubernetes 集群 Kubernetes Cheat Sheet 开发 Tips(18) 如何构建一个 Java 工程 开发 Tips(17) KubeSpray 安装 Kubernetes 报错 ip in ansible_all_ipv4_addresses 基于 Kubernetes 和 Jenkins 搭建自动化测试系统 在 Kubernetes 上动态创建 Jenkins Slave 使用 Jenkins 进行服务拨测 开发 Tips(16) Kubernetes 签发 Ingress 证书及日常故障运维 Kubernetes 中 Deployment 的基本操作 Kubernetes 中的证书 如何使用 KubeBuilder 开发一个 Operator Kubernetes 1.6.0 安装问题汇总 镜像管理工具 -- Harbor 开发 Tips(15) Docker 如何拉取镜像 开发 Tips(14) 使用 Helm 安装 harbor 开发 Tips(13) 使用 S2I 构建云原生应用 在 Kubernetes 中使用 emptyDir、hostPath、localVolume 开发 Tips(12) 开发 Tips(11) 代码质量分析工具 SonarQube 使用 Kubeadm 安装 Kubernetes 集群 一起来学 Go --(4)常用函数 Kubernetes 中的 Ceph Kubernetes 之 Volumes Kubernetes 之 Labels、Selectors 开发 Tips(10) 开源正在重构商业模式 Kubernetes 之网络 Kubernetes 之 API 使用 Helm 和 Operator 快速部署 Prometheus Kubernetes 复杂有状态应用管理框架 -- Operator Kubernetes 的包管理器 -- Helm 一起来学 Go --(3)Go Modules 如何一步一步地优化博客方案 kubectl 实用指南 Kubernetes 中的基本概念 搭建远程 Kubernetes 开发环境 大公司和小公司的 ToB 思路 开发 Tips(9) Go 入门指南 一起来学 Go --(2)数据与逻辑结构 如何预防 Web 富文本中的 XSS 攻击 django-xss-cleaner 云工作时代 一起来学 Go --(1)背景与特点 SaaS 开发团队的不同阶段 你不知道的 Git 使用技巧 输出既服务 微服务设计 继续奔跑 开发 Tips(8) 从账户安全到二次验证 Django 性能之数据库查询优化 Django 性能之分库分表 敏捷开发之研发流程 打造一致性的团队 开发 Tips(7) Pytest 进阶学习之 Mock PaaS 部署之 buildpack Go 开发配置 领域输出才是 PaaS 的核心竞争力 Pytest 入门学习 开发 Tips(6) 如何使用 Jenkins、Docker、GitLab 搭建 Django 自动化部署流程
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

微信公众号