Skip to content

Commit d55dffa

Browse files
committed
🔖 Docker 文档
1 parent d45b173 commit d55dffa

File tree

8 files changed

+245
-11
lines changed

8 files changed

+245
-11
lines changed

docs/docker/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@
88

99
- [x] [Docker 快速指南](docker-quickstart.md)
1010
- [ ] 基础篇(basics)
11+
- [x] [Docker 简介](basics/docker-introduction.md)
1112
- [x] [Docker 安装](basics/docker-install.md)
13+
- [x] [Docker 之 Hello World](basics/docker-helloworld.md)
1214
- [ ] 配置(configuration)
1315
- [ ] 进阶篇(advanced)
1416
- [x] [Docker 的设计](advanced/docker-design.md)

docs/docker/advanced/docker-design.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,23 @@
1+
<!-- TOC -->
2+
3+
- [Docker 的设计](#docker-%E7%9A%84%E8%AE%BE%E8%AE%A1)
4+
- [Docker 架构](#docker-%E6%9E%B6%E6%9E%84)
5+
- [Docker 守护进程(docker daemon)](#docker-%E5%AE%88%E6%8A%A4%E8%BF%9B%E7%A8%8B%EF%BC%88docker-daemon%EF%BC%89)
6+
- [Docker 客户端](#docker-%E5%AE%A2%E6%88%B7%E7%AB%AF)
7+
- [Docker 注册中心](#docker-%E6%B3%A8%E5%86%8C%E4%B8%AD%E5%BF%83)
8+
- [Docker 对象](#docker-%E5%AF%B9%E8%B1%A1)
9+
- [镜像](#%E9%95%9C%E5%83%8F)
10+
- [容器](#%E5%AE%B9%E5%99%A8)
11+
- [服务](#%E6%9C%8D%E5%8A%A1)
12+
- [底层技术](#%E5%BA%95%E5%B1%82%E6%8A%80%E6%9C%AF)
13+
- [命名空间](#%E5%91%BD%E5%90%8D%E7%A9%BA%E9%97%B4)
14+
- [控制组](#%E6%8E%A7%E5%88%B6%E7%BB%84)
15+
- [联合文件系统](#%E8%81%94%E5%90%88%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F)
16+
- [容器格式](#%E5%AE%B9%E5%99%A8%E6%A0%BC%E5%BC%8F)
17+
- [资料](#%E8%B5%84%E6%96%99)
18+
19+
<!-- /TOC -->
20+
121
# Docker 的设计
222

323
## Docker 架构
@@ -71,3 +91,7 @@ Linux 上的 Docker Engine 也依赖于另一种称为控制组(`cgroups`)
7191
### 容器格式
7292

7393
Docker 引擎将命名空间,控制组和 UnionFS 组合成一个名为容器格式的包装器。默认的容器格式是`libcontainer`。将来,Docker 可以通过与诸如 BSD Jails 或 Solaris Zones 等技术集成来支持其他容器格式。
94+
95+
## 资料
96+
97+
* https://docs.docker.com/engine/docker-overview/
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Docker 容器
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
# Dockerfile
2+
3+
## 格式
4+
5+
Dockerfile 中,对于指令不区分大小写,但是推荐使用大写,来区别于参数。
6+
7+
Dockerfile 中,将按照指令(instruction)出现次序依次执行。**注意:Dockerfile 必须从 `FROM` 指令开始。**
8+
9+
Dockerfile 中,将 `#` 开头的行作为注释,除非该行是有效的解析指令(parser directives)。一行中的 `#` 标记被视为参数。注释中不支持换行符。
10+
11+
示例:
12+
13+
```
14+
# Comment
15+
RUN echo 'we are running some # of cool things'
16+
```
17+
18+
## 解析指令(parser directives)
19+
20+
解析指令是可选的,并且会影响 Dockerfile 中后续行的处理方式。解析指令不会将图层添加到构建中,并且不会显示为构建步骤。解析指令以 `# directive=value` 的形式写入特殊类型的注释。单个指令只能使用一次。
21+
22+
一旦注释,空行或构建指令已被处理,Docker 不再查找解析指令。相反,它将任何符合解析指令格式的内容视为注释,不会尝试验证它是否可能是解析指令。因此,所有解析指令都必须位于Dockerfile 的最顶端。
23+
24+
解析指令不区分大小写。但是,约定是小写。约定还包括在任何解析指令之后的空白行。解析指令不支持续行符。
25+
26+
以下列举几个不合规范的示例。
27+
28+
因为续行符而无效:
29+
30+
```
31+
# direc \
32+
tive=value
33+
```
34+
35+
因为出现两次解析指令而无效:
36+
37+
```
38+
# directive=value1
39+
# directive=value2
40+
41+
FROM ImageName
42+
```
43+
44+
解析指令由于出现在构建指令后,而被视为注释:
45+
46+
```
47+
FROM ImageName
48+
# directive=value
49+
```
50+
51+
解析指令由于出现在注释后,而被视为注释:
52+
53+
```
54+
# About my dockerfile
55+
# directive=value
56+
FROM ImageName
57+
```
58+
59+
因为无法识别,未知的指令被视为注释。此外,因为前一个未知指定被视为注释,后一个指令相当于出现在注释后,而也被视为了注释:
60+
61+
```
62+
# unknowndirective=value
63+
# knowndirective=value
64+
```
65+
66+
解析器指令中允许使用非分行空白。因此,以下几行都是一致对待的:
67+
68+
```
69+
#directive=value
70+
# directive =value
71+
# directive= value
72+
# directive = value
73+
# dIrEcTiVe=value
74+
```
75+
76+
### escape
77+
78+
```
79+
# escape=\ (backslash)
80+
```
81+
82+
```
83+
# escape=` (backtick)
84+
```
85+
86+
在 Dockerfile 中,
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
# Docker 之 Hello World
2+
3+
## 前提
4+
5+
确保你的环境上已经成功安装 Docker。
6+
7+
## Hello World 实例
8+
9+
1. 使用 `docker version` 命令确保你的环境已成功安装 Docker。
10+
11+
```
12+
# docker version
13+
Client:
14+
Version: 1.13.1
15+
API version: 1.26
16+
Package version: <unknown>
17+
Go version: go1.8.3
18+
Git commit: 774336d/1.13.1
19+
Built: Wed Mar 7 17:06:16 2018
20+
OS/Arch: linux/amd64
21+
22+
Server:
23+
Version: 1.13.1
24+
API version: 1.26 (minimum version 1.12)
25+
Package version: <unknown>
26+
Go version: go1.8.3
27+
Git commit: 774336d/1.13.1
28+
Built: Wed Mar 7 17:06:16 2018
29+
OS/Arch: linux/amd64
30+
Experimental: false
31+
```
32+
33+
2. 使用 `docker run` 命令运行 Hello World 镜像。
34+
35+
```
36+
docker run hello-world
37+
38+
Unable to find image 'hello-world:latest' locally
39+
latest: Pulling from library/hello-world
40+
ca4f61b1923c: Pull complete
41+
Digest: sha256:ca0eeb6fb05351dfc8759c20733c91def84cb8007aa89a5bf606bc8b315b9fc7
42+
Status: Downloaded newer image for hello-world:latest
43+
44+
Hello from Docker!
45+
This message shows that your installation appears to be working correctly.
46+
...
47+
```
48+
49+
3. 使用 `docker image ls`命令查看镜像
50+
51+
```
52+
docker image ls
53+
REPOSITORY TAG IMAGE ID CREATED SIZE
54+
docker.io/maven latest 76c9ab5df55b 7 days ago 737 MB
55+
docker.io/python 2.7-slim 5541369755c4 13 days ago 139 MB
56+
docker.io/hello-world latest f2a91732366c 4 months ago 1.85 kB
57+
docker.io/java 8-jre e44d62cf8862 14 months ago 311 MB
58+
docker.io/training/webapp latest 6fae60ef3446 2 years ago 349 MB
59+
```
60+
61+
4. 使用 `docker container ls --all` 命令查看容器
62+
63+
如果查看正在运行的容器,不需要添加 `--all` 参数。
64+
65+
```
66+
docker container ls --all
67+
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
68+
a661d957c6fa hello-world "/hello" 2 minutes ago Exited (0) 2 minutes ago mystifying_swartz
69+
3098f24a1064 docker.io/hello-world "/hello" 6 minutes ago Exited (0) 6 minutes ago sad_yonath
70+
4c98c4f18a39 hello-world "/hello" 8 minutes ago Exited (0) 8 minutes ago admiring_banach
71+
```
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# Docker 服务
2+
3+
## 关于服务
4+
5+
在分布式应用程序中,应用程序的不同部分被称为“服务”。例如,如果您想象一个视频共享网站,它可能包含用于将应用程序数据存储在数据库中的服务,用户上传文件后在后台传输的服务,前端应用服务等等。
6+
7+
服务实际上只是“生产环境中的容器”。一个服务只运行一个镜像,但它需要制定镜像的运行方式 - 应该使用哪个端口,容器应该运行多少副本,以便服务具有所需的容量,以及等等。缩放服务会更改运行该软件的容器实例的数量,从而为流程中的服务分配更多计算资源。
8+
9+
幸运的是,使用 Docker 平台定义,运行和扩展服务非常简单 - 只需编写一个 docker-compose.yml 文件即可。
10+
11+
## docker-compose.yml 文件
12+
13+
它是一个YAML文件,它定义了Docker容器在生产中的行为方式。
14+
15+
16+
```
17+
version: "3"
18+
services:
19+
web:
20+
# replace username/repo:tag with your name and image details
21+
image: username/repo:tag
22+
deploy:
23+
replicas: 5
24+
resources:
25+
limits:
26+
cpus: "0.1"
27+
memory: 50M
28+
restart_policy:
29+
condition: on-failure
30+
ports:
31+
- "80:80"
32+
networks:
33+
- webnet
34+
networks:
35+
webnet:
36+
```

docs/docker/docker-quickstart.md

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,24 @@
1+
<!-- TOC -->
2+
3+
- [Docker 快速指南](#docker-%E5%BF%AB%E9%80%9F%E6%8C%87%E5%8D%97)
4+
- [Orientation](#orientation)
5+
- [概念](#%E6%A6%82%E5%BF%B5)
6+
- [Docker 的优点](#docker-%E7%9A%84%E4%BC%98%E7%82%B9)
7+
- [容器和镜像](#%E5%AE%B9%E5%99%A8%E5%92%8C%E9%95%9C%E5%83%8F)
8+
- [容器和虚拟机](#%E5%AE%B9%E5%99%A8%E5%92%8C%E8%99%9A%E6%8B%9F%E6%9C%BA)
9+
- [Containers](#containers)
10+
- [Dockerfile](#dockerfile)
11+
- [创建并运行一个镜像](#%E5%88%9B%E5%BB%BA%E5%B9%B6%E8%BF%90%E8%A1%8C%E4%B8%80%E4%B8%AA%E9%95%9C%E5%83%8F)
12+
- [共享镜像](#%E5%85%B1%E4%BA%AB%E9%95%9C%E5%83%8F)
13+
- [Services](#services)
14+
- [Swarms](#swarms)
15+
- [Stacks](#stacks)
16+
- [Deploy](#deploy)
17+
- [常用命令行](#%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4%E8%A1%8C)
18+
- [资料](#%E8%B5%84%E6%96%99)
19+
20+
<!-- /TOC -->
21+
122
# Docker 快速指南
223

324
## Orientation
@@ -6,17 +27,6 @@
627

728
Docker 是一个让开发者或系统管理员使用容器来**开发****部署****运行**应用的平台。
829

9-
容器化即使用 linux 容器来部署应用。
10-
11-
#### Docker 的优点
12-
13-
* 灵活的:即使是最复杂的应用也可以容器化。
14-
* 轻量级:容器利用和共享主机内核。
15-
* 可交换:你可以随意部署更新和升级。
16-
* 可移植:你可以本地构建,部署到云端,并在任何地方运行。
17-
* 可扩展:你可以添加并自动分配容器拷贝。
18-
* 可堆叠:你可以随意垂直堆叠服务。
19-
2030
#### 容器和镜像
2131

2232
镜像是一个可执行的包,这个包中含有运行一个应用所需要的一切:代码、运行环境、库、环境变量、配置文件。
@@ -227,3 +237,7 @@ docker tag <image> username/repository:tag # 标记 <image> 以上传到注册
227237
docker push username/repository:tag # 上传标记过的镜像到注册中心
228238
docker run username/repository:tag # 运行一个注册中心上的镜像
229239
```
240+
241+
## 资料
242+
243+
* https://docs.docker.com/get-started/

docs/docker/docker.xmind

66.3 KB
Binary file not shown.

0 commit comments

Comments
 (0)