运维知识体系

运维知识体系

运维知识体系总结,持续更新,欢迎转载。
缓存知识体系

缓存知识体系

运维知识体系之缓存,分层多级缓存体系。
K8S实践指南

K8S实践指南

Docker和Kubernetes实践指南(每周更新)
新运维课堂

新运维课堂

全新体系化课程,开启运维新征程!

最为详细的Docker入门吐血总结

Docker有只黑白猫 发表了文章 • 0 个评论 • 157 次浏览 • 2020-01-21 15:52 • 来自相关话题

简介: Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker ...查看全部

简介: Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。 容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

Docker是什么?

在计算机技术日新月异的今天, Docker 在国内发展的如火如荼,特别是在一线互联网公司, Docker 的使用是十分普遍的,甚至成为了一些企业面试的加分项,不信的话看看下面这张图。

image.png

这是我在某招聘网站上看到的招聘 Java开发工程师 的招聘要求,其中有一条熟悉 docker 成为了你快速入职的加分项,由此可见熟悉 docker 在互联网公司的地位之重要。



当然对于我们 CTF选手 而言,熟悉 docker 可以快速搭建 CTF环境 ,完美地还原比赛真实漏洞的场景,帮助我们快速提升自己。



市面上已经有很多优秀的教程,但是很多原理性的东西,笔者认为那些教程对初学者而言还是很难理解,感觉没有说清楚(笔者自己都觉得挺懵逼的),为了让初学者少走弯路,我将以我的学习经历以及作为一个 CTF选手 的角度,编写此套教程,来带大家去了解并熟练运用 docker ,祝愿各位读者朋友们学完此套教程后,在未来企业面试中能够多一项加分的筹码,能够帮助到大家,我觉得就很值了。



既然说了这么多, docker 到底是个什么东西呢?

我们在理解 docker 之前,首先我们得先区分清楚两个概念,容器和虚拟机。



可能很多读者朋友都用过虚拟机,而对容器这个概念比较的陌生。



我们用的传统虚拟机如 VMware , VisualBox 之类的需要模拟整台机器包括硬件,每台虚拟机都需要有自己的操作系统,虚拟机一旦被开启,预分配给它的资源将全部被占用。每一台虚拟机包括应用,必要的二进制和库,以及一个完整的用户操作系统。



而容器技术是和我们的宿主机共享硬件资源及操作系统,可以实现资源的动态分配。容器包含应用和其所有的依赖包,但是与其他容器共享内核。容器在宿主机操作系统中,在用户空间以分离的进程运行。



容器技术是实现操作系统虚拟化的一种途径,可以让您在资源受到隔离的进程中运行应用程序及其依赖关系。通过使用容器,我们可以轻松打包应用程序的代码、配置和依赖关系,将其变成容易使用的构建块,从而实现环境一致性、运营效率、开发人员生产力和版本控制等诸多目标。容器可以帮助保证应用程序快速、可靠、一致地部署,其间不受部署环境的影响。容器还赋予我们对资源更多的精细化控制能力,让我们的基础设施效率更高。通过下面这幅图我们可以很直观的反映出这两者的区别所在。

image.png

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。



而 Linux 容器是 Linux 发展出了另一种虚拟化技术,简单来讲, Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离,相当于是在正常进程的外面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。



Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker ,就不用担心环境问题。



总体来说, Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。



Docker的优势



了解更多



点击了解更多,查看剩余部分


只要一小时,零基础入门Docker

Docker有只黑白猫 发表了文章 • 0 个评论 • 177 次浏览 • 2020-01-21 15:52 • 来自相关话题

简介: Docker是什么? Docker是一个虚拟环境容器,可以将你的开发环境、代码、配置文件等一并打包到这个容器中 ...查看全部

简介: Docker是什么? Docker是一个虚拟环境容器,可以将你的开发环境、代码、配置文件等一并打包到这个容器中,并发布和应用到任意平台中。比如,你在本地用Python开发网站后台,开发测试完成后,就可以将Python3及其依赖包、Flask及其各种插件、Mysql、Nginx等打包到一个容器中,然后部署到任意你想部署到的环境。



原文链接

Docker的三个概念

1.镜像(Image):类似于虚拟机中的镜像,是一个包含有文件系统的面向Docker引擎的只读模板。任何应用程序运行都需要环境,而镜像就是用来提供这种运行环境的。例如一个Ubuntu镜像就是一个包含 Ubuntu操作系统环境的模板,同理在该镜像上装上Apache软件,就可以称为Apache镜像。

2.容器(Container):类似于一个轻量级的沙盒,可以将其看作一个极简的Linux系统环境(包括root权限、进程空间、用户空间和网络空间等),以及运行在其中的应用程序。Docker引擎利用容器来运行、隔离各个应用。容器是镜像创建的应用实例,可以创建、启动、停止、删除容器,各个容器之间是是相互隔离的,互不影响。注意:镜像本身是只读的,容器从镜像启动时,Docker在镜像的上层创建一个可写层,镜像本身不变。

3.仓库(Repository):类似于代码仓库,这里是镜像仓库,是Docker用来集中存放镜像文件的地方。注意与注册服务器(Registry)的区别:注册服务器是存放仓库的地方,一般会有多个仓库;而仓库是存放镜像的地方,一般每个仓库存放一类镜像,每个镜像利用tag进行区分,比如Ubuntu仓库存放有多个版本(12.04、14.04等)的Ubuntu镜像。



Docker的安装和卸载

Docker可以安装在Windows、Linux、Mac等各个平台上。具体可以查看文档Install Docker。安装完成之后,可以查看Docker的版本信息:




[root@xxx ~]# docker version
Client:
Version: 1.12.3
API version: 1.24
Go version: go1.6.3
Git commit: 6b644ec
Built:
OS/Arch: linux/amd64

Server:
Version: 1.12.3
API version: 1.24
Go version: go1.6.3
Git commit: 6b644ec
Built:
OS/Arch: linux/amd64


查看Docker的帮助信息:# docker --help。各种命令的用法也不再赘述,后边用到哪些命令时会作出一定的解释。




Docker中关于镜像的基本操作


安装完Docker引擎之后,就可以对镜像进行基本的操作了。



我们从官方注册服务器(https://hub.docker.com)的仓库中pull下CentOS的镜像,前边说过,每个仓库会有多个镜像,用tag标示,如果不加tag,默认使用latest镜像:




[root@xxx ~]# docker search centos # 查看centos镜像是否存在
[root@xxx ~]# docker pull centos # 利用pull命令获取镜像
Using default tag: latest
latest: Pulling from library/centos
08d48e6f1cff: Pull complete
Digest: sha256:b2f9d1c0ff5f87a4743104d099a3d561002ac500db1b9bfa02a783a46e0d366c
Status: Downloaded newer image for centos:latest

[root@xxx ~]# docker images # 查看当前系统中的images信息
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 0584b3d2cf6d 9 days ago 196.5 MB


以上是下载一个已有镜像,此外有两种方法可以帮助你新建自有镜像。



(1)利用镜像启动一个容器后进行修改 ==> 利用commit提交更新后的副本




[root@xxx ~]# docker run -it centos:latest /bin/bash # 启动一个容器
[root@72f1a8a0e394 /]# # 这里命令行形式变了,表示已经进入了一个新环境
[root@72f1a8a0e394 /]# git --version # 此时的容器中没有git
bash: git: command not found
[root@72f1a8a0e394 /]# yum install git # 利用yum安装git
......
[root@72f1a8a0e394 /]# git --version # 此时的容器中已经装有git了
git version 1.8.3.1


此时利用exit退出该容器,然后查看docker中运行的程序(容器):




[root@xxx ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
72f1a8a0e394 centos:latest "/bin/bash" 9 minutes ago Exited (0) 3 minutes ago angry_hodgkin


这里将容器转化为一个镜像,即执行commit操作,完成后可使用docker images查看:




[root@xxx ~]# docker commit -m "centos with git" -a "qixianhu" 72f1a8a0e394 xianhu/centos:git

[root@xxx ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
xianhu/centos git 52166e4475ed 5 seconds ago 358.1 MB
centos latest 0584b3d2cf6d 9 days ago 196.5 MB


其中,-m指定说明信息;-a指定用户信息;72f1a8a0e394代表容器的id;xianhu/centos:git指定目标镜像的用户名、仓库名和 tag 信息。注意这里的用户名xianhu,后边会用到。



此时Docker引擎中就有了我们新建的镜像xianhu/centos:git,此镜像和原有的CentOS镜像区别在于多了个Git工具。此时我们利用新镜像创建的容器,本身就自带git了。




[root@xxx ~]# docker run -it xianhu/centos:git /bin/bash
[root@520afc596c51 /]# git --version
git version 1.8.3.1


利用exit退出容器。注意此时Docker引擎中就有了两个容器,可使用docker ps -a查看。



(2)利用Dockerfile创建镜像



Dockerfile可以理解为一种配置文件,用来告诉docker build命令应该执行哪些操作。一个简易的Dockerfile文件如下所示,官方说明:Dockerfile reference:




# 说明该镜像以哪个镜像为基础
FROM centos:latest

# 构建者的基本信息
MAINTAINER xianhu

# 在build这个镜像时执行的操作
RUN yum update
RUN yum install -y git

# 拷贝本地文件到镜像中
COPY ./* /usr/share/gitdir/


有了Dockerfile之后,就可以利用build命令构建镜像了:




[root@xxx ~]# docker build -t="xianhu/centos:gitdir" .


其中-t用来指定新镜像的用户信息、tag等。最后的点表示在当前目录寻找Dockerfile。



构建完成之后,同样可以使用docker images命令查看:




[root@xxx ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
xianhu/centos gitdir 0749ecbca587 34 minutes ago 359.7 MB
xianhu/centos git 52166e4475ed About an hour ago 358.1 MB
centos latest 0584b3d2cf6d 9 days ago 196.5 MB


以上就是构建自己镜像的两种方法。其中也涉及到了容器的一些操作。如果想删除容器或者镜像,可以使用rm命令,注意:删除镜像前必须先删除以此镜像为基础的容器。




[root@xxx ~]# docker rm container_name/container_id
[root@xxx ~]# docker rmi image_name/image_id


镜像其他操作指令:



点击了解更多,查看剩余部分



了解更多



关键字:Docker  云计算  开发运维  编码  程序


docker中应用访问速度慢

回复

Dockerbyzz1225 发起了问题 • 1 人关注 • 0 个回复 • 3283 次浏览 • 2018-07-23 13:04 • 来自相关话题

招兼职Kubernetes培训讲师

Dockernini 发表了文章 • 0 个评论 • 1135 次浏览 • 2017-10-20 17:37 • 来自相关话题

企业培训公司面向单位员工培训,长期招Kubernetes兼职老师,一般三天左右的短周期培训,周末为主,有2人左右的小辅导,也有30人左右的培训大班,待遇优,北京,上海,成都,广州,深圳等,如您想挣点外块,积累资源,充实生活,请联系我。  ...查看全部

企业培训公司面向单位员工培训,长期招Kubernetes兼职老师,一般三天左右的短周期培训,周末为主,有2人左右的小辅导,也有30人左右的培训大班,待遇优,北京,上海,成都,广州,深圳等,如您想挣点外块,积累资源,充实生活,请联系我。 

要求:
相关技术专业,本科及以上学历; 
三年以上实际项目经验; 
认真,热情,耐心,乐于助人,不保守,表达能力较好。具体再议。 

感兴趣的可以联系:QQ 2355811930 ;QQ1489302364,微信15501239699,简历接收邮箱:admin@info-soft.cn 
 
 

持续交付的Mesos与Docker导入篇

回复

Docker优云敏捷运维 发起了问题 • 2 人关注 • 0 个回复 • 2214 次浏览 • 2016-06-03 16:53 • 来自相关话题

Mesos + marathon + Docker实战

Docker赵班长 发表了文章 • 3 个评论 • 15854 次浏览 • 2016-02-03 15:19 • 来自相关话题

     如果要评价2015年最火的技术,那么非Docker莫属,当你开始使用并部署上Docker之后,那么你会发现想真正用起来,缺少很多组件。比如本文要介绍的分布式集群管理就是其中之一。     本文为实战分享,所以相关理论较少,需 ...查看全部
     如果要评价2015年最火的技术,那么非Docker莫属,当你开始使用并部署上Docker之后,那么你会发现想真正用起来,缺少很多组件。比如本文要介绍的分布式集群管理就是其中之一。

    本文为实战分享,所以相关理论较少,需要大家自行Google。

    Mesos:Mesos采用与Linux Kernel相同的机制,只是运行在不同的抽象层次上。Mesos Kernel利用资源管理和调度的API在整个数据中心或云环境中运行和提供引用(例如,Hadoop、Spark、Kafaka、ElasticSearch)。

    ZooKeeper:ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和HBase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。

    Marathon:Marathon是一个Mesos框架,能够支持运行长服务,比如Web应用等。它是集群的分布式Init.d,能够原样运行任何Linux二进制发布版本,如Tomcat、Play等等。它也是一种私有的PaSS,实现服务的发现,为部署提供提供REST API服务,有授权和SSL、配置约束,通过HAProxy实现服务发现和负载平衡。
 好的,架构图看起来像这样。
无标题1.png


下面我们就准备开始实战部署了。首先要说明下实验环境:

index.png


Zookeeper伪集群部署
在部署mesos集群之前,我们必须先部署一个可用的zookeeper集群,后面mesos会连接到zookeeper上。
[root@linux-node1 ~]# cd /usr/local/src
[root@linux-node1 src]# wget http://mirrors.cnnic.cn/apache/zookeeper/stable/zookeeper-3.4.6.tar.gz
[root@linux-node1 src]# tar zxf zookeeper-3.4.6.tar.gz
[root@linux-node1 src]# mv zookeeper-3.4.6 /usr/local/zookeeper
[root@linux-node1 src]# ln -s /usr/local/zookeeper-3.4.6/ /usr/local/zookeeper
[root@linux-node1 ~]# cd /usr/local/zookeeper/conf/
[root@linux-node1 conf]# mv zoo_sample.cfg zoo.cfg


zookeeper配置文件详解

下面就是zoo.cfg配置文件的修改了。那么我们首先要熟悉下zookeeper配置文件。

[root@linux-node1 ~]# cat/usr/local/zookeeper/conf/zoo.cfg

dataDir:数据目录
dataLogDir:日志目录
clientPort:客户端连接端口
tickTime:Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。
initLimit:Zookeeper的Leader 接受客户端(Follower)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 5个心跳的时间(也就是tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 5*2000=10 秒
syncLimit:表示 Leader 与 Follower 之间发送消息时请求和应答时间长度,最长不能超过多少个tickTime 的时间长度,总的时间长度就是 2*2000=4 秒。
server.A=B:C:D:
A 是一个数字,表示这个是第几号服务器;
B 是这个服务器的 ip 地址;
C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;
D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。

Zookeeper配置文件修改
    如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。
[root@linux-node1 conf]# grep '^[a-z]' zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zk1
clientPort=2181
server.1=192.168.56.11:3181:4181
server.2=192.168.56.11:3182:4182
server.3=192.168.56.11:3183:4183
创建三个目录用来存放zookeeper数据
[root@linux-node1 ~]# mkdir -p /data/zk1 /data/zk2/data/zk3
[root@linux-node1 ~]# echo "1" >/data/zk1/myid
[root@linux-node1 ~]# echo "2" >/data/zk2/myid
[root@linux-node1 ~]# echo "3" >/data/zk3/myid
生成三份zookeeper配置文件
[root@linux-node1 conf]# cp zoo.cfg zk1.cfg
[root@linux-node1 conf]# cp zoo.cfg zk2.cfg
[root@linux-node1 conf]# cp zoo.cfg zk3.cfg
修改zk2和zk3的配置,使用对应的数据目录和端口。
[root@linux-node1 conf]# sed -i 's/zk1/zk2/g'zk2.cfg
[root@linux-node1 conf]# sed -i 's/2181/2182/g'zk2.cfg
[root@linux-node1 conf]# sed -i 's/zk1/zk3/g'zk3.cfg
[root@linux-node1 conf]# sed -i 's/2181/2183/g'zk3.cfg
启动Zookeeper
/usr/local/zookeeper/bin/zkServer.sh start/usr/local/zookeeper/conf/zk1.cfg
/usr/local/zookeeper/bin/zkServer.sh start/usr/local/zookeeper/conf/zk2.cfg
/usr/local/zookeeper/bin/zkServer.sh start/usr/local/zookeeper/conf/zk3.cfg
查看Zookeeper角色
[root@linux-node1 ~]#/usr/local/zookeeper/bin/zkServer.sh status /usr/local/zookeeper/conf/zk1.cfg
JMX enabled by default
Using config: /usr/local/zookeeper/conf/zk1.cfg
Mode: follower

[root@linux-node1 ~]#/usr/local/zookeeper/bin/zkServer.sh status /usr/local/zookeeper/conf/zk2.cfg
JMX enabled by default
Using config: /usr/local/zookeeper/conf/zk2.cfg
Mode: follower

[root@linux-node1 ~]#/usr/local/zookeeper/bin/zkServer.sh status /usr/local/zookeeper/conf/zk3.cfg
JMX enabled by default
Using config: /usr/local/zookeeper/conf/zk3.cfg
Mode: leader





连接Zookeeper
[root@linux-node1 ~]#  /usr/local/zookeeper/bin/zkCli.sh -server192.168.56.11:2181
通过上面的例子可以看到,目前zk3是leader,其它两个节点是follower。本文由于实验环境局限使用的是伪分布式,注意生产环境不建议使用。

Mesos 集群部署
Mesos集群有MesosMaster和Mesos Slave两个角色。

安装mesosphere仓库
需要在Mesos Master和MesosSlave节点均安装:
# rpm -Uvh http://repos.mesosphere.com/el/7/noarch/RPMS/mesosphere-el-repo-7-1.noarch.rpm

Mesos Master部署
[root@linux-node1 ~]# yum -y install mesos marathon
安装完毕后,增加zookeeper配置
[root@linux-node1 ~]# vim /etc/mesos/zk
zk://192.168.56.11:2181,192.168.56.11:2182,192.168.56.11:2183/mesos
[root@linux-node1 ~]# systemctl start mesos-master mesos-slave
[root@linux-node1 ~]# systemctl start marathon

Mesos Slave部署
[root@linux-node2 ~]# yum -y install mesos marathon
[root@linux-node2 ~]# systemctl start mesos-slave


Mesos的Web管理界面
  Mesos安装完毕后,Mesos Master会启动一个Web服务,监听在5050端口。
http://${HOST_IP}:5050
这时候你将得到一个像这样的页面但可能在‘Tasks’表格没有任何的条目。

无标题2.png


下面我们来运行第一mesos任务,注意刷新查看Mesos的Web界面,你会在Active Tasks看到我们测试的任务。
[root@linux-node1~]# MASTER=$(mesos-resolve `cat /etc/mesos/zk`)
[root@linux-node1~]# mesos-execute --master=$MASTER --name="cluster-test"--command="sleep 60"

无标题3.png


使用Marathon调用Mesos 运行Docker容器

    配置Mesos运行Docker容器

[root@linux-node1 ~]# yum install -y docker
[root@linux-node1 ~]# systemctl start docker

首先先测试下,保证手动创建Docker容器没问题。

[root@linux-node1 ~]# docker pull nginx

再所有mesos-slave上增加配置参数,并重启
linux-node1:
[root@linux-node1 ~]# echo 'docker,mesos' | tee/etc/mesos-slave/containerizers
docker,mesos
[root@linux-node1 ~]# systemctl restart mesos-slave

linux-node2:
[root@linux-node2 ~]# echo 'docker,mesos' | tee/etc/mesos-slave/containerizers
docker,mesos
[root@linux-node2 ~]# systemctl restart mesos-slave

  接下来,我们要使用我们marathon来创建一个nginx的Docker容器,通过Mesos进行调度。   我们上面安装mesos-master的时候,已经安装了marathon。默认监听在8080端口,通过使用http://{HOST}:8080/来打开marathon。如下图所示:
无标题4.png


我相信读者会有疑问,我们并没有对marathon做任何的配置,它是怎么知道Mesos在哪里的呢?答案是通过zookeeper,marathon启动的时候会读取/etc/mesos/zk配置文件,通过Zookeeper来找到Mesos Master。marathon有自己的REST API,我们通过API的方式来创建一个nginx的docker容器:

首先创建如下的配置文件nginx.json:
[root@linux-node1 ~]# cat nginx.json
{
"id":"nginx",
"cpus":0.2,
"mem":20.0,
"instances": 1,
"constraints": [["hostname", "UNIQUE",""]],
"container": {
"type":"DOCKER",
"docker": {
"image": "nginx",
"network": "BRIDGE",
"portMappings": [
{"containerPort": 80, "hostPort": 0,"servicePort": 0, "protocol": "tcp" }
]
}
}
}
然后调用
# curl -X POST http://192.168.56.11:8080/v2/apps-d @nginx.json \
-H "Content-type: application/json"

无标题4.png


现在你就可以通过31984来访问到nginx了。当然了,你也可以在mesos-slave上来寻找一下这个容器:
[root@linux-node1 ~]# docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

58df0c7f15f9 nginx "nginx -g 'daemonoff" 7 minutes ago Up 7 minutes 443/tcp, 0.0.0.0:31984->80/tcp mesos-0dc69732-fd81-4190-8d7e-f389f80b1f50-S1.56436b54-0fed-4951-ae94-e52889948d67



  如果你想创建同样的容器,可以点击上图中德Scale Application来体验一下。同样的,你也可以通过marathon的Web界面来进行容器的创建、扩展和销毁。

无标题5.png


欢迎大家关注《运维社区》微信,经常会有干货发出哦。
qrcode_for_gh_3bddb9781003_430.jpg


赶紧常按识别上面二维码,关注我们吧!

Docker Machine、Swarm、Compose、Registry、Kitematic、Toolbox介绍

Docker赵班长 发表了文章 • 0 个评论 • 3420 次浏览 • 2015-08-12 20:11 • 来自相关话题

        Docker Machine为本地机器、私有数据中心以及云服务商提供Docker引擎,并可以配置一个本地的Docker客户端来安全(通过TLS)地与已经部署的引擎交互。Machine对部署平台进行了抽象,用户在对Docker零了解且不熟悉目标环 ...查看全部
        Docker Machine为本地机器、私有数据中心以及云服务商提供Docker引擎,并可以配置一个本地的Docker客户端来安全(通过TLS)地与已经部署的引擎交互。Machine对部署平台进行了抽象,用户在对Docker零了解且不熟悉目标环境的情况下,可以通过一个简单的命令部署Docker引擎。Docker Machine解决了操作系统异构安装Docker困难的问题。
 
        Docker Swarm为Docker容器提供了原生的集群,它将几个Docker引擎聚集在一起,然后对外暴露为一个单一的虚拟Docker引擎。Swarm提供了标准的Docker API,因此Docker客户端或者其它的第三方工具可以轻松扩展到多台主机,比如Dokku、Shipyard等。
 
       Docker Compose是一个编排工具,它可以定义并运行基于Docker的分布式应用。Compose基于Fig,Fig是一个已经存在的工具,它可以运行Docker的开发环境,并通过一个简单的文件来定义应用组件,这些组件包括容器、容器配置、连接以及卷。
 
       Docker Registry大家都比较熟悉,是用来构建Docker仓库的服务,目前来说功能不够完善。
 
       Docker Kitematic是GUI客户端。
 
       Docker Toolbox是一个工具箱,可以让用户简单快速的安装和设置Docker环境。它包含以下内容:
 
  1. Docker Client
  2. Docker Machine
  3. Docker Compose (Mac only)
  4. Docker Kitematic
  5. VirtualBox