🔖 Docker 文档

This commit is contained in:
Zhang Peng 2018-03-30 16:41:01 +08:00
parent d45b173328
commit d55dffa43b
8 changed files with 245 additions and 11 deletions

View File

@ -8,7 +8,9 @@
- [x] [Docker 快速指南](docker-quickstart.md)
- [ ] 基础篇basics
- [x] [Docker 简介](basics/docker-introduction.md)
- [x] [Docker 安装](basics/docker-install.md)
- [x] [Docker 之 Hello World](basics/docker-helloworld.md)
- [ ] 配置configuration
- [ ] 进阶篇advanced
- [x] [Docker 的设计](advanced/docker-design.md)

View File

@ -1,3 +1,23 @@
<!-- TOC -->
- [Docker 的设计](#docker-%E7%9A%84%E8%AE%BE%E8%AE%A1)
- [Docker 架构](#docker-%E6%9E%B6%E6%9E%84)
- [Docker 守护进程docker daemon](#docker-%E5%AE%88%E6%8A%A4%E8%BF%9B%E7%A8%8B%EF%BC%88docker-daemon%EF%BC%89)
- [Docker 客户端](#docker-%E5%AE%A2%E6%88%B7%E7%AB%AF)
- [Docker 注册中心](#docker-%E6%B3%A8%E5%86%8C%E4%B8%AD%E5%BF%83)
- [Docker 对象](#docker-%E5%AF%B9%E8%B1%A1)
- [镜像](#%E9%95%9C%E5%83%8F)
- [容器](#%E5%AE%B9%E5%99%A8)
- [服务](#%E6%9C%8D%E5%8A%A1)
- [底层技术](#%E5%BA%95%E5%B1%82%E6%8A%80%E6%9C%AF)
- [命名空间](#%E5%91%BD%E5%90%8D%E7%A9%BA%E9%97%B4)
- [控制组](#%E6%8E%A7%E5%88%B6%E7%BB%84)
- [联合文件系统](#%E8%81%94%E5%90%88%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F)
- [容器格式](#%E5%AE%B9%E5%99%A8%E6%A0%BC%E5%BC%8F)
- [资料](#%E8%B5%84%E6%96%99)
<!-- /TOC -->
# Docker 的设计
## Docker 架构
@ -71,3 +91,7 @@ Linux 上的 Docker Engine 也依赖于另一种称为控制组(`cgroups`
### 容器格式
Docker 引擎将命名空间,控制组和 UnionFS 组合成一个名为容器格式的包装器。默认的容器格式是`libcontainer`。将来Docker 可以通过与诸如 BSD Jails 或 Solaris Zones 等技术集成来支持其他容器格式。
## 资料
* https://docs.docker.com/engine/docker-overview/

View File

@ -0,0 +1 @@
Docker 容器

View File

@ -0,0 +1,86 @@
# Dockerfile
## 格式
Dockerfile 中,对于指令不区分大小写,但是推荐使用大写,来区别于参数。
Dockerfile 中将按照指令instruction出现次序依次执行。**注意Dockerfile 必须从 `FROM` 指令开始。**
Dockerfile 中,将 `#` 开头的行作为注释除非该行是有效的解析指令parser directives。一行中的 `#` 标记被视为参数。注释中不支持换行符。
示例:
```
# Comment
RUN echo 'we are running some # of cool things'
```
## 解析指令parser directives
解析指令是可选的,并且会影响 Dockerfile 中后续行的处理方式。解析指令不会将图层添加到构建中,并且不会显示为构建步骤。解析指令以 `# directive=value` 的形式写入特殊类型的注释。单个指令只能使用一次。
一旦注释空行或构建指令已被处理Docker 不再查找解析指令。相反它将任何符合解析指令格式的内容视为注释不会尝试验证它是否可能是解析指令。因此所有解析指令都必须位于Dockerfile 的最顶端。
解析指令不区分大小写。但是,约定是小写。约定还包括在任何解析指令之后的空白行。解析指令不支持续行符。
以下列举几个不合规范的示例。
因为续行符而无效:
```
# direc \
tive=value
```
因为出现两次解析指令而无效:
```
# directive=value1
# directive=value2
FROM ImageName
```
解析指令由于出现在构建指令后,而被视为注释:
```
FROM ImageName
# directive=value
```
解析指令由于出现在注释后,而被视为注释:
```
# About my dockerfile
# directive=value
FROM ImageName
```
因为无法识别,未知的指令被视为注释。此外,因为前一个未知指定被视为注释,后一个指令相当于出现在注释后,而也被视为了注释:
```
# unknowndirective=value
# knowndirective=value
```
解析器指令中允许使用非分行空白。因此,以下几行都是一致对待的:
```
#directive=value
# directive =value
# directive= value
# directive = value
# dIrEcTiVe=value
```
### escape
```
# escape=\ (backslash)
```
```
# escape=` (backtick)
```
在 Dockerfile 中,

View File

@ -0,0 +1,71 @@
# Docker 之 Hello World
## 前提
确保你的环境上已经成功安装 Docker。
## Hello World 实例
1. 使用 `docker version` 命令确保你的环境已成功安装 Docker。
```
# docker version
Client:
Version: 1.13.1
API version: 1.26
Package version: <unknown>
Go version: go1.8.3
Git commit: 774336d/1.13.1
Built: Wed Mar 7 17:06:16 2018
OS/Arch: linux/amd64
Server:
Version: 1.13.1
API version: 1.26 (minimum version 1.12)
Package version: <unknown>
Go version: go1.8.3
Git commit: 774336d/1.13.1
Built: Wed Mar 7 17:06:16 2018
OS/Arch: linux/amd64
Experimental: false
```
2. 使用 `docker run` 命令运行 Hello World 镜像。
```
docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
ca4f61b1923c: Pull complete
Digest: sha256:ca0eeb6fb05351dfc8759c20733c91def84cb8007aa89a5bf606bc8b315b9fc7
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
...
```
3. 使用 `docker image ls`命令查看镜像
```
docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/maven latest 76c9ab5df55b 7 days ago 737 MB
docker.io/python 2.7-slim 5541369755c4 13 days ago 139 MB
docker.io/hello-world latest f2a91732366c 4 months ago 1.85 kB
docker.io/java 8-jre e44d62cf8862 14 months ago 311 MB
docker.io/training/webapp latest 6fae60ef3446 2 years ago 349 MB
```
4. 使用 `docker container ls --all` 命令查看容器
如果查看正在运行的容器,不需要添加 `--all` 参数。
```
docker container ls --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a661d957c6fa hello-world "/hello" 2 minutes ago Exited (0) 2 minutes ago mystifying_swartz
3098f24a1064 docker.io/hello-world "/hello" 6 minutes ago Exited (0) 6 minutes ago sad_yonath
4c98c4f18a39 hello-world "/hello" 8 minutes ago Exited (0) 8 minutes ago admiring_banach
```

View File

@ -0,0 +1,36 @@
# Docker 服务
## 关于服务
在分布式应用程序中,应用程序的不同部分被称为“服务”。例如,如果您想象一个视频共享网站,它可能包含用于将应用程序数据存储在数据库中的服务,用户上传文件后在后台传输的服务,前端应用服务等等。
服务实际上只是“生产环境中的容器”。一个服务只运行一个镜像,但它需要制定镜像的运行方式 - 应该使用哪个端口,容器应该运行多少副本,以便服务具有所需的容量,以及等等。缩放服务会更改运行该软件的容器实例的数量,从而为流程中的服务分配更多计算资源。
幸运的是,使用 Docker 平台定义,运行和扩展服务非常简单 - 只需编写一个 docker-compose.yml 文件即可。
## docker-compose.yml 文件
它是一个YAML文件它定义了Docker容器在生产中的行为方式。
```
version: "3"
services:
web:
# replace username/repo:tag with your name and image details
image: username/repo:tag
deploy:
replicas: 5
resources:
limits:
cpus: "0.1"
memory: 50M
restart_policy:
condition: on-failure
ports:
- "80:80"
networks:
- webnet
networks:
webnet:
```

View File

@ -1,3 +1,24 @@
<!-- TOC -->
- [Docker 快速指南](#docker-%E5%BF%AB%E9%80%9F%E6%8C%87%E5%8D%97)
- [Orientation](#orientation)
- [概念](#%E6%A6%82%E5%BF%B5)
- [Docker 的优点](#docker-%E7%9A%84%E4%BC%98%E7%82%B9)
- [容器和镜像](#%E5%AE%B9%E5%99%A8%E5%92%8C%E9%95%9C%E5%83%8F)
- [容器和虚拟机](#%E5%AE%B9%E5%99%A8%E5%92%8C%E8%99%9A%E6%8B%9F%E6%9C%BA)
- [Containers](#containers)
- [Dockerfile](#dockerfile)
- [创建并运行一个镜像](#%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)
- [共享镜像](#%E5%85%B1%E4%BA%AB%E9%95%9C%E5%83%8F)
- [Services](#services)
- [Swarms](#swarms)
- [Stacks](#stacks)
- [Deploy](#deploy)
- [常用命令行](#%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4%E8%A1%8C)
- [资料](#%E8%B5%84%E6%96%99)
<!-- /TOC -->
# Docker 快速指南
## Orientation
@ -6,17 +27,6 @@
Docker 是一个让开发者或系统管理员使用容器来**开发**、**部署**和**运行**应用的平台。
容器化即使用 linux 容器来部署应用。
#### Docker 的优点
* 灵活的:即使是最复杂的应用也可以容器化。
* 轻量级:容器利用和共享主机内核。
* 可交换:你可以随意部署更新和升级。
* 可移植:你可以本地构建,部署到云端,并在任何地方运行。
* 可扩展:你可以添加并自动分配容器拷贝。
* 可堆叠:你可以随意垂直堆叠服务。
#### 容器和镜像
镜像是一个可执行的包,这个包中含有运行一个应用所需要的一切:代码、运行环境、库、环境变量、配置文件。
@ -227,3 +237,7 @@ docker tag <image> username/repository:tag # 标记 <image> 以上传到注册
docker push username/repository:tag # 上传标记过的镜像到注册中心
docker run username/repository:tag # 运行一个注册中心上的镜像
```
## 资料
* https://docs.docker.com/get-started/

Binary file not shown.