Professional Documents
Culture Documents
维基百科,自由的百科全书
文件格式
Dockerfile
Compose文件
网络
bridge
host
overlay
macvlan
none
其他
数据管理
卷
绑定挂载
tmpfs
命名管道
覆盖问题
日志
历史
已过时
Docker Swarm
Docker Machine
Docker Toolbox
参考文献
外部連結
参见
基础架构
专业名词Docker有两个意思:[5]
代指整个Docker项目。
代指Docker引擎。
Docker引擎
Docker引擎(Docker Engine)是一个服务端-客户端结构的应用,主要有这些部分:Docker守护进程、
Docker Engine AP (https://docs.docker.com/develop/sdk/)、Docker客户端。[6]
Docker注册中心
对象
Docker的对象是指Images、Containers、Networks、Volumes、Plugins等等。[6]
容器(Containers)是镜像的可运行的实例。容器可通过API或CLI(命令行)进行操控。[6]
镜像(Images)是一个只读模板,用于指示创建容器。[6] 镜像分层(layers)构建的,而定义这些
层次的文件叫Dockerfile。[10]
服务(Services)允许使用者跨越不同的Docker守护进程(Docker daemons)的情况下增加容
器,并将这些容器分为管理者(managers)和工作者(workers),让他们为swarm共同工
作。[6]
扩展架构
Docker Compose
原理
swarm服务比单独容器好在,修改swarm服务的配置之后不用重启。同时,Docker以swarm mode形式
运行时,也可以选择直接启动单独的容器。另外,swarm mode下,你也可以通过 docker stack
deploy 使用 Compose file 部署应用栈。[22][21] swarm服务分为两种,一种是replicated services ,可
以指定节点任务的总数量;global services,则是每个节点都会运行一个指定任务。[23] swarm管理员
使用 ingress 负载均衡使服务可被外部接触。 swarm管理员会自动地给服务分配PublishedPort(或者
手动配置)。外部组件,如云负载均衡器能通过集群中任何节点上的PublishedPort去接入服务(不
管该服务是否启动)。另外 swarm mode有内部DNS组件,它会为每个服务分配一个DNS条目。
swarm管理员使用 internal load balancing 去分发请求时,就是依靠这个DNS组件。[24]
swarm mode的功能是由swarmkit(一个独立项目)提供的,它实现了Docker的编排层。swarm可以直接
被Docker使用。[21]
文件格式
Docker有两种文件格式,Dockerfile和Compose file。Dockerfile定义了单个容器的内容和启动时候的
行为。Compose file定义了一个多容器应用。[25]
Dockerfile
FROM ubuntu:18.04
COPY . /app
RUN make /app
CMD python /app/app.py
关键词:
RUN。RUN会在当前镜像的顶层上添加新的一层(layer),并在该层上执行命令,执行结果将会被
提交。提交后的结果将会用于Dockerfile的下一步。[27]
ENTRYPOINT,入口点。ENTRYPOINT允许你配置容器,使之成为可执行程序。[28]即,
ENTRYPOINT允许你为容器增加一个入口点。ENTRYPOINT和CMD类似,均在容器启动时执行,
但是ENTRYPOINT为了提供稳定且不可被覆盖的操作。[29]通过在命令行中指定--entrypoint
命令的方式,可在运行时将Dockerfile文件中的ENTRYPOINT覆盖。
CMD,是command的缩写。CMD用于为已创建的镜像提供默认的操作,当不想要用默认操作时
候,可用docker run IMAGE[:TAG|@DIGEST] [COMMAND] 进行替换 。的当Dockerfile拥有
入口点时,CMD用于赋予入口点参数。[30]
Compose文件
Compose文件 是一个YAML文件,定义了服务(service)、网络、卷(volume)。
db:
image: "postgres:${POSTGRES_VERSION}"
网络
参考文档:Docker文档-网络概要 (https://docs.docker.com/network/)
bridge
host
主机模式
overlay
overlay 有两种网络类型网络:[41]
macvlan
none
该策略下,容器不使用任何网络。none 常常用于连接自定义网络驱动的情况下。
其他
其他第三方插件。
数据管理
Docker默认下,所有文件将会存储在容器里的可写的容器层(container layer)。[42]
数据与容器为一体。随着容器消失,数据将消失;难以与其他程序(容器)共享。
由于容器的写入层是与宿主机器紧紧耦合。所以你难以移动数据到其他机器。
容器的写入层的是通过 存储驱动 (https://docs.docker.com/storage/storagedriver/)(storage
driver) 管理文件系统。存储驱动 (https://docs.docker.com/storage/storagedriver/) 会使用Linux
内核的 链合文件系统(union filesystem)进行挂载。相比起直接操作于宿主机器文件系统的 数
据卷,这额外的抽象层将会降低性能。
绑定挂载
绑定挂载(bind mounts)通过将宿主机器的路径挂载到容器里的这种方式,从而数据持续化,因此
绑定挂载可将数据存储在宿主机器的文件系统的任何地方。非Docker程序可修改这些文件。 绑定挂
载是Docker早期就存在的,相比起卷,绑定挂载十分简单明了。[42] 在开发Docker应用时,应使用命
名卷(named volume)代替绑定挂载,因为用户不能对绑定挂载进行 Docker CLI 命令操作。[42]
绑定挂载常用于:[43]
同步配置文件,如: 将 宿主主机的DNS配置文件(/etc/resolv.conf)同步至容器中
在开发程序时,将 源代码 或 Artifact 同步至容器中。[43] 这种用法与 Vagrant 类似。
tmpfs
命名管道
日志
在Linux和UNIX中,常见的 I/O流(英語:I/O streams) 分为三种:STDIN(输入 )、 STDOUT(正
常输出)、STDERR(错误输出)。[46]
历史
Docker命令在过去的发展中诞生了40种以上的命令,过多的命令导致混论以及难以使用tab自动补
充,因此在docker 1.13版本(2017.1.19)中,命令行被重构,根据逻辑对象进行划分。官方建议用
户使用新的语法进行操作。[48]
已过时
Docker Swarm
参考Swarm Mode章节。
Docker Machine
Docker Toolbox
参考文献
1. Get Docker. Docker Documentation. 2020-03-20 [2020-03-22] (英语).
2. What is a Container? | App Containerization | Docker. www.docker.com. [2020-03-22] (英语).
3. Docker Documentation. docker.readthedocs.org. 2014-01-04 [2014-08-20]. (原始内容存档于
2014-08-21).
4. Docker Documentation. docker.readthedocs.org. 2014-01-04 [2014-08-20]. (原始内容存档于
2014-08-21).
5. Glossary. Docker Documentation. 2020-02-25 [2020-02-29] (英语).
6. Docker overview. Docker Documentation. 2020-02-14 [2020-02-16] (英语).
7. dockerd. Docker Documentation. 2020-02-14 [2020-02-16] (英语).
8. Develop with Docker Engine SDKs and API. Docker Documentation. 2020-02-14 [2020-02-16]
(英语).
9. dockerd. 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. Docker Swarm overview. Docker Documentation. 2020-02-25 [2020-02-29] (英语).
16. Swarm mode · Docker —— 从入门到实践. yeasy.gitbooks.io. [2020-03-05].
17. Glossary. Docker Documentation. 2020-02-25 [2020-02-29] (英语).
18. swarm漢語(繁體)翻譯:劍橋詞典. dictionary.cambridge.org. [2020-02-24] (中文(繁體)).
19. Glossary. Docker Documentation. 2020-02-25 [2020-02-29] (英语).
20. Glossary. Docker Documentation. 2020-02-25 [2020-02-29] (英语).
21. Swarm mode key concepts. Docker Documentation. 2020-02-20 [2020-02-24] (英语).
22. Deploy a stack to a swarm. Docker Documentation. 2020-02-25 [2020-02-29] (英语).
23. services-and-tasks. Docker Documentation. 2020-02-25 [2020-02-29] (英语).
24. load-balancing. Docker Documentation. 2020-02-25 [2020-02-29] (英语).
25. Reference documentation. Docker Documentation. 2020-02-14 [2020-02-17] (英语).
26. dockerfile-reference.
27. run. [2020-02-18].
28. entrypoint. [2020-02-27].
29. entrypoint-default-command-to-execute-at-runtime.
30. cmd-default-command-or-options.
31. service-configuration-reference. [2020-02-19].
32. variable-substitution.
33. args. Docker Documentation. 2020-04-09 [2020-04-13] (英语).
34. Use bridge networks. Docker Documentation. 2020-03-19 [2020-03-20] (英语).
35. network-drivers 章节的. Docker Documentation. 2020-03-19 [2020-03-20] (英语).
36. 配置 docker0 网桥 · Docker —— 从入门到实践. yeasy.gitbooks.io. [2020-03-20].
37. Use bridge networks - configure-the-default-bridge-network. Docker Documentation. 2020-03-
19 [2020-03-20] (英语).
38. BridgeNetworkConnections - Debian Wiki. wiki.debian.org. [2020-03-20].
39. 自定义网桥 · Docker —— 从入门到实践. yeasy.gitbooks.io. [2020-03-20].
40. vbox_host-only_setup. condor.depaul.edu. [2020-03-09].
41. Use overlay networks. Docker Documentation. 2020-03-19 [2020-03-20] (英语).
42. Manage data in Docker. Docker Documentation. 2020-03-20 [2020-03-21] (英语).
43. good-use-cases-for-bind-mounts. Docker Documentation. 2020-03-20 [2020-03-21] (英语).
44. Docker中的数据管理 - 掘金. juejin.im. [2020-03-21].
45. using-bind-mounts-or-volumes. Docker Documentation. 2020-03-20 [2020-03-21] (英语).
46. View logs for a container or service. Docker Documentation. 2020-04-17 [2020-04-17] (英语).
47. get-an-instances-log-path. Docker Documentation. 2020-04-17 [2020-04-18] (英语).
48. Introducing Docker 1.13. Docker Blog. 2017-01-19 [2020-03-05] (美国英语).
49. Docker Machine Overview. Docker Documentation. 2020-02-25 [2020-03-02] (英语).
50. Docker(五):Docker 三剑客之 Docker Machine. 知乎专栏. [2020-03-02] (中文).
51. Docker Machine release notes. Docker Documentation. 2020-02-25 [2020-03-02] (英语).
52. Docker Machine Overview. Docker Documentation. 2020-02-25 [2020-03-02] (英语).
53. Docker Toolbox overview. Docker Documentation. 2020-02-25 [2020-03-02] (英语).
54. docker/toolbox. GitHub. [2020-03-02] (英语).
外部連結
官方网站 (https://www.docker.com)
Source code repository (https://github.com/docker/docker-ce)
Multi-tenancy using Docker (http://www.slideshare.net/AaterSuleman/docker-at-flux7/)
Docker 101 Tutorial (https://www.youtube.com/watch?v=VeiUjkiqo9E#t=60)
libcontainer git repo (https://github.com/docker/libcontainer/)
如何在Linux下安装Docker (https://www.ytyzx.org/index.php/%E5%A6%82%E4%BD%95%E
5%9C%A8Linux%E4%B8%8B%E5%AE%89%E8%A3%85Docker)
Windows 容器 (https://docs.microsoft.com/zh-tw/virtualization/windowscontainers/about/) - 在
Windows 10 部署 Docker
参见
作業系統層虛擬化
cgroups
LXC
Dotcloud
取自“https://zh.wikipedia.org/w/index.php?title=Docker&oldid=59920296”