diff --git a/docs/docker/README.md b/docs/docker/README.md index 93afb51..b9d8c23 100644 --- a/docs/docker/README.md +++ b/docs/docker/README.md @@ -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) diff --git a/docs/docker/advanced/docker-design.md b/docs/docker/advanced/docker-design.md index 44551a2..88cad43 100644 --- a/docs/docker/advanced/docker-design.md +++ b/docs/docker/advanced/docker-design.md @@ -1,3 +1,23 @@ + + +- [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) + + + # 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/ diff --git a/docs/docker/basics/docker-containers.md b/docs/docker/basics/docker-containers.md new file mode 100644 index 0000000..9cb77ea --- /dev/null +++ b/docs/docker/basics/docker-containers.md @@ -0,0 +1 @@ +Docker 容器 \ No newline at end of file diff --git a/docs/docker/basics/docker-dockerfile.md b/docs/docker/basics/docker-dockerfile.md new file mode 100644 index 0000000..49ed570 --- /dev/null +++ b/docs/docker/basics/docker-dockerfile.md @@ -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 中, \ No newline at end of file diff --git a/docs/docker/basics/docker-helloworld.md b/docs/docker/basics/docker-helloworld.md new file mode 100644 index 0000000..1c034cd --- /dev/null +++ b/docs/docker/basics/docker-helloworld.md @@ -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: + 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: + 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 +``` \ No newline at end of file diff --git a/docs/docker/basics/docker-services.md b/docs/docker/basics/docker-services.md new file mode 100644 index 0000000..036a0fe --- /dev/null +++ b/docs/docker/basics/docker-services.md @@ -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: +``` \ No newline at end of file diff --git a/docs/docker/docker-quickstart.md b/docs/docker/docker-quickstart.md index 9617476..1ce21be 100644 --- a/docs/docker/docker-quickstart.md +++ b/docs/docker/docker-quickstart.md @@ -1,3 +1,24 @@ + + +- [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) + + + # Docker 快速指南 ## Orientation @@ -6,17 +27,6 @@ Docker 是一个让开发者或系统管理员使用容器来**开发**、**部署**和**运行**应用的平台。 -容器化即使用 linux 容器来部署应用。 - -#### Docker 的优点 - -* 灵活的:即使是最复杂的应用也可以容器化。 -* 轻量级:容器利用和共享主机内核。 -* 可交换:你可以随意部署更新和升级。 -* 可移植:你可以本地构建,部署到云端,并在任何地方运行。 -* 可扩展:你可以添加并自动分配容器拷贝。 -* 可堆叠:你可以随意垂直堆叠服务。 - #### 容器和镜像 镜像是一个可执行的包,这个包中含有运行一个应用所需要的一切:代码、运行环境、库、环境变量、配置文件。 @@ -227,3 +237,7 @@ docker tag username/repository:tag # 标记 以上传到注册 docker push username/repository:tag # 上传标记过的镜像到注册中心 docker run username/repository:tag # 运行一个注册中心上的镜像 ``` + +## 资料 + +* https://docs.docker.com/get-started/ diff --git a/docs/docker/docker.xmind b/docs/docker/docker.xmind index 76d249e..e57d958 100644 Binary files a/docs/docker/docker.xmind and b/docs/docker/docker.xmind differ