Docker 那些事
文章目录
序
从今年 3 月份实习接触 golang 起,Docker 就时不时出现, 也曾看过几篇简介博文,但都没有后续。本文就对于 docker 进行一次简单的探究。
Docker是什么?
Wiki 定义
Wiki: Docker is a set of platform-as-a-service (PaaS) products that use operating-system-level virtualization to deliver software in packages called containers.[5] Containers are isolated from one another and bundle their own software, libraries and configuration files; they can communicate with each other through well-defined channels.[6] All containers are run by a single operating-system kernel and are thus more lightweight than virtual machines.[7]
简单翻译: Docker 是一个 Paas 产品可以用来以系统级的虚拟化, 用于在称为 容器(containers) 的包中交付产品。容器之间彼此隔离,彼此之间可以通过定义通道(channels)进行通信。 所有的容器都由一个操作系统内核线程(守护进程)。
同类技术有哪些以及简单对比
Docker 主要组成成分
- images 镜像 Docker 镜像是用于创建 Docker 容器的模板,类似与面向对象中的类(ps: docker 镜像不同与我们熟知的操作系统镜像文件,它更像一个 静态文件 + git 版本控制)
- container 容器 容器是独立运行的一个或一组实例, 类似与面向对象中的对象实例
- daemon docker 守护进程 执行镜像编译,容器启停以及分发,数据卷管理等,一个client可以与多个docker daemon通信。
类比 Docker 与 面向对象 | Docker | 面向对象 | | ---- | ---- | | image 镜像 | class 类 | | container 容器 | object 对象 | | daemon 守护进程 | JVM 实例 |
- client 客户端 与 Docker Deamon 交互。
- registry 镜像库 用于存储 Docker 镜像,类似于 github,现有公共的 Registry DockerCloud.
- services 服务 服务是docker swarm引入的概念,可以用于在多宿主机之间伸缩容器数目,支持负载均衡已经服务路由功能
容器 Docker & 虚拟机
虚拟机 虚拟化 先模拟出硬件再在其基础上虚拟出操作系统 Guest OS
container 虚拟化 是一种轻量级的虚拟化技术,它不需要模拟硬件创建虚拟机。在Linux系统里面,使用到Linux kernel的cgroups,namespace(ipc,network, user,pid,mount),capability等用于隔离运行环境和资源限制的技术,我们称之为容器。容器技术早就出现。例如Solaris Zones 和 BSD jails 就是非 Linux 操作系统上的容器,而用于 Linux 的容器技术也有很多如 Linux-Vserver、OpenVZ 和 FreeVPS。虽然这些技术都已经成熟,但是这些解决方案还没有将它们的容器支持集成到主流 Linux 内核。
Docker 虚拟化
总的来说,容器不等同于Docker,容器更不是虚拟机。
Quick Start 快速开始
Docker 下载与安装
Docker 官网 根据自己的操作系统类型进行选择下载安装。
Hello World
Docker 允许你在容器内运行应用程序, 使用 docker run 命令来在容器内运行一个应用程序。
1 2 |
root:$ docker run ubuntu:15.10 /bin/echo "Hello World" Hello World |
解释: docker + run 指定运行一个容器 ubuntu:15.10 指定要运行的进行,Docker 会主机寻找是否存在,不存在,将 docker pull 镜像仓库 Docker Hub 下载公共镜像 "/bin/echo "Hello World"" 在启动的容器内执行的命令
简单使用
对于 docker client 其命令与 git 类似,可以使用 docker --help 查看具体使用,下面举几个实用实例
交互式容器 -i -t 参数,让docker 运行的容器实现“对话”的能力
1
root: docker run -i -t ubuntu:15.10 /bin/bash
后台运行容器 -d
1 2
docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done" 2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63
返回的容器 ID 而非预期的 Hello World,可以通过 docker ps 查看正在运行的容器
停止容器 docker stop (指定容器名或 ID)
总的来说 docker client 与 git 命令很类似。 后续将在后续详解中示范。