diff --git a/SUMMARY.md b/SUMMARY.md index d861043..890c073 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -48,7 +48,7 @@ * [删除](container/rm.md) * [访问仓库](repository/README.md) * [Docker Hub](repository/dockerhub.md) - * [私有仓库](repository/local_repo.md) + * [私有仓库](repository/registry.md) * [配置文件](repository/config.md) * [数据管理](data_management/README.md) * [数据卷](data_management/volume.md) diff --git a/basic_concept/container.md b/basic_concept/container.md index 4066110..f4f0b68 100644 --- a/basic_concept/container.md +++ b/basic_concept/container.md @@ -8,6 +8,6 @@ 容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。因此,任何保存于容器存储层的信息都会随容器删除而丢失。 -按照 Docker 最佳实践的要求,容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。所有的文件写入操作,都应该使用 [数据卷(Volume)](https://docs.docker.com/engine/tutorials/dockervolumes/)、或者绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。 +按照 Docker 最佳实践的要求,容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。所有的文件写入操作,都应该使用 [数据卷(Volume)](../data_management/volume.md)、或者绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。 数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此,使用数据卷后,容器可以随意删除、重新 `run`,数据却不会丢失。 diff --git a/basic_concept/repository.md b/basic_concept/repository.md index 0ff5d0b..b938e89 100644 --- a/basic_concept/repository.md +++ b/basic_concept/repository.md @@ -16,13 +16,13 @@ Docker Registry 公开服务是开放给用户使用、允许用户管理镜像 最常使用的 Registry 公开服务是官方的 [Docker Hub](https://hub.docker.com/),这也是默认的 Registry,并拥有大量的高质量的官方镜像。除此以外,还有 [CoreOS](https://coreos.com/) 的 [Quay.io](https://quay.io/repository/),CoreOS 相关的镜像存储在这里;Google 的 [Google Container Registry](https://cloud.google.com/container-registry/),[Kubernetes](http://kubernetes.io/) 的镜像使用的就是这个服务。 -由于某些原因,在国内访问这些服务可能会比较慢。国内的一些云服务商提供了针对 Docker Hub 的镜像服务(Registry Mirror),这些镜像服务被称为**加速器**。常见的有 [阿里云加速器](https://cr.console.aliyun.com/#/accelerator)、[DaoCloud 加速器](https://www.daocloud.io/mirror#accelerator-doc) 等。使用加速器会直接从国内的地址下载 Docker Hub 的镜像,比直接从官方网站下载速度会提高很多。在后面的章节中会有进一步如何配置加速器的讲解。 +由于某些原因,在国内访问这些服务可能会比较慢。国内的一些云服务商提供了针对 Docker Hub 的镜像服务(Registry Mirror),这些镜像服务被称为**加速器**。常见的有 [阿里云加速器](https://cr.console.aliyun.com/#/accelerator)、[DaoCloud 加速器](https://www.daocloud.io/mirror#accelerator-doc) 等。使用加速器会直接从国内的地址下载 Docker Hub 的镜像,比直接从 Docker Hub 下载速度会提高很多。在 [安装 Dcoekr](../install/mirror.md) 一节中有详细的配置方法。 -国内也有一些云服务商提供类似于 Docker Hub 的公开服务。比如 [时速云镜像仓库](https://hub.tenxcloud.com/)、[网易云镜像服务](https://c.163.com/hub#/m/library/)、[DaoCloud 镜像市场](https://hub.daocloud.io/)、[阿里云镜像库](https://cr.console.aliyun.com)等。 +国内也有一些云服务商提供类似于 Docker Hub 的公开服务。比如 [时速云镜像仓库](https://hub.tenxcloud.com/)、[网易云镜像服务](https://c.163.com/hub#/m/library/)、[DaoCloud 镜像市场](https://hub.daocloud.io/)、[阿里云镜像库](https://cr.console.aliyun.com) 等。 ### 私有 Docker Registry -除了使用公开服务外,用户还可以在本地搭建私有 Docker Registry。Docker 官方提供了 [Docker Registry 镜像](https://hub.docker.com/_/registry/),可以直接使用做为私有 Registry 服务。在后续的相关章节中,会有进一步的搭建私有 Registry 服务的讲解。 +除了使用公开服务外,用户还可以在本地搭建私有 Docker Registry。Docker 官方提供了 [Docker Registry 镜像](https://hub.docker.com/_/registry/),可以直接使用做为私有 Registry 服务。在 [私有仓库](../repository/registry.md) 一节中,会有进一步的搭建私有 Registry 服务的讲解。 开源的 Docker Registry 镜像只提供了 [Docker Registry API](https://docs.docker.com/registry/spec/api/) 的服务端实现,足以支持 `docker` 命令,不影响使用。但不包含图形界面,以及镜像维护、用户管理、访问控制等高级功能。在官方的商业化版本 [Docker Trusted Registry](https://docs.docker.com/datacenter/dtr/2.0/) 中,提供了这些高级功能。 diff --git a/container/rm.md b/container/rm.md index 6355d15..afa7004 100644 --- a/container/rm.md +++ b/container/rm.md @@ -1,17 +1,14 @@ ## 删除容器 -可以使用 `docker rm` 来删除一个处于终止状态的容器。 -例如 -``` +可以使用 `docker rm` 来删除一个处于终止状态的容器。例如 +```bash $ docker rm trusting_newton trusting_newton ``` 如果要删除一个运行中的容器,可以添加 `-f` 参数。Docker 会发送 `SIGKILL` 信号给容器。 - ## 清理所有处于终止状态的容器 -用 `docker ps -a` 命令可以查看所有已经创建的包括终止状态的容器,如果数量太多要一个个删除可能会很麻烦,用 `docker rm $(docker ps -a -q)` 可以全部清理掉。 -*注意:这个命令其实会试图删除所有的包括还在运行中的容器,不过就像上面提过的 `docker rm` 默认并不会删除运行中的容器。* +用 `docker ps -a` 命令可以查看所有已经创建的包括终止状态的容器,如果数量太多要一个个删除可能会很麻烦,用 `docker container prune` 可以清理掉所有处于终止状态的容器。 ## Docker 1.13+ diff --git a/image/build.md b/image/build.md index af402a3..ef4ff46 100644 --- a/image/build.md +++ b/image/build.md @@ -27,11 +27,9 @@ RUN echo '
diff --git a/install/mirror.md b/install/mirror.md
index f720b3e..f012ee8 100644
--- a/install/mirror.md
+++ b/install/mirror.md
@@ -2,7 +2,7 @@
国内从 Docker Hub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。Docker 官方和国内很多云服务商都提供了国内加速器服务,例如:
-* [Docker 官方提供的中国registry mirror](https://docs.docker.com/registry/recipes/mirror/#use-case-the-china-registry-mirror)
+* [Docker 官方提供的中国 registry mirror](https://docs.docker.com/registry/recipes/mirror/#use-case-the-china-registry-mirror)
* [阿里云加速器](https://cr.console.aliyun.com/#/accelerator)
* [DaoCloud 加速器](https://www.daocloud.io/mirror#accelerator-doc)
diff --git a/install/windows.md b/install/windows.md
index db5db86..c894fee 100644
--- a/install/windows.md
+++ b/install/windows.md
@@ -6,13 +6,13 @@ Docker CE 支持 64 位版本的 Windows 10 Pro,且必须开启 Hyper-V。
### 安装
-点击以下链接下载 [stable](https://download.docker.com/win/stable/Docker%20for%20Windows%20Installer.exe) 或 [edge](https://download.docker.com/win/edge/Docker%20for%20Windows%20Installer.exe) 版本的 Docker CE。
+点击以下链接下载 [Stable](https://download.docker.com/win/stable/Docker%20for%20Windows%20Installer.exe) 或 [Edge](https://download.docker.com/win/edge/Docker%20for%20Windows%20Installer.exe) 版本的 Docker CE。
下载好之后双击 Docker for Windows Installer.exe 开始安装。
### 运行
-在 Windows 搜索栏 输入 Docker 点击 Docker for Windows 开始运行。
+在 Windows 搜索栏输入 Docker 点击 Docker for Windows 开始运行。

diff --git a/introduction/what.md b/introduction/what.md
index 739891c..f193155 100644
--- a/introduction/what.md
+++ b/introduction/what.md
@@ -1,6 +1,6 @@
## 什么是 Docker
-Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于 [2013 年 3 月以 Apache 2.0 授权协议开源][docker-soft],主要项目代码在 [GitHub](https://github.com/moby/moby) 上进行维护。Docker 项目后来还加入了 Linux 基金会,并成立推动 [开放容器联盟](https://www.opencontainers.org/)。
+Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于 [2013 年 3 月以 Apache 2.0 授权协议开源][docker-soft],主要项目代码在 [GitHub](https://github.com/moby/moby) 上进行维护。Docker 项目后来还加入了 Linux 基金会,并成立推动 [开放容器联盟(OCI)](https://www.opencontainers.org/)。
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。
diff --git a/introduction/why.md b/introduction/why.md
index 01f03e5..2c2a9ab 100644
--- a/introduction/why.md
+++ b/introduction/why.md
@@ -18,7 +18,7 @@
对开发和运维([DevOps](https://zh.wikipedia.org/wiki/DevOps))人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。
-使用 Docker 可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员可以通过 [Dockerfile](https://docs.docker.com/engine/reference/builder/) 来进行镜像构建,并结合 [持续集成(Continuous Integration)](https://en.wikipedia.org/wiki/Continuous_integration) 系统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合 [持续部署(Continuous Delivery/Deployment)](https://en.wikipedia.org/wiki/Continuous_delivery) 系统进行自动部署。
+使用 Docker 可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员可以通过 [Dockerfile](../image/dockerfile/) 来进行镜像构建,并结合 [持续集成(Continuous Integration)](https://en.wikipedia.org/wiki/Continuous_integration) 系统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合 [持续部署(Continuous Delivery/Deployment)](https://en.wikipedia.org/wiki/Continuous_delivery) 系统进行自动部署。
而且使用 `Dockerfile` 使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像。
@@ -28,7 +28,7 @@
### 更轻松的维护和扩展
-Docker 使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。此外,Docker 团队同各个开源项目团队一起维护了一大批高质量的[官方镜像](https://hub.docker.com/explore/),既可以直接在生产环境使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成本。
+Docker 使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。此外,Docker 团队同各个开源项目团队一起维护了一大批高质量的 [官方镜像](https://hub.docker.com/explore/),既可以直接在生产环境使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成本。
### 对比传统虚拟机总结
diff --git a/repository/dockerhub.md b/repository/dockerhub.md
index ef8c3b3..6bd9ad8 100644
--- a/repository/dockerhub.md
+++ b/repository/dockerhub.md
@@ -1,7 +1,7 @@
## Docker Hub
目前 Docker 官方维护了一个公共仓库 [Docker Hub](https://hub.docker.com/),其中已经包括了超过 15,000 的镜像。大部分需求,都可以通过在 Docker Hub 中直接下载镜像来实现。
### 注册
-你可以在 https://hub.docker.com 免费注册一个 Docker 账号。
+你可以在 https://cloud.docker.com 免费注册一个 Docker 账号。
### 登录
可以通过执行 `docker login` 命令交互式的输入用户名及密码来完成在命令行界面的登录。
登录成功后,本地用户目录的 `.dockercfg` 中将保存用户的认证信息。
diff --git a/repository/local_repo.md b/repository/local_repo.md
deleted file mode 100644
index f0367f1..0000000
--- a/repository/local_repo.md
+++ /dev/null
@@ -1,114 +0,0 @@
-## 私有仓库
-
-有时候使用 Docker Hub 这样的公共仓库可能不方便,用户可以创建一个本地仓库供私人使用。
-
-本节介绍如何使用本地仓库。
-
-`docker-registry` 是官方提供的工具,可以用于构建私有的镜像仓库。
-### 安装运行 docker-registry
-#### 容器运行
-在安装了 Docker 后,可以通过获取官方 registry 镜像来运行。
-```bash
-$ docker run -d -p 5000:5000 registry
-```
-这将使用官方的 registry 镜像来启动本地的私有仓库。
-用户可以通过指定参数来配置私有仓库位置,例如配置镜像存储到 Amazon S3 服务。
-```bash
-$ docker run \
- -e SETTINGS_FLAVOR=s3 \
- -e AWS_BUCKET=acme-docker \
- -e STORAGE_PATH=/registry \
- -e AWS_KEY=AKIAHSHB43HS3J92MXZ \
- -e AWS_SECRET=xdDowwlK7TJajV1Y7EoOZrmuPEJlHYcNP2k4j49T \
- -e SEARCH_BACKEND=sqlalchemy \
- -p 5000:5000 \
- registry
-````
-此外,还可以指定本地路径(如 `/home/user/registry-conf` )下的配置文件。
-```bash
-$ docker run -d \
- -p 5000:5000 \
- -v /home/user/registry-conf:/registry-conf \
- -e DOCKER_REGISTRY_CONFIG=/registry-conf/config.yml \
- registry
-```
-默认情况下,仓库会被创建在容器的 `/var/lib/registry `(v1 中是`/tmp/registry`)下。可以通过 `-v` 参数来将镜像文件存放在本地的指定路径。
-例如下面的例子将上传的镜像放到 `/opt/data/registry` 目录。
-```bash
-$ docker run -d \
- -p 5000:5000 \
- -v /opt/data/registry:/var/lib/registry \
- registry
-```
-
-### 在私有仓库上传、下载、搜索镜像
-创建好私有仓库之后,就可以使用 `docker tag` 来标记一个镜像,然后推送它到仓库,别的机器上就可以下载下来了。例如私有仓库地址为 `192.168.7.26:5000`。
-
-先在本机查看已有的镜像。
-```bash
-$ docker images
-REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
-ubuntu latest ba5877dc9bec 6 weeks ago 192.7 MB
-ubuntu 14.04 ba5877dc9bec 6 weeks ago 192.7 MB
-```
-
-使用`docker tag` 将 `ba58` 这个镜像标记为 `192.168.7.26:5000/test`(格式为 `docker tag IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]`)。
-```bash
-$ docker tag ba58 192.168.7.26:5000/test
-root ~ # docker images
-REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
-ubuntu 14.04 ba5877dc9bec 6 weeks ago 192.7 MB
-ubuntu latest ba5877dc9bec 6 weeks ago 192.7 MB
-192.168.7.26:5000/test latest ba5877dc9bec 6 weeks ago 192.7 MB
-```
-使用 `docker push` 上传标记的镜像。
-```bash
-$ docker push 192.168.7.26:5000/test
-The push refers to a repository [192.168.7.26:5000/test] (len: 1)
-Sending image list
-Pushing repository 192.168.7.26:5000/test (1 tags)
-Image 511136ea3c5a already pushed, skipping
-Image 9bad880da3d2 already pushed, skipping
-Image 25f11f5fb0cb already pushed, skipping
-Image ebc34468f71d already pushed, skipping
-Image 2318d26665ef already pushed, skipping
-Image ba5877dc9bec already pushed, skipping
-Pushing tag for rev [ba5877dc9bec] on {http://192.168.7.26:5000/v1/repositories/test/tags/latest}
-```
-用 curl 查看仓库中的镜像。
-```bash
-$ curl http://192.168.7.26:5000/v1/search
-{"num_results": 7, "query": "", "results": [{"description": "", "name": "library/miaxis_j2ee"}, {"description": "", "name": "library/tomcat"}, {"description": "", "name": "library/ubuntu"}, {"description": "", "name": "library/ubuntu_office"}, {"description": "", "name": "library/desktop_ubu"}, {"description": "", "name": "dockerfile/ubuntu"}, {"description": "", "name": "library/test"}]}
-```
-这里可以看到 `{"description": "", "name": "library/test"}`,表明镜像已经被成功上传了。
-
-现在可以到另外一台机器去下载这个镜像。
-```bash
-$ docker pull 192.168.7.26:5000/test
-Pulling repository 192.168.7.26:5000/test
-ba5877dc9bec: Download complete
-511136ea3c5a: Download complete
-9bad880da3d2: Download complete
-25f11f5fb0cb: Download complete
-ebc34468f71d: Download complete
-2318d26665ef: Download complete
-$ docker images
-REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
-192.168.7.26:5000/test latest ba5877dc9bec 6 weeks ago 192.7 MB
-```
-
-可以使用 `docker-compose push` 批量上传本地的镜像到私有 Docker 仓库,这里以 `127.0.0.1:5000` 为例:
-
-编写 `docker-compose.yml` 文件
-
-```yaml
-version: "3.4"
-services:
-
- ubuntu:
- image: 127.0.0.1:5000/ubuntu:latest
- centos:
- image: 127.0.0.1:5000/centos:centos7
-```
-
-在该文件路径下执行 `docker-compose push` 即可将上面的两个镜像上传到私有仓库中。
diff --git a/repository/registry.md b/repository/registry.md
new file mode 100644
index 0000000..18f4c8b
--- /dev/null
+++ b/repository/registry.md
@@ -0,0 +1,90 @@
+## 私有仓库
+
+有时候使用 Docker Hub 这样的公共仓库可能不方便,用户可以创建一个本地仓库供私人使用。
+
+本节介绍如何使用本地仓库。
+
+`docker-registry` 是官方提供的工具,可以用于构建私有的镜像仓库。本文内容基于 `docker-registry` v2。
+
+### 安装运行 docker-registry
+
+#### 容器运行
+
+你可以通过获取官方 `registry` 镜像来运行。
+
+```bash
+$ docker run -d -p 5000:5000 --restart=always --name registry registry
+```
+
+这将使用官方的 registry 镜像来启动本地的私有仓库。默认情况下,仓库会被创建在容器的 `/var/lib/registry ` 下。可以通过 `-v` 参数来将镜像文件存放在本地的指定路径。例如下面的例子将上传的镜像放到本地的 `/opt/data/registry` 目录。
+
+```bash
+$ docker run -d \
+ -p 5000:5000 \
+ -v /opt/data/registry:/var/lib/registry \
+ registry
+```
+
+### 在私有仓库上传、搜索、下载镜像
+
+创建好私有仓库之后,就可以使用 `docker tag` 来标记一个镜像,然后推送它到仓库。例如私有仓库地址为 `127.0.0.1:5000`。
+
+先在本机查看已有的镜像。
+
+```bash
+$ docker images
+REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
+ubuntu latest ba5877dc9bec 6 weeks ago 192.7 MB
+```
+
+使用 `docker tag` 将 `ubuntu:latest` 这个镜像标记为 `127.0.0.1:5000/ubuntu:latest`(格式为 `docker tag IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]`)。
+
+```bash
+$ docker tag ubuntu:latest 127.0.0.1:5000/ubuntu:latest
+$ docker images
+REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
+ubuntu latest ba5877dc9bec 6 weeks ago 192.7 MB
+127.0.0.1:5000/ubuntu:latest latest ba5877dc9bec 6 weeks ago 192.7 MB
+```
+
+使用 `docker push` 上传标记的镜像。
+
+```bash
+$ docker push 127.0.0.1:5000/ubuntu:latest
+The push refers to repository [127.0.0.1:5000/ubuntu]
+373a30c24545: Pushed
+a9148f5200b0: Pushed
+cdd3de0940ab: Pushed
+fc56279bbb33: Pushed
+b38367233d37: Pushed
+2aebd096e0e2: Pushed
+latest: digest: sha256:fe4277621f10b5026266932ddf760f5a756d2facd505a94d2da12f4f52f71f5a size: 1568
+```
+
+用 `curl` 查看仓库中的镜像。
+
+```bash
+$ curl 127.0.0.1:5000/v2/_catalog
+{"repositories":["ubuntu"]}
+```
+
+这里可以看到 `{"repositories":["ubuntu"]}`,表明镜像已经被成功上传了。
+
+先删除已有镜像,再尝试去下载这个镜像。
+
+```bash
+$ docker rmi 127.0.0.1:5000/ubuntu:latest
+
+$ docker pull 127.0.0.1:5000/ubuntu:latest
+Pulling repository 127.0.0.1:5000/ubuntu:latest
+ba5877dc9bec: Download complete
+511136ea3c5a: Download complete
+9bad880da3d2: Download complete
+25f11f5fb0cb: Download complete
+ebc34468f71d: Download complete
+2318d26665ef: Download complete
+
+$ docker images
+REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
+127.0.0.1:5000/ubuntu:latest latest ba5877dc9bec 6 weeks ago 192.7 MB
+```