本页使用了标题或全文手工转换

Docker

维基百科,自由的百科全书
跳到导航 跳到搜索
Docker
Docker (container engine) logo.svg
原作者 Solomon Hykes
開發者 Docker, Inc.
初始版本 2013年3月13日 (2013-03-13)
穩定版本
19.03.6
(2020年2月12日,​6天前​(2020-02-12
預覽版本
19.03.6-rc2
(2020年2月6日,​12天前​(2020-02-06
源代码库 編輯維基數據鏈接
编程语言 Go
操作系统 LinuxWindowsmacOS
系統平台 x86-64ARM、s390x、ppc64le
类型 作業系統層虛擬化
许可协议 可執行檔:免費增值软件即服务
原始碼:Apache许可证 2.0
网站 www.docker.com

Docker是一個開放原始碼軟體專案,讓應用程式部署在軟體貨櫃下的工作可以自動化進行,藉此在Linux作業系統上,提供一個額外的軟體抽象層,以及作業系統層虛擬化的自動管理機制[1]

Docker利用Linux核心中的資源分離機制,例如cgroups,以及Linux核心命名空間英语Linux namespaces(namespaces),來建立獨立的容器(containers)。這可以在單一Linux實體下運作,避免啟動一個虛擬機器造成的額外負擔[2]。Linux核心對命名空間的支援完全隔離了工作環境中應用程式的視野,包括行程樹、網路、用户ID與掛載檔案系統,而核心的cgroup提供资源隔離,包括CPU記憶體、block I/O與網路。從0.9版本起,Dockers在使用抽象虛擬是經由libvirtLXC與systemd - nspawn提供界面的基礎上,開始包括libcontainer函式庫做為以自己的方式開始直接使用由Linux核心提供的虛擬化的設施,

依據行業分析公司「451研究」:「Dockers是有能力打包應用程式及其虛擬容器,可以在任何Linux伺服器上執行的依賴性工具,這有助於實現靈活性和便攜性,應用程式在任何地方都可以執行,無論是公用雲私有雲、單機等。」 [3]

组件[编辑]

软件[编辑]

  • Docker引擎(Docker Engine)是一个服务端-客户端结构的应用,主要有这些部分:Docker守护进程、Docker Engine AP、Docker客户端。[4]
    • Docker守护进程(Docker daemons),也叫dockerd ,是一个持久化的进程,用户管理容器。[5]守护进程会监听Docker Engine API 的请求。[6]
    • Docker Engine API是用于与Docker守护进程交互用的的API。它是一个RESTful API,因此它不仅可以被Docker客户端调用,也可以被wgetcurl等命令调用。[7]
    • Docker客户端,也叫docker,是大部分用户与Docker交互的主要方式。用户通过客户端将命令发送给守护进程。命令会遵循Docker Engine API[8]

对象[编辑]

Docker的对象是指images, containers, networks, volumes, plugins等等。[9]

  • 容器(containers)是镜像的可运行的实例。容器可通过API或CLI(命令行)进行操控。[9]
  • 镜像(Images)是一个只读模板,用于指示创建容器。[9] 镜像分层(layers)构建的,而定义这些层次的文件叫Dockerfile[10]
  • 服务(services)允许你跨越不同的Docker守护进程(Docker daemons)的情况下,增加容器,并让这些容器分为管理者(managers)和工作者(workers),让他们为swarm共同工作。[9]

工具[编辑]

  • Docker Compose Compose可译为组合物。[11]Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。[12][13]Compose对应的命令为docker-compose[14]
  • Docker Swarm(Docker集群)用于管理一簇Docker engine。使用Docker命令行可以创建集群,部署服务至集群并管理集群的行为。[15]在Docker 1.12时,Swarm mode已经集成到Docker Engine中。[16]

文件格式[编辑]

Docker有两种文件格式,Dockerfile和Compose file。Dockerfile定义了单个容器的内容和启动时候的行为。Compose file定义了一个多容器应用。[17]

Dockerfile[编辑]

Docker 可以依照 Dockerfile 的内容,自动化地构建镜像。 Dockerfile 是包含着用户想要如何构建镜像的所有命令的文本。[18]

FROM ubuntu:18.04
COPY . /app
RUN make /app
CMD python /app/app.py

关键词:

  • RUNRUN会在当前镜像的顶层上添加新的一层(layer),并在该层上执行命令,执行结果将会被提交。提交后的结果将会用于Dockerfile的下一步。[19]
  • ENTRYPOINT入口点ENTRYPOINT允许你配置容器,使之成为可执行程序。[20]即,ENTRYPOINT允许你为容器增加一个入口点ENTRYPOINTCMD类似,均在容器启动时执行,但是ENTRYPOINT(目的是)用于提供稳定且不可被覆盖的操作。[21]通过在命令行中指定--entrypoint 命令的方式,可在运行时将Dockerfile文件中的ENTRYPOINT覆盖。
  • CMD,是command的缩写。CMD用于为已创建的镜像提供默认的操作,当不想要用默认操作时候,可用docker run IMAGE[:TAG|@DIGEST] [COMMAND] 进行替换 。的当Dockerfile拥有入口点时,CMD用于赋予入口点参数。[22]

Compose file[编辑]

Compose的中文意思有组成。[23]Compose file是一个YAML文件,定义了服务(service)、网络、(volume)。[24]

服务定义了容器配置,该服务下的所有被启动的容器都会使用该配置。服务做的事清就像传输了命令行参数给docker container create 。类似地,网络就像docker network create就像docker volume create。 虽然服务就像docker container create ,但由于已经在Dockerfile中指定了各种选项,所以没有必要再Compose file再次指定。[25]

Compose file文件能使用外部的环境变量[26],同时也能通过ARGS传变量进Dockerfile。

参考文献[编辑]

  1. ^ O'Gara, Maureen. Ben Golub, Who Sold Gluster to Red Hat, Now Running dotCloud. SYS-CON Media. 26 July 2013 [2013-08-09]. 
  2. ^ Docker Documentation. docker.readthedocs.org. 2014-01-04 [2014-08-20]. (原始内容存档于2014-08-21). 
  3. ^ Docker Documentation. docker.readthedocs.org. 2014-01-04 [2014-08-20]. (原始内容存档于2014-08-21). 
  4. ^ Docker overview. Docker Documentation. 2020-02-14 [2020-02-16] (英语). 
  5. ^ dockerd. Docker Documentation. 2020-02-14 [2020-02-16] (英语). 
  6. ^ dockerd. Docker Documentation. 2020-02-14 [2020-02-16] (英语). 
  7. ^ Develop with Docker Engine SDKs and API. Docker Documentation. 2020-02-14 [2020-02-16] (英语). 
  8. ^ dockerd. Docker Documentation. 2020-02-14 [2020-02-16] (英语). 
  9. ^ 9.0 9.1 9.2 9.3 Docker overview. Docker Documentation. 2020-02-14 [2020-02-16] (英语). 
  10. ^ About storage drivers. Docker Documentation. 2020-02-14 [2020-02-16] (英语). 
  11. ^ What is the noun for compose?. WordHippo. [2020-02-16] (英语). 
  12. ^ Docker Compose | 菜鸟教程. www.runoob.com. [2020-02-16]. 
  13. ^ Overview of Docker Compose. Docker Documentation. 2020-02-14 [2020-02-16] (英语). 
  14. ^ Compose command-line reference. Docker Documentation. 2020-02-14 [2020-02-16] (英语). 
  15. ^ Swarm mode overview. Docker Documentation. 2020-02-12 [2020-02-13] (英语). 
  16. ^ Docker Swarm. Docker Documentation. 2020-02-12 [2020-02-13] (英语). 
  17. ^ Reference documentation. Docker Documentation. 2020-02-14 [2020-02-17] (英语). 
  18. ^ dockerfile-reference. 
  19. ^ run. [2020-02-18]. 
  20. ^ entrypoint. [2020-02-27]. 
  21. ^ entrypoint-default-command-to-execute-at-runtime. 
  22. ^ cmd-default-command-or-options. 
  23. ^ compose漢語(繁體)翻譯:劍橋詞典. dictionary.cambridge.org. [2020-02-17] (中文(繁體)‎). 
  24. ^ Compose file version 3 reference. Docker Documentation. 2020-02-17 [2020-02-18] (英语). 
  25. ^ ervice-configuration-reference. [2020-02-19]. 
  26. ^ variable-substitution. 

外部連結[编辑]

参见[编辑]