diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index c36f6c1..29a7108 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,6 +1,6 @@ ## 如何贡献项目 -* 在 GitHub 上 `fork` 到自己的仓库,如 `docker_user/docker_practice`,然后 `clone` 到本地,并设置用户信息。 +* 在 [GitHub](https://github.com/yeasy/docker_practice/fork) 上 `fork` 到自己的仓库,如 `docker_user/docker_practice`,然后 `clone` 到本地,并设置用户信息。 ```bash $ git clone git@github.com:docker_user/docker_practice.git @@ -17,9 +17,10 @@ $ git push ``` -* 在 GitHub 网站上提交 pull request。 +* 在 [GitHub](https://github.com/yeasy/docker_practice/pulls) 上提交 Pull request。 * 定期使用项目仓库内容更新自己仓库内容。 + ```bash $ git remote add upstream https://github.com/yeasy/docker_practice $ git fetch upstream diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 4b6faa1..6a9c360 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -19,12 +19,11 @@ -* [x] 17.11 edge -* [ ] 17.09 stable +* [x] 17.11 Edge +* [ ] 17.09 Stable * [ ] 1.13.0 * [ ] Before 1.13.0 ### Problem Description - diff --git a/README.md b/README.md index a0e5876..f8787d1 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,8 @@ $ docker-compose pull $ docker-compose up ``` +关于离线阅读的详细说明请阅读 [Wiki](https://github.com/yeasy/docker_practice/wiki/%E7%A6%BB%E7%BA%BF%E9%98%85%E8%AF%BB%E5%8A%9F%E8%83%BD%E8%AF%A6%E8%A7%A3)。 + Docker 自身仍在快速发展中,生态环境也在蓬勃成长。建议初学者使用 Linux 上最新版的 Docker (v17.11) 进行学习实践。欢迎参与维护项目:[如何贡献](.github/CONTRIBUTING.md)。 * [修订记录](revision.md) diff --git a/appendix/resources/README.md b/appendix/resources/README.md index 3a03d74..c099be2 100644 --- a/appendix/resources/README.md +++ b/appendix/resources/README.md @@ -1,23 +1,29 @@ # 资源链接 ## 官方网站 -* Docker 官方主页: https://www.docker.com -* Docker 官方博客: https://blog.docker.com/ -* Docker 官方文档: https://docs.docker.com/ -* Docker Hub: https://hub.docker.com -* Docker 的源代码仓库: https://github.com/docker/docker + +* Docker 官方主页:https://www.docker.com +* Docker 官方博客:https://blog.docker.com/ +* Docker 官方文档:https://docs.docker.com/ +* Docker Store:https://store.docker.com +* Docker Cloud:https://cloud.docker.com +* Docker Hub:https://hub.docker.com +* Docker 的源代码仓库:https://github.com/moby/moby * Docker 发布版本历史:https://docs.docker.com/release-notes/ * Docker 常见问题:https://docs.docker.com/engine/faq/ -* Docker 远端应用 API: https://docs.docker.com/reference/api/docker_remote_api/ +* Docker 远端应用 API:https://docs.docker.com/develop/sdk/ ## 实践参考 + * Dockerfile 参考:https://docs.docker.com/reference/builder/ * Dockerfile 最佳实践:https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/ ## 技术交流 -* Docker 邮件列表: https://groups.google.com/forum/#!forum/docker-user -* Docker 的 IRC 频道: https://chat.freenode.net#docker -* Docker 的 Twitter 主页: https://twitter.com/docker + +* Docker 邮件列表: https://groups.google.com/forum/#!forum/docker-user +* Docker 的 IRC 频道:https://chat.freenode.net#docker +* Docker 的 Twitter 主页:https://twitter.com/docker ## 其它 -* Docker 的 StackOverflow 问答主页: https://stackoverflow.com/search?q=docker \ No newline at end of file + +* Docker 的 StackOverflow 问答主页:https://stackoverflow.com/search?q=docker diff --git a/container/daemon.md b/container/daemon.md index 6cac9c3..fd27047 100644 --- a/container/daemon.md +++ b/container/daemon.md @@ -47,7 +47,7 @@ hello world # Docker 1.13+ -在 Docker 1.13+ 版本中推荐使用 docker container 来管理镜像。 +在 Docker 1.13+ 版本中推荐使用 `docker container` 来管理镜像。 ```bash $ docker container run -d diff --git a/container/enter.md b/container/enter.md index 3b77c36..7df65f4 100644 --- a/container/enter.md +++ b/container/enter.md @@ -54,3 +54,13 @@ root@69d137adef7a:/# 如果从这个 stdin 中 exit,不会导致容器的停止。这就是为什么推荐大家使用 `docker exec` 的原因。 更多参数说明请使用 `docker exec --help` 查看。 + +## Docker 1.13+ + +在 Docker 1.13+ 版本中推荐使用 `docker container` 来管理容器。 + +```bash +$ docker container attach + +$ docker container exec +``` diff --git a/container/import_export.md b/container/import_export.md index a7da364..99874db 100644 --- a/container/import_export.md +++ b/container/import_export.md @@ -27,7 +27,7 @@ $ docker import http://example.com/exampleimage.tgz example/imagerepo ## Docker 1.13+ -在 Docker 1.13+ 版本中推荐使用 docker container 来管理容器。 +在 Docker 1.13+ 版本中推荐使用 `docker container` 来管理容器。 ```bash $ docker container export diff --git a/container/rm.md b/container/rm.md index afa7004..18d72dc 100644 --- a/container/rm.md +++ b/container/rm.md @@ -12,7 +12,7 @@ trusting_newton ## Docker 1.13+ -在 Docker 1.13+ 版本中推荐使用 docker container 来管理容器。 +在 Docker 1.13+ 版本中推荐使用 `docker container` 来管理容器。 ```bash $ docker container rm trusting_newton diff --git a/container/run.md b/container/run.md index 85c1d95..10019f3 100644 --- a/container/run.md +++ b/container/run.md @@ -52,7 +52,7 @@ root@ba267838cc1b:/# ps ## Docker 1.13+ -在 Docker 1.13+ 版本中推荐使用 docker container 来管理容器。 +在 Docker 1.13+ 版本中推荐使用 `docker container` 来管理容器。 ```bash $ docker container run ubuntu:17.10 /bin/echo 'Hello world' diff --git a/container/stop.md b/container/stop.md index bb9c4f9..6113161 100644 --- a/container/stop.md +++ b/container/stop.md @@ -1,10 +1,13 @@ ## 终止容器 + 可以使用 `docker stop` 来终止一个运行中的容器。 此外,当Docker容器中指定的应用终结时,容器也自动终止。 + 例如对于上一章节中只启动了一个终端的容器,用户通过 `exit` 命令或 `Ctrl+d` 来退出终端时,所创建的容器立刻终止。 终止状态的容器可以用 `docker ps -a` 命令看到。例如 + ```bash docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES @@ -18,7 +21,7 @@ ba267838cc1b ubuntu:14.04 "/bin/bash" 30 minutes a ## Docker 1.13+ -在 Docker 1.13+ 版本中推荐使用 docker container 来管理容器。 +在 Docker 1.13+ 版本中推荐使用 `docker container` 来管理容器。 ```bash $ docker container ls diff --git a/data_management/bind-mounts.md b/data_management/bind-mounts.md index 45d9827..1a67840 100644 --- a/data_management/bind-mounts.md +++ b/data_management/bind-mounts.md @@ -19,7 +19,7 @@ $ docker run -d -P \ 上面的命令加载主机的 `/src/webapp` 目录到容器的 `/opt/webapp`目录。这个功能在进行测试的时候十分方便,比如用户可以放置一些程序到本地目录中,来查看容器是否正常工作。本地目录的路径必须是绝对路径,如果目录不存在 Docker 会自动为你创建它。 -Docker 挂载主机目录的默认权限是读写,用户也可以通过增加 `readonly` 指定为只读。 +Docker 挂载主机目录的默认权限是 `读写`,用户也可以通过增加 `readonly` 指定为 `只读`。 ```bash $ docker run -d -P \ @@ -30,7 +30,7 @@ $ docker run -d -P \ python app.py ``` -加了 `readonly` 之后,就挂载为只读了。如果你在容器内 `/src/webapp` 目录新建文件,会显示如下错误 +加了 `readonly` 之后,就挂载为 `只读` 了。如果你在容器内 `/src/webapp` 目录新建文件,会显示如下错误 ```bash /src/webapp # touch new.txt @@ -66,9 +66,14 @@ $ docker inspect web ```bash $ docker run --rm -it \ - --mount type=bind,source=~/.bash_history,target=/root/.bash_history \ + # -v $HOME/.bash_history:/root/.bash_history \ + --mount type=bind,source=$HOME/.bash_history,target=/root/.bash_history \ ubuntu:17.10 \ - bash + bash + +root@2affd44b4667:/# history +1 ls +2 diskutil list ``` 这样就可以记录在容器输入过的命令了。 diff --git a/data_management/volume.md b/data_management/volume.md index 5491d3d..4a0485f 100644 --- a/data_management/volume.md +++ b/data_management/volume.md @@ -1,16 +1,16 @@ ## 数据卷 -数据卷是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性: +`数据卷` 是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性: -* 数据卷可以在容器之间共享和重用 +* `数据卷` 可以在容器之间共享和重用 -* 对数据卷的修改会立马生效 +* 对 `数据卷` 的修改会立马生效 -* 对数据卷的更新,不会影响镜像 +* 对 `数据卷` 的更新,不会影响镜像 -* 数据卷默认会一直存在,即使容器被删除 +* `数据卷` 默认会一直存在,即使容器被删除 -*注意*:数据卷的使用,类似于 Linux 下对目录或文件进行 mount,镜像中的被指定为挂载点的目录中的文件会隐藏掉,能显示看的是挂载的数据卷。 +*注意*:`数据卷` 的使用,类似于 Linux 下对目录或文件进行 mount,镜像中的被指定为挂载点的目录中的文件会隐藏掉,能显示看的是挂载的 `数据卷`。 ### 选择 -v 还是 -–mount 参数 @@ -22,7 +22,7 @@ Docker 新用户应该选择 `--mount` 参数,经验丰富的 Docker 使用者 $ docker volume create my-vol ``` -查看所有的数据卷 +查看所有的 `数据卷` ```bash $ docker volume ls @@ -30,7 +30,7 @@ $ docker volume ls local my-vol ``` -在主机里使用以下命令可以查看指定数据卷的信息 +在主机里使用以下命令可以查看指定 `数据卷` 的信息 ```bash $ docker volume inspect my-vol @@ -48,13 +48,14 @@ $ docker volume inspect my-vol ### 启动一个挂载数据卷的容器 -在用 `docker run` 命令的时候,使用 `--mount` 标记来将数据卷挂载到容器里。在一次 `docker run` 中可以挂载多个数据卷。 +在用 `docker run` 命令的时候,使用 `--mount` 标记来将 `数据卷` 挂载到容器里。在一次 `docker run` 中可以挂载多个 `数据卷`。 -下面创建一个名为 `web` 的容器,并加载一个数据卷到容器的 `/webapp` 目录。 +下面创建一个名为 `web` 的容器,并加载一个 `数据卷` 到容器的 `/webapp` 目录。 ```bash $ docker run -d -P \ --name web \ + # -v my-vol:/wepapp \ --mount source=my-vol,target=/webapp \ training/webapp \ python app.py @@ -91,7 +92,7 @@ $ docker inspect web $ docker volume rm my-vol ``` -数据卷是被设计用来持久化数据的,它的生命周期独立于容器,Docker 不会在容器被删除后自动删除数据卷,并且也不存在垃圾回收这样的机制来处理没有任何容器引用的数据卷。如果需要在删除容器的同时移除数据卷。可以在删除容器的时候使用 `docker rm -v` 这个命令。 +`数据卷` 是被设计用来持久化数据的,它的生命周期独立于容器,Docker 不会在容器被删除后自动删除 `数据卷`,并且也不存在垃圾回收这样的机制来处理没有任何容器引用的 `数据卷`。如果需要在删除容器的同时移除数据卷。可以在删除容器的时候使用 `docker rm -v` 这个命令。 无主的数据卷可能会占据很多空间,要清理请使用以下命令 diff --git a/image/build.md b/image/build.md index ef4ff46..1680d9d 100644 --- a/image/build.md +++ b/image/build.md @@ -221,7 +221,7 @@ $ docker build - < context.tar.gz # Docker 1.13+ -在 Docker 1.13+ 版本中推荐使用 docker image 来管理镜像。 +在 Docker 1.13+ 版本中推荐使用 `docker image` 来管理镜像。 ```bash $ docker image build diff --git a/image/dockerfile/README.md b/image/dockerfile/README.md index 662da0b..4265815 100644 --- a/image/dockerfile/README.md +++ b/image/dockerfile/README.md @@ -1,3 +1,3 @@ ## Dockerfile 指令详解 -我们已经介绍了 `FROM`,`RUN`,还提及了 `COPY`, `ADD`,其实 Dockerfile 功能很强大,它提供了十多个指令。这里我们继续讲解剩下的指令。 +我们已经介绍了 `FROM`,`RUN`,还提及了 `COPY`, `ADD`,其实 `Dockerfile` 功能很强大,它提供了十多个指令。这里我们继续讲解剩下的指令。 diff --git a/image/dockerfile/add.md b/image/dockerfile/add.md index ad6803a..a50637c 100644 --- a/image/dockerfile/add.md +++ b/image/dockerfile/add.md @@ -16,7 +16,7 @@ ADD ubuntu-xenial-core-cloudimg-amd64-root.tar.gz / 但在某些情况下,如果我们真的是希望复制个压缩文件进去,而不解压缩,这时就不可以使用 `ADD` 命令了。 -在 Docker 官方的最佳实践文档中要求,尽可能的使用 `COPY`,因为 `COPY` 的语义很明确,就是复制文件而已,而 `ADD` 则包含了更复杂的功能,其行为也不一定很清晰。最适合使用 `ADD` 的场合,就是所提及的需要自动解压缩的场合。 +在 Docker 官方的 [最佳实践文档](https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/) 中要求,尽可能的使用 `COPY`,因为 `COPY` 的语义很明确,就是复制文件而已,而 `ADD` 则包含了更复杂的功能,其行为也不一定很清晰。最适合使用 `ADD` 的场合,就是所提及的需要自动解压缩的场合。 另外需要注意的是,`ADD` 指令会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。 diff --git a/image/list.md b/image/list.md index f3e5af7..336180a 100644 --- a/image/list.md +++ b/image/list.md @@ -162,7 +162,7 @@ f753707788c5 ubuntu latest ## Docker 1.13+ -在 Docker 1.13+ 版本中推荐使用 docker image 来管理镜像。 +在 Docker 1.13+ 版本中推荐使用 `docker image` 来管理镜像。 ```bash $ docker image ls diff --git a/image/multistage-builds.md b/image/multistage-builds.md new file mode 100644 index 0000000..4d474e1 --- /dev/null +++ b/image/multistage-builds.md @@ -0,0 +1 @@ +## 多阶段构建 diff --git a/image/other.md b/image/other.md index 35a93a7..2ce3db1 100644 --- a/image/other.md +++ b/image/other.md @@ -73,7 +73,7 @@ docker save <镜像名> | bzip2 | pv | ssh <用户名>@<主机名> 'cat | docker ## Docker 1.13+ -在 Docker 1.13+ 版本中推荐使用 docker image 来管理镜像。 +在 Docker 1.13+ 版本中推荐使用 `docker image` 来管理镜像。 ```bash $ docker image import diff --git a/image/pull.md b/image/pull.md index 84c2ad0..e8573f5 100644 --- a/image/pull.md +++ b/image/pull.md @@ -72,7 +72,7 @@ $ ## Docker 1.13+ -在 Docker 1.13+ 版本中推荐使用 docker image 来管理镜像。 +在 Docker 1.13+ 版本中推荐使用 `docker image` 来管理镜像。 ```bash $ docker image pull ubunut:17.10 diff --git a/image/rmi.md b/image/rmi.md index 6c9f182..e18d59c 100644 --- a/image/rmi.md +++ b/image/rmi.md @@ -106,7 +106,7 @@ $ docker rmi $(docker images -q -f before=mongo:3.2) ## Docker 1.13+ -在 Docker 1.13+ 版本中推荐使用 docker image 来管理镜像。 +在 Docker 1.13+ 版本中推荐使用 `docker image` 来管理镜像。 ```bash $ docker image rm diff --git a/install/README.md b/install/README.md index 5d9d7e4..973c2b4 100644 --- a/install/README.md +++ b/install/README.md @@ -12,6 +12,6 @@ Docker 在 1.13 版本之后,从 2017 年的 3 月 1 日开始,版本命名 同时 Docker 划分为 CE 和 EE。CE 即社区版(免费,支持周期三个月),EE 即企业版,强调安全,付费使用。 -Docker CE 每月发布一个 edge 版本 (17.03, 17.04, 17.05...),每三个月发布一个 stable 版本 (17.03, 17.06, 17.09...),Docker EE 和 stable 版本号保持一致,但每个版本提供一年维护。 +Docker CE 每月发布一个 Edge 版本 (17.03, 17.04, 17.05...),每三个月发布一个 Stable 版本 (17.03, 17.06, 17.09...),Docker EE 和 Stable 版本号保持一致,但每个版本提供一年维护。 官方网站上有各种环境下的 [安装指南](https://docs.docker.com/engine/installation/),这里主要介绍 Docker CE 在 Linux 、Windows 10 (PC) 和 macOS 上的安装。 diff --git a/introduction/what.md b/introduction/what.md index f193155..f664f0a 100644 --- a/introduction/what.md +++ b/introduction/what.md @@ -4,7 +4,7 @@ Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的 Docker 自开源后受到广泛的关注和讨论,至今其 GitHub 项目已经超过 4 万 6 千个星标和一万多个 fork。甚至由于 Docker 项目的火爆,在 2013 年底,[dotCloud 公司决定改名为 Docker](https://blog.docker.com/2013/10/dotcloud-is-becoming-docker-inc/)。Docker 最初是在 Ubuntu 12.04 上开发实现的;Red Hat 则从 RHEL 6.5 开始对 Docker 进行支持;Google 也在其 PaaS 产品中广泛应用 Docker。 -Docker 使用 Google 公司推出的 [Go 语言](https://golang.org/) 进行开发实现,基于 Linux 内核的 [cgroup](https://zh.wikipedia.org/wiki/Cgroups),[namespace](https://en.wikipedia.org/wiki/Linux_namespaces),以及 [AUFS](https://en.wikipedia.org/wiki/Aufs) 类的 [Union FS](https://en.wikipedia.org/wiki/Union_mount) 等技术,对进程进行封装隔离,属于 [操作系统层面的虚拟化技术](https://en.wikipedia.org/wiki/Operating-system-level_virtualization)。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。最初实现是基于 [LXC](https://linuxcontainers.org/lxc/introduction/),从 0.7 版本以后开始去除 LXC,转而使用自行开发的 [libcontainer](https://github.com/docker/libcontainer),从 1.11 开始,则进一步演进为使用 [runC](http://runc.io/) 和 [containerd](https://containerd.tools/)。 +Docker 使用 Google 公司推出的 [Go 语言](https://golang.org/) 进行开发实现,基于 Linux 内核的 [cgroup](https://zh.wikipedia.org/wiki/Cgroups),[namespace](https://en.wikipedia.org/wiki/Linux_namespaces),以及 [AUFS](https://en.wikipedia.org/wiki/Aufs) 类的 [Union FS](https://en.wikipedia.org/wiki/Union_mount) 等技术,对进程进行封装隔离,属于 [操作系统层面的虚拟化技术](https://en.wikipedia.org/wiki/Operating-system-level_virtualization)。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。最初实现是基于 [LXC](https://linuxcontainers.org/lxc/introduction/),从 0.7 版本以后开始去除 LXC,转而使用自行开发的 [libcontainer](https://github.com/docker/libcontainer),从 1.11 开始,则进一步演进为使用 [runC](https://github.com/opencontainers/runc) 和 [containerd](https://containerd.tools/)。 Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。 diff --git a/introduction/why.md b/introduction/why.md index 2c2a9ab..3647758 100644 --- a/introduction/why.md +++ b/introduction/why.md @@ -28,13 +28,13 @@ ### 更轻松的维护和扩展 -Docker 使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。此外,Docker 团队同各个开源项目团队一起维护了一大批高质量的 [官方镜像](https://hub.docker.com/explore/),既可以直接在生产环境使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成本。 +Docker 使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。此外,Docker 团队同各个开源项目团队一起维护了一大批高质量的 [官方镜像](https://store.docker.com/search?q=&source=verified&type=image),既可以直接在生产环境使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成本。 ### 对比传统虚拟机总结 | 特性 | 容器 | 虚拟机 | -| -------- | -------- | ---------- | +| : -------- | : -------- | : ---------- | | 启动 | 秒级 | 分钟级 | -| 硬盘使用 | 一般为 MB | 一般为 GB | +| 硬盘使用 | 一般为 `MB` | 一般为 `GB` | | 性能 | 接近原生 | 弱于 | | 系统支持量 | 单机支持上千个容器 | 一般几十个 | diff --git a/revision.md b/revision.md index 8632642..35d44ab 100644 --- a/revision.md +++ b/revision.md @@ -13,15 +13,27 @@ * 0.9-rc1: 2017-11-30 * 根据最新版本(v17.09)修订内容 - * 增加 Dockerfile `multistage builds` 多阶段构建 `Docker 17.05` 新增特性 + + * 增加 `Dockerfile` 多阶段构建( `multistage builds` ) `Docker 17.05` 新增特性 * 增加 `docker exec` 子命令介绍 + * 增加 `docker` 管理子命令 `container` `image` `network` `volume` 介绍 + * 增加 `树莓派单片电脑` 安装 Docker + + * 更新 `Docker CE` `v17.x` 安装说明 * 更新 `Docker 网络` 一节 * 更新 `Docker Machine` 基于 0.13.0 版本 * 更新 `Docker Compose` 基于 3 文件格式 - * 删除 Docker Swarm 相关内容,替换为 `Swarm mode` `Docker 1.12.0` 新增特性 - * 精简 `Docker Registry` 一节 + + * 删除 `Docker Swarm` 相关内容,替换为 `Swarm mode` `Docker 1.12.0` 新增特性 * 删除 `docker run` `--link` 参数 + + * 精简 `Docker Registry` 一节 + * 替换 `docker run` `-v` 参数为 `--mount` + * 替换 `404` 链接 + + * 优化文字排版 + * 增加离线阅读功能 * 0.8.0: 2017-01-08