非常教程

Docker 17参考手册

引擎 | Engine

FAQ(引擎) | FAQ (Engine)

Docker运行在Linux,macOS和Windows上吗?

您可以在 Docker 容器中运行 Linux 和 Windows 程序以及可执行文件。Docker 平台在 Linux 上(在x84-64,ARM 和许多其他CPU体系结构上)和 Windows(x86-64)上本机运行。

Docker Inc.构建可让您在Linux,Windows 和 MacOS上构建和运行容器的产品。

Docker 技术为简单的 LXC 增加了什么?

Docker 技术不是 LXC 的替代品。“LXC”指的是 Linux 内核(特别是命名空间和控制组)的功能,它们允许相互之间的沙盒过程并控制其资源分配。除了内核特性的这个底层基础之外,Docker 还提供了一个具有以下强大功能的高级工具:

  • 跨机器的便携式部署。Docker 定义了一种用于将应用程序及其所有依赖项捆绑到一个称为容器的单个对象中的格式。这个容器可以被转移到任何支持 Docker 的机器上。容器可以在那里执行,保证暴露给应用程序的执行环境在开发,测试和生产中是相同的。LXC 实现流程沙盒,这是便携式部署的重要先决条件,但对于便携式部署来说不够。如果您向我发送了一份安装在自定义LXC配置中的应用程序副本,那么它几乎肯定不会像您的方式那样在我的机器上运行。您发送给我的应用程序与您的计算机的特定配置有关:网络,存储,日志记录等。Docker 为这些机器特定的设置定义了一个抽象。
  • 以应用为中心。Docker 针对应用程序的部署进行了优化,而不是机器。这反映在其 API,用户界面,设计理念和文档中。相比之下,lxc辅助脚本将容器作为轻量级机器 - 基本上是启动速度更快,所需 RAM 更少的服务器。我们认为容器不仅仅是这些。
  • 自动构建。泊坞窗包括为开发工具来自动组装从他们的源代码的容器,有超过应用程序依赖的完全控制,编译工具,包装等,他们都可以自由使用makemavenchefpuppetsalt,Debian 软件包,RPM 包,源码包,或任意组合以上,无论机器的配置如何。
  • 版本。Docker 包括用于跟踪容器的连续版本,检查版本之间的差异,提交新版本,回滚等的类似 git 的功能。历史记录还包括容器如何组装以及由谁组装,以便从生产服务器获得完整的可追溯性一路回到上游开发商。Docker 也实现了增量上传和下载,类似于git pull,所以新版本的容器只需发送差异即可传输。
  • 组件重用。任何容器都可以用作“父图像”来创建更专业的组件。这可以手动完成或作为自动构建的一部分。例如,您可以准备理想的Python环境,并将其用作10个不同应用程序的基础。您理想的PostgreSQL设置可以重新用于您未来的所有项目。等等。
  • 共享。Docker 可以访问Docker Hub上的公共注册表,该成千上万的人上传了有用的图像:从 Redis,CouchDB,PostgreSQL 到 IRC 保护者到 Rails 应用服务器到 Hadoop 的任何内容,以便为各种 Linux发行版映射基础。该注册中心还包括由 Docker 团队维护的有用容器的官方“标准库”。注册表本身是开源的,因此任何人都可以部署他们自己的注册表来存储和传输私有容器,例如用于内部服务器部署。
  • 工具生态系统 Docker 定义了一个用于自动化和自定义容器的创建和部署的 API。有大量与 Docker 集成的工具来扩展其功能。PaaS 式部署(Dokku,Deis,Flynn),多节点编排(Maestro,Salt,Mesos,Openstack Nova),管理仪表板(docker-ui,Openstack Horizo​​n,Shipyard),配置管理(Chef,Puppet),持续集成(Jenkins,Strider,Travis)等。Docker正在迅速将自己建立为基于容器的工具的标准。Docker容器和VM之间有什么不同?有一个很棒的StackOverflow答案,显示了差异。当容器退出时,我的数据是否丢失?完全没有!应用程序写入磁盘的任何数据都将保留在其容器中,直到您明确删除容器。即使容器暂停,容器的文件系统仍然存在。Docker 容器的扩展程度如何?当今世界上一些最大的服务器场是基于容器的。Google和Twitter等大型 Web 部署以及Heroku等平台提供程序运行在容器技术上,规模为数十万甚至数百万个容器。如何连接Docker容器?目前推荐的连接容器的方法是通过Docker网络功能。您可以在这里看到如何使用Docker网络的详细信息。如何在Docker容器中运行多个进程?对于大多数使用情况,这种方法是不鼓励的。为了最大限度地提高效率和隔离度,每个容器应该解决一个特定的关注领域 但是,如果您需要在单个容器中运行多个服务,请参阅在容器中运行多个服务。Docker运行在哪个平台上?Linux:
  • 任何运行 Linux 内核版本3.10以上的发行版
  • 大多数Linux发行版都提供了特定的说明,其中包括RHEL,Ubuntu,SuSE等等。

微软Windows:

  • WindowsServer 2016
  • Windows 10

云:

  • AmazonEC 2
  • Google计算引擎
  • 微软Azure
  • Rackspace

我如何报告 Docker 的安全问题?

您可以在此处了解项目的安全策略,并将安全问题报告给此邮箱。

为什么我需要用DCO签署我的提交给 Docker?

请阅读我们的博客文章,介绍DCO。

在构建图像时,我应该更喜欢系统库还是捆绑的系统库?

这是关于 docker-dev邮件列表讨论的总结。

几乎所有的程序都依赖于第三方库。大多数情况下,他们会使用动态链接和某种程序包依赖性,这样当多个程序需要相同的库时,它只安装一次。

但是,有些程序会绑定第三方库,因为它们依赖于这些库的非常特定的版本。例如,Node.js捆绑了OpenSSL; MongoDB 捆绑了 V8和 Boost(等等)。

在创建 Docker 镜像时,最好使用捆绑的库,还是应该构建这些程序,以便它们使用默认的系统库?

关于系统库的关键点不在于节省磁盘或内存空间。这关乎安全。所有主要的发行版都认真对待安全性,拥有专门的安全团队,密切关注已发布的漏洞,并自行公布报告。(请查看Debian安全信息以获取这些过程的示例。)但是,上游开发人员并不总是执行类似的操作。

在设置 Docker 镜像以从源代码编译程序之前,如果您想使用捆绑的库,您应该检查上游作者是否提供了一种方便的方式来公布安全漏洞,以及是否及时更新其捆绑的库。如果他们不这样做,那么您正在将自己(和图像的用户)暴露于安全漏洞。

同样,在使用其他软件包构建之前,您应该检查提供这些软件包的渠道是否实施了类似的安全最佳实践。下载并安装“all-in-one”.deb或.rpm听起来很棒,除非你无法弄清楚它包含一个容易受Heartbleed bug 影响的OpenSSL库。

为什么DEBIAN_FRONTEND=noninteractive在Dockerfiles中不鼓励?

在 Debian 和 Ubuntu 上构建 Docker 镜像时,您可能会看到以下错误:

unable to initialize frontend: Dialog

这些错误不会停止生成映像,但会通知您安装过程尝试打开对话框,但无法执行。通常,这些错误是安全的,无法忽视。

有些人通过使用以下方法更改DEBIAN_FRONTENDDockerfile中的环境变量来规避这些错误:

ENV DEBIAN_FRONTEND=noninteractive

这样可以防止安装程序在安装期间打开对话框,从而停止错误。

虽然这听起来似乎是一个好主意,但它可能有副作用。该DEBIAN_FRONTEND环境变量将被所有从图像构建的图像和容器继承,并有效地改变它们的行为。交互式安装软件时,使用这些映像的用户会遇到问题,因为安装程序不会显示任何对话框。

正因为如此,而且由于设置DEBIAN_FRONTENDnoninteractive主要是“美容”的变化,我们不鼓励改变它。

如果您确实需要更改其设置,请务必在之后将其更改回默认值。

为什么Connection reset by peer在请求运行在容器中的服务时会得到什么?

通常,如果服务已经绑定到本地主机,则返回此消息。结果,从外部进入容器的请求被丢弃。要更正此问题,请更改本地主机上的服务配置,以便该服务接受来自所有 IP 的请求。如果您不确定如何执行此操作,请查看您的操作系统的文档。

为什么Cannot connect to the Docker daemon. Is the docker daemon running on this host?在使用码头机时会遇到问题?

该错误指出 docker 客户端无法连接到虚拟机。这意味着下面的虚拟机docker-machine没有运行,或者客户机没有正确指向虚拟机。

要验证码头机正在运行,可以使用该docker-machine ls命令并docker-machine start在需要时启动它。

$ docker-machine ls
NAME             ACTIVE   DRIVER       STATE     URL   SWARM                   DOCKER    ERRORS
default          -        virtualbox   Stopped                                 Unknown

$ docker-machine start default

你必须告诉 Docker 与那台机器交谈。你可以用docker-machine env命令来做到这一点。例如,

$ eval "$(docker-machine env default)"
$ docker ps

我在哪里可以找到更多答案?

你可以找到更多的答案:

  • Docker用户邮件列表
  • Docker开发人员邮件列表
  • IRC, docker on freenode
  • GitHub
  • 在Stackoverflow上提问
  • 在Twitter上加入对话

寻找别的东西来阅读?签出用户指南。

常见问题,问题,文档,码头工人

引擎 | Engine相关

1..NET核心应用程序(引擎) | .NET Core application (Engine)
2.关于图像,容器和存储驱动程序(引擎) | About images, containers, and storage drivers (Engine)
3.向swarm添加节点(Engine) | Add nodes to the swarm (Engine)
4.应用自定义元数据(引擎) | Apply custom metadata (Engine)
5.应用滚动更新(引擎) | Apply rolling updates (Engine)
6.apt-cacher-ng
7.编写Dockerfiles(引擎)的最佳实践 | Best practices for writing Dockerfiles (Engine)
8.二进制(引擎) | Binaries (Engine)
9.将容器端口绑定到主机(引擎) | Bind container ports to the host (Engine)
10.突破性变化(引擎) | Breaking changes (Engine)
11.建立自己的网桥 | Build your own bridge (Engine)
12.CentOS (Engine)
13.CentOS (Engine)
14.配置容器DNS(引擎) | Configure container DNS (Engine)
15.在用户定义的网络中配置容器DNS(引擎) | Configure container DNS in user-defined networks (Engine)
16.CouchDB (Engine)
17.创建基本映像(引擎) | Create a base image (Engine)
18.创建群(引擎) | Create a swarm (Engine)
19.自定义docker0网桥(引擎) | Customize the docker0 bridge (Engine)
20.Debian (Engine)
21.默认桥接网络 | Default bridge network
22.删除服务(引擎) | Delete the service (Engine)
23.部署服务(引擎) | Deploy a service (Engine)
24.将服务部署到一个群(引擎) | Deploy services to a swarm (Engine)
25.不推荐的引擎功能 | Deprecated Engine features
26.Docker容器网络(引擎) | Docker container networking (Engine)
27.Docker概述(引擎) | Docker overview (Engine)
28.Docker运行参考(引擎) | Docker run reference (Engine)
29.Dockerfile引用(引擎) | Dockerfile reference (Engine)
30.Dockerize应用程序 | Dockerize an application
31.排空节点(引擎) | Drain a node (Engine)
32.引擎 | Engine
33.Fedora (Engine)
34.开始 | Get started (Engine)
35.开始使用macvlan网络驱动程序 | Get started with macvlan network driver (Engine)
36.开始使用多主机网络 | Get started with multi-host networking (Engine)
37.节点如何工作 | How nodes work (Engine)
38.服务如何运作(引擎) | How services work (Engine)
39.图像管理 | Image management (Engine)
40.检查服务(引擎) | Inspect the service (Engine)
41.安装Docker(引擎) | Install Docker (Engine)
42.IPv6与Docker(引擎) | IPv6 with Docker (Engine)
43.将节点加入群集(引擎) | Join nodes to a swarm (Engine)
44.旧容器链接(引擎) | Legacy container links (Engine)
45.锁定你的群(引擎) | Lock your swarm (Engine)
46.管理群中的节点(引擎) | Manage nodes in a swarm (Engine)
47.使用Docker机密管理敏感数据(引擎) | Manage sensitive data with Docker secrets (Engine)
48.使用PKI管理swarm安全性(引擎) | Manage swarm security with PKI (Engine)
49.管理群体服务网络(引擎) | Manage swarm service networks (Engine)
50.迁移到引擎1.10 | Migrate to Engine 1.10
51.可选的Linux安装后步骤(引擎) | Optional Linux post-installation steps (Engine)
52.总览 | Overview (Engine)
53.总览 | Overview (Engine)
54.PostgreSQL(引擎) | PostgreSQL (Engine)
55.群集模式中的筏共识(引擎) | Raft consensus in swarm mode (Engine)
56.Riak (Engine)
57.以群集模式运行Docker Engine | Run Docker Engine in swarm mode
58.扩展服务(引擎) | Scale the service (Engine)
59.SDKs (Engine)
60.选择一个存储驱动 | Select a storage driver (Engine)
61.设置教程(引擎) | Set up for the tutorial (Engine)
62.SSHd (Engine)
63.存储驱动总览 | Storage driver overview (Engine)
64.存储服务配置数据(引擎) | Store service configuration data (Engine)
65.Swarm管理指南(引擎) | Swarm administration guide (Engine)
66.Swarm模式关键概念(引擎) | Swarm mode key concepts (Engine)
67.Swarm模式覆盖网络安全模型(引擎) | Swarm mode overlay network security model (Engine)
68.群模式概述(引擎) | Swarm mode overview (Engine)
69.Ubuntu (Engine)
70.Ubuntu (Engine)
71.了解容器通信(引擎) | Understand container communication (Engine)
72.使用多阶段构建(引擎) | Use multi-stage builds (Engine)
73.使用swarm模式路由网格(引擎) | Use swarm mode routing mesh (Engine)
74.使用AUFS存储驱动程序(引擎) | Use the AUFS storage driver (Engine)
75.使用Btrfs存储驱动程序(引擎) | Use the Btrfs storage driver (Engine)
76.使用设备映射器存储驱动程序(引擎) | Use the Device mapper storage driver (Engine)
77.使用OverlayFS存储驱动程序(引擎) | Use the OverlayFS storage driver (Engine)
78.使用VFS存储驱动程序(引擎) | Use the VFS storage driver (Engine)
79.使用ZFS存储驱动程序(引擎) | Use the ZFS storage driver (Engine)
80.处理图像 | Work with images
81.使用网络命令(引擎) | Work with network commands (Engine)
Docker 17

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

主页 https://docker.com/
源码 https://github.com/docker/docker
版本 17
发布版本 17.06