🔖 Docker 文档
parent
d45b173328
commit
d55dffa43b
|
@ -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)
|
||||
|
|
|
@ -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/
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Docker 容器
|
|
@ -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 中,
|
|
@ -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
|
||||
```
|
|
@ -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:
|
||||
```
|
|
@ -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.
Loading…
Reference in New Issue