Docker介绍

相关网址:

Docker 官网

Docker 文档地址

Docker 仓库地址

一、Docker 是什么

Docker 就像一个命令不完整的轻量级的虚拟机,它将应用程序的代码、工具库、运行环境封装在一个容器中,我们到时候只需要执行一条命令即可,因此大大减轻了测试和部署的难度。

1.1 Docker VS VMware

Docker 和 VMware 都是属于虚拟化技术

  • VMware 虚拟的是一台或多台电脑,笨重(占用资源多,冗余步骤多【每次都要开机都要初始化】,启动速度慢)
  • Docker 虚拟的是镜像,镜像 = 最核心的环境(4m)+ JDK + MySQL + ……,直接运行镜像就可以了,小巧(Docker 容器模拟的并不是一个完整的操作系统,容器运行在操作系统之上,共享系统内核,相互之间使用沙箱机制,不会有任何接口,所以一个容器崩了,其他容器不受影响,当然也可以使用 Nginx 进行跨域关联起来)

1.2 镜像是什么

镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。

同时,就像代码可以保存到 GitHub 中开源,镜像也可以提交到 DockerHub 中

1.3 镜像加载原理

1.3.1 UnionFS(联合文件系统)

UnionFS(联合文件系统)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite serveral directories into a single virtual filesystem)。Union 文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承(不同镜像之间可以使用同一个底层系统,然后节省空间),基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。

特性:以此同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件叠加起来,这样最终的文件系统会包含所有底层的文件和目录。

1.3.2 镜像加载原理

docker 的镜像实际上由一层一层的文件系统组成,这种层级的文件系统 UnionFS。

bootfs(boot file system)

bootfs 主要包含 BootLoader 和 kernel,BootLoader 主要是引导加载 kernel,Linux 刚启动时会加载 bootfs 文件系统,在 Docker 镜像的最底层是 bootfs。这一层与我们典型的 Linux/Unix 系统是一样的,包含 boot 加载器和内核。当 boot 加载完成之后整个内核就都在内存中了,此时内存的使用权已由 bootfs 转交给内核,此时系统也会卸载 bootfs。

rootfs(root file system)

rootfs 在 bootfs 之上。包含的就是典型 Linux 系统中的 /dev、/proc、/bin、/etc 等标准目录和文件。rootfs 就是各种不同的操作系统发行版,比如 Ubuntu,CentOS 等等。

例如:对于一个精简的 OS,rootfs 可以很小,只需要包含最基本的命令,工具和程序库就可以了,因为底层直接用 Host 的 kernel,自己只需要提供 rootfs 就可以了。由此可见对不同的 Linux 发行版,bootfs 基本是一致的,rootfs 会有差别,因此不同的发行版可以公用 bootfs。

1.3.3 分层的理解

在下载镜像的时候可以观察日志输出,可以看到是一层一层的在下载。

思考:为什么 Docker 镜像要采用这种分层的结构?

最大的好处就是资源共享,比如有多个镜像都从相同的 Base 镜像构建而来,那么宿主机只需在磁盘上保留一份 base 镜像,同时内存中也只需要加载一份 base 镜像,这样就可以为所有的容器服务了,而且镜像的每一层都可以被共享。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# 查看镜像分层
[root@localhost ~]# docker image inspect tomcat:8.0
[
{
"Id": "sha256:ef6a7c98d192507d6066dcf24e44bec66d07ec9cf7c55d8d3d1ea0a24660bdef",
"RepoTags": [
"tomcat:8.0"
],
"RepoDigests": [
"tomcat@sha256:8ecb10948deb32c34aeadf7bf95d12a93fbd3527911fa629c1a3e7823b89ce6f"
],
"Parent": "",
"Comment": "",
"Created": "2018-09-12T20:42:22.931362721Z",
"Container": "537db43b9934d84b08d1226d9e86480c27d0e76eec5dd044cba72a8edc8e193f",
"ContainerConfig": {
"Hostname": "537db43b9934",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"8080/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/tomcat/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"LANG=C.UTF-8",
"JAVA_HOME=/docker-java-home/jre",
"JAVA_VERSION=7u181",
"JAVA_DEBIAN_VERSION=7u181-2.6.14-1~deb8u1",
"CATALINA_HOME=/usr/local/tomcat",
"TOMCAT_NATIVE_LIBDIR=/usr/local/tomcat/native-jni-lib",
"LD_LIBRARY_PATH=/usr/local/tomcat/native-jni-lib",
"OPENSSL_VERSION=1.1.0f-3+deb9u2",
"GPG_KEYS=05AB33110949707C93A279E3D3EFE6B686867BA6 07E48665A34DCAFAE522E5E6266191C37C037D42 47309207D818FFD8DCD3F83F1931D684307A10A5 541FBE7D8F78B25E055DDEE13C370389288584E7 61B832AC2F1C5A90F0F9B00A1C506407564C17A3 713DA88BE50911535FE716F5208B0AB1D63011C7 79F7026C690BAA50B92CD8B66A3AD3F4F22C4FED 9BA44C2621385CB966EBA586F72C284D731FABEE A27677289986DB50844682F8ACB77FC2E86E29AC A9C5DF4D22E99998D9875A5110C01C5A2F6059E7 DCFD35E0BF8CA7344752DE8B6FB21E8933C60243 F3A04C595DB5B6A5F1ECA43E3B7BBB100D811BBE F7DA48BB64BCB84ECBA7EE6935CD23C10D498E23",
"TOMCAT_MAJOR=8",
"TOMCAT_VERSION=8.0.53",
"TOMCAT_SHA512=cd8a4e48a629a2f2bb4ce6b101ebcce41da52b506064396ec1b2915c0b0d8d82123091242f2929a649bcd8b65ecf6cd1ab9c7d90ac0e261821097ab6fbe22df9",
"TOMCAT_TGZ_URLS=https://www.apache.org/dyn/closer.cgi?action=download&filename=tomcat/tomcat-8/v8.0.53/bin/apache-tomcat-8.0.53.tar.gz \thttps://www-us.apache.org/dist/tomcat/tomcat-8/v8.0.53/bin/apache-tomcat-8.0.53.tar.gz \thttps://www.apache.org/dist/tomcat/tomcat-8/v8.0.53/bin/apache-tomcat-8.0.53.tar.gz \thttps://archive.apache.org/dist/tomcat/tomcat-8/v8.0.53/bin/apache-tomcat-8.0.53.tar.gz",
"TOMCAT_ASC_URLS=https://www.apache.org/dyn/closer.cgi?action=download&filename=tomcat/tomcat-8/v8.0.53/bin/apache-tomcat-8.0.53.tar.gz.asc \thttps://www-us.apache.org/dist/tomcat/tomcat-8/v8.0.53/bin/apache-tomcat-8.0.53.tar.gz.asc \thttps://www.apache.org/dist/tomcat/tomcat-8/v8.0.53/bin/apache-tomcat-8.0.53.tar.gz.asc \thttps://archive.apache.org/dist/tomcat/tomcat-8/v8.0.53/bin/apache-tomcat-8.0.53.tar.gz.asc"
],
"Cmd": [
"/bin/sh",
"-c",
"#(nop) ",
"CMD [\"catalina.sh\" \"run\"]"
],
"ArgsEscaped": true,
"Image": "sha256:1d3fb924acd246fd2804e5907fd81405abf7cc86072703417daf15bbf551f2e1",
"Volumes": null,
"WorkingDir": "/usr/local/tomcat",
"Entrypoint": null,
"OnBuild": [],
"Labels": {}
},
"DockerVersion": "17.06.2-ce",
"Author": "",
"Config": {
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"8080/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/tomcat/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"LANG=C.UTF-8",
"JAVA_HOME=/docker-java-home/jre",
"JAVA_VERSION=7u181",
"JAVA_DEBIAN_VERSION=7u181-2.6.14-1~deb8u1",
"CATALINA_HOME=/usr/local/tomcat",
"TOMCAT_NATIVE_LIBDIR=/usr/local/tomcat/native-jni-lib",
"LD_LIBRARY_PATH=/usr/local/tomcat/native-jni-lib",
"OPENSSL_VERSION=1.1.0f-3+deb9u2",
"GPG_KEYS=05AB33110949707C93A279E3D3EFE6B686867BA6 07E48665A34DCAFAE522E5E6266191C37C037D42 47309207D818FFD8DCD3F83F1931D684307A10A5 541FBE7D8F78B25E055DDEE13C370389288584E7 61B832AC2F1C5A90F0F9B00A1C506407564C17A3 713DA88BE50911535FE716F5208B0AB1D63011C7 79F7026C690BAA50B92CD8B66A3AD3F4F22C4FED 9BA44C2621385CB966EBA586F72C284D731FABEE A27677289986DB50844682F8ACB77FC2E86E29AC A9C5DF4D22E99998D9875A5110C01C5A2F6059E7 DCFD35E0BF8CA7344752DE8B6FB21E8933C60243 F3A04C595DB5B6A5F1ECA43E3B7BBB100D811BBE F7DA48BB64BCB84ECBA7EE6935CD23C10D498E23",
"TOMCAT_MAJOR=8",
"TOMCAT_VERSION=8.0.53",
"TOMCAT_SHA512=cd8a4e48a629a2f2bb4ce6b101ebcce41da52b506064396ec1b2915c0b0d8d82123091242f2929a649bcd8b65ecf6cd1ab9c7d90ac0e261821097ab6fbe22df9",
"TOMCAT_TGZ_URLS=https://www.apache.org/dyn/closer.cgi?action=download&filename=tomcat/tomcat-8/v8.0.53/bin/apache-tomcat-8.0.53.tar.gz \thttps://www-us.apache.org/dist/tomcat/tomcat-8/v8.0.53/bin/apache-tomcat-8.0.53.tar.gz \thttps://www.apache.org/dist/tomcat/tomcat-8/v8.0.53/bin/apache-tomcat-8.0.53.tar.gz \thttps://archive.apache.org/dist/tomcat/tomcat-8/v8.0.53/bin/apache-tomcat-8.0.53.tar.gz",
"TOMCAT_ASC_URLS=https://www.apache.org/dyn/closer.cgi?action=download&filename=tomcat/tomcat-8/v8.0.53/bin/apache-tomcat-8.0.53.tar.gz.asc \thttps://www-us.apache.org/dist/tomcat/tomcat-8/v8.0.53/bin/apache-tomcat-8.0.53.tar.gz.asc \thttps://www.apache.org/dist/tomcat/tomcat-8/v8.0.53/bin/apache-tomcat-8.0.53.tar.gz.asc \thttps://archive.apache.org/dist/tomcat/tomcat-8/v8.0.53/bin/apache-tomcat-8.0.53.tar.gz.asc"
],
"Cmd": [
"catalina.sh",
"run"
],
"ArgsEscaped": true,
"Image": "sha256:1d3fb924acd246fd2804e5907fd81405abf7cc86072703417daf15bbf551f2e1",
"Volumes": null,
"WorkingDir": "/usr/local/tomcat",
"Entrypoint": null,
"OnBuild": [],
"Labels": null
},
"Architecture": "amd64",
"Os": "linux",
"Size": 356245923,
"VirtualSize": 356245923,
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/5467095563d0eeb7800cbe149e38b134094b17d8aa7747a3489b3f4cceed84a8/diff:/var/lib/docker/overlay2/89de18b5ee2a1908787b40e6ad5bd86e42d33296f78800cc54db2884d5c58dd9/diff:/var/lib/docker/overlay2/cbb8e55d674460e4665642025d769aea683b17791cf63befd079ff2330b9970a/diff:/var/lib/docker/overlay2/953860e1c90c9c24927507effc2fdf1ba27d26c218e9739bca296e5104793f62/diff:/var/lib/docker/overlay2/8ddf5a9115e182e660f055eb223454d4159bf54b53258ba9d37fd3bb4369e21e/diff:/var/lib/docker/overlay2/4837f5a37d13a562d57675ee0d9c9fa1ef8edaa93b7b4a28cfce280fedcc3785/diff:/var/lib/docker/overlay2/297ed5eb5bca37cbf115cadd1c301c53b982ed69b79ddfbdbf0c54fa79fd1fcf/diff:/var/lib/docker/overlay2/b57865f8cfdecde7d7db93fe4eca53c71843206bf3299452096051233a515ac8/diff:/var/lib/docker/overlay2/0c28360e0ccb7f91776c5cc66f56b092f27618eda1f42549aac9f831ce73e3f8/diff:/var/lib/docker/overlay2/d159fa1ad10d5869ceaea96ba9b743d9ecd989431e9d9934edace1932f14826e/diff",
"MergedDir": "/var/lib/docker/overlay2/0576b5f7dd7201c4de9acdf0e52f895efe3b19c33cd4284823a009a22d9fbd86/merged",
"UpperDir": "/var/lib/docker/overlay2/0576b5f7dd7201c4de9acdf0e52f895efe3b19c33cd4284823a009a22d9fbd86/diff",
"WorkDir": "/var/lib/docker/overlay2/0576b5f7dd7201c4de9acdf0e52f895efe3b19c33cd4284823a009a22d9fbd86/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:8c466bf4ca6ffdda8b7717b1cd6fe31109529ee64e626a003a224fb8bd2bc469",
"sha256:daf45b2cad9af3ea091d4376d34fb597a9a67874d48fe5a485e1305df10b3157",
"sha256:c596d5191368693d366c9b47cc20007efcedd0873691c8895d3684162d469447",
"sha256:425325c72d902feb9c15b3c9204fc7c24435dfaea2e750db3acda5a11c569049",
"sha256:fc6174f0df4a7466f749d9ae334872f38336bb761962ba15657b771116cb8546",
"sha256:39a6e47c4ae6efdd2a0834d81c1bd2860a16cbe5c3c1de28934ee26721bd98c4",
"sha256:81242e1e644e4d52602431e4c847f4e1ec599761f2ca082cfdf3c38508ddd9d4",
"sha256:9f052711b40a241eec2783c062a743ad4f7870681024b375714cd277db497ec2",
"sha256:f26731984f9bb4dc5f286008361729b717d51c2d60989c5e1b2d07d713d9de1f",
"sha256:583dc95d65c92bd5b5fdb57c640f391435078ff6da2cc9653a7d32457d3cd8b7",
"sha256:d0f3f4011f287adc910aada9e2fee49c67de366654ea7c02b47d36f9736442fc"
]
},
"Metadata": {
"LastTagTime": "0001-01-01T00:00:00Z"
}
}
]

二、Docker 能做什么

2.1 多环境的部署切换

利用 Docker 能够原封不动地将【开发环境】中的一整套东西(JAR 包 + Jdk、Redis集群、MySQL集群、Hadoop 等)迁移到【测试环境】或【生产环境】中,再配合一定的自动化流程即可实现自动发布。

三、Docker 资源汇总

Docker 官方英文资源

Docker 中文资源

其他资源





  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2022-2024 Liangxj
  • 访问人数: | 浏览次数: