mirror of
https://github.com/yeasy/docker_practice.git
synced 2026-08-10 16:37:34 +00:00
修复编辑问题:错别字/语病/术语/标点等 25 处(自动审校)
This commit is contained in:
@@ -112,7 +112,7 @@ flowchart LR
|
|||||||
Docker 的发展历程:
|
Docker 的发展历程:
|
||||||
|
|
||||||
- **2013 年 3 月**:开源发布
|
- **2013 年 3 月**:开源发布
|
||||||
- **2013 年底**:dotCloud 公司改名为 Docker,Inc。
|
- **2013 年底**:dotCloud 公司改名为 Docker, Inc.
|
||||||
- **2015 年**:成立[开放容器联盟 (OCI)](https://opencontainers.org/),推动容器标准化
|
- **2015 年**:成立[开放容器联盟 (OCI)](https://opencontainers.org/),推动容器标准化
|
||||||
- **至今**:[GitHub 项目](https://github.com/moby/moby)超过 7 万星标
|
- **至今**:[GitHub 项目](https://github.com/moby/moby)超过 7 万星标
|
||||||
|
|
||||||
|
|||||||
@@ -180,4 +180,4 @@ cat Dockerfile | docker build -
|
|||||||
```bash
|
```bash
|
||||||
$ docker build - < context.tar.gz
|
$ docker build - < context.tar.gz
|
||||||
```
|
```
|
||||||
如果发现标准输入的文件格式是 `gzip`、`bzip2` 以及 `xz` 的话,将会使其为上下文压缩包,直接将其展开,将里面视为上下文,并开始构建。
|
如果发现标准输入的文件格式是 `gzip`、`bzip2` 以及 `xz` 的话,将会将其视为上下文压缩包,直接将其展开,将里面视为上下文,并开始构建。
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ filename: POSIX tar archive
|
|||||||
```bash
|
```bash
|
||||||
$ docker save alpine | gzip > alpine-latest.tar.gz
|
$ docker save alpine | gzip > alpine-latest.tar.gz
|
||||||
```
|
```
|
||||||
然后我们将 `alpine-latest.tar.gz` 文件复制到了到了另一个机器上,可以用下面这个命令加载镜像:
|
然后我们将 `alpine-latest.tar.gz` 文件复制到了另一个机器上,可以用下面这个命令加载镜像:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ docker load -i alpine-latest.tar.gz
|
$ docker load -i alpine-latest.tar.gz
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ build:
|
|||||||
|
|
||||||
### 11.5.2 `cap_add, cap_drop`
|
### 11.5.2 `cap_add, cap_drop`
|
||||||
|
|
||||||
指定容器的内核能力 (capacity) 分配。
|
指定容器的内核能力 (capability) 分配。
|
||||||
|
|
||||||
例如,让容器拥有所有能力可以指定为:
|
例如,让容器拥有所有能力可以指定为:
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
## 11.8 实战 WordPress
|
## 11.8 实战 WordPress
|
||||||
|
|
||||||
> **版本说明**:本示例使用以下镜像版本:
|
> **版本说明**:本示例使用以下镜像版本:
|
||||||
> - MySQL:8.0(可替换为其他 8.x 版本,或使用 MariaDB 替代)
|
> - MySQL:8.4(可替换为其他 8.x 版本,或使用 MariaDB 替代)
|
||||||
> - WordPress:latest(建议在生产环境指定具体版本,如 6.x)
|
> - WordPress:latest(建议在生产环境指定具体版本,如 6.x)
|
||||||
|
|
||||||
WordPress 是全球最流行的内容管理系统 (CMS)。使用 Docker Compose 可以在几分钟内搭建一个包含数据库、Web 服务和持久化存储的生产级 WordPress 环境。
|
WordPress 是全球最流行的内容管理系统 (CMS)。使用 Docker Compose 可以在几分钟内搭建一个包含数据库、Web 服务和持久化存储的生产级 WordPress 环境。
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ Pod 通常不会被直接创建,而是通过 Deployment 等控制器来管理
|
|||||||
|
|
||||||
容器组主要是为了数据共享和它们之间的通信。
|
容器组主要是为了数据共享和它们之间的通信。
|
||||||
|
|
||||||
在一个容器组中,容器都使用相同的网络地址和端口,可以通过本地网络来相互通信。每个容器组都有独立的 IP,可用通过网络来和其他物理主机或者容器通信。
|
在一个容器组中,容器都使用相同的网络地址和端口,可以通过本地网络来相互通信。每个容器组都有独立的 IP,可以通过网络来和其他物理主机或者容器通信。
|
||||||
|
|
||||||
容器组有一组存储卷 (挂载点),主要是为了让容器在重启之后可以不丢失数据。
|
容器组有一组存储卷 (挂载点),主要是为了让容器在重启之后可以不丢失数据。
|
||||||
|
|
||||||
|
|||||||
@@ -39,7 +39,7 @@
|
|||||||
|
|
||||||
#### Etcd
|
#### Etcd
|
||||||
|
|
||||||
这里 Etcd 即作为数据后端,又作为消息中间件。
|
这里 Etcd 既作为数据后端,又作为消息中间件。
|
||||||
|
|
||||||
通过 Etcd 来存储所有的主节点上的状态信息,很容易实现主节点的分布式扩展。
|
通过 Etcd 来存储所有的主节点上的状态信息,很容易实现主节点的分布式扩展。
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ Kind 相比其他本地集群方案 (如 Minikube) 有以下显著优势:
|
|||||||
|
|
||||||
### 14.4.2 安装 Kind
|
### 14.4.2 安装 Kind
|
||||||
|
|
||||||
Kind 是一个二进制文件,并在 PATH 中即可使用。以下是不同系统的安装方法。
|
Kind 是一个二进制文件,放到 PATH 中即可使用。以下是不同系统的安装方法。
|
||||||
|
|
||||||
#### macOS
|
#### macOS
|
||||||
|
|
||||||
|
|||||||
@@ -85,7 +85,7 @@ OPTIONS:
|
|||||||
|
|
||||||
### 15.4.1 数据库操作
|
### 15.4.1 数据库操作
|
||||||
|
|
||||||
数据库操作围绕对键值和目录的 CRUD (符合 REST 风格的一套操作:Create) 完整生命周期的管理。
|
数据库操作围绕键值和目录的增删改查(CRUD),覆盖其完整生命周期管理。
|
||||||
|
|
||||||
etcd 在键的组织上采用了层次化的空间结构 (类似于文件系统中目录的概念),用户指定的键可以为单独的名字,如 `testkey`,此时实际上放在根目录 `/` 下面,也可以为指定目录结构,如 `cluster1/node2/testkey`,则将创建相应的目录结构。
|
etcd 在键的组织上采用了层次化的空间结构 (类似于文件系统中目录的概念),用户指定的键可以为单独的名字,如 `testkey`,此时实际上放在根目录 `/` 下面,也可以为指定目录结构,如 `cluster1/node2/testkey`,则将创建相应的目录结构。
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
## 16.3 阿里云
|
## 16.3 阿里云
|
||||||
|
|
||||||
如图 16-3:所示,阿里云是国内主流云服务平台之一。
|
如图 16-3 所示,阿里云是国内主流云服务平台之一。
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
## 16.4 亚马逊云
|
## 16.4 亚马逊云
|
||||||
|
|
||||||
如图 16-5:所示,AWS 是全球主流云服务平台之一。
|
如图 16-5 所示,AWS 是全球主流云服务平台之一。
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
|||||||
@@ -31,7 +31,7 @@
|
|||||||
|
|
||||||
### 17.8.3 当 Docker 遇上 WebAssembly
|
### 17.8.3 当 Docker 遇上 WebAssembly
|
||||||
|
|
||||||
在现代的容器生态系统中,Wasm 并不被看作是要被取代传统的 Docker 或者 Kubernetes 的技术,而是成为了一种 **与 Linux 容器互补并且共生** 的全新工作负载类型。
|
在现代的容器生态系统中,Wasm 并不被看作是要取代传统 Docker 或者 Kubernetes 的技术,而是成为了一种 **与 Linux 容器互补并且共生** 的全新工作负载类型。
|
||||||
|
|
||||||
目前,这通过 OCI (Open Container Initiative) 和 CRI 标准实现了集成上的统一:
|
目前,这通过 OCI (Open Container Initiative) 和 CRI 标准实现了集成上的统一:
|
||||||
|
|
||||||
|
|||||||
@@ -112,4 +112,4 @@ tmpfs on /sys/firmware type tmpfs (ro,relatime)
|
|||||||
* `Busybox` 官网:https://busybox.net/
|
* `Busybox` 官网:https://busybox.net/
|
||||||
* `Busybox` 官方仓库:https://git.busybox.net/busybox/
|
* `Busybox` 官方仓库:https://git.busybox.net/busybox/
|
||||||
* `Busybox` 官方镜像:https://hub.docker.com/\_/busybox/
|
* `Busybox` 官方镜像:https://hub.docker.com/\_/busybox/
|
||||||
* `Busybox` 官方仓库:https://github.com/docker-library/busybox
|
* `Busybox` 官方镜像仓库:https://github.com/docker-library/busybox
|
||||||
|
|||||||
@@ -7,14 +7,14 @@
|
|||||||

|

|
||||||
|
|
||||||
|
|
||||||
`Alpine` 操作系统是一个面向安全的轻型 `Linux` 发行版。它不同于通常 `Linux` 发行版,`Alpine` 采用了 `musl libc` 和 `busybox` 以减小系统的体积和运行时资源消耗,但功能上比 `busybox` 又完善的多,因此得到开源社区越来越多的青睐。在保持瘦身的同时,`Alpine` 还提供了自己的包管理工具 `apk`,可以通过 [Alpine Packages](https://pkgs.alpinelinux.org/packages) 网站上查询包信息,也可以直接通过 `apk` 命令直接查询和安装各种软件。
|
`Alpine` 操作系统是一个面向安全的轻型 `Linux` 发行版。它不同于通常 `Linux` 发行版,`Alpine` 采用了 `musl libc` 和 `busybox` 以减小系统的体积和运行时资源消耗,但功能上比 `busybox` 又完善得多,因此得到开源社区越来越多的青睐。在保持瘦身的同时,`Alpine` 还提供了自己的包管理工具 `apk`,可以在 [Alpine Packages](https://pkgs.alpinelinux.org/packages) 网站上查询包信息,也可以直接通过 `apk` 命令直接查询和安装各种软件。
|
||||||
|
|
||||||
|
|
||||||
`Alpine` 由非商业组织维护的,支持广泛场景的 `Linux` 发行版,它特别为资深/重度 `Linux` 用户而优化,关注安全,性能和资源效能。`Alpine` 镜像可以适用于更多常用场景,并且是一个优秀的可以适用于生产的基础系统/环境。
|
`Alpine` 是由非商业组织维护的、支持广泛场景的 `Linux` 发行版,它特别为资深/重度 `Linux` 用户而优化,关注安全,性能和资源效能。`Alpine` 镜像可以适用于更多常用场景,并且是一个优秀的可以适用于生产的基础系统/环境。
|
||||||
|
|
||||||
`Alpine` Docker 镜像也继承了 `Alpine Linux` 发行版的这些优势。相比于其他 `Docker` 镜像,它的容量非常小,压缩后仅约 **5 MB**(对比 `Ubuntu` 系列镜像约 `28 MB`),且拥有非常友好的包管理机制。官方镜像来自 `docker-alpine` 项目。
|
`Alpine` Docker 镜像也继承了 `Alpine Linux` 发行版的这些优势。相比于其他 `Docker` 镜像,它的容量非常小,压缩后仅约 **5 MB**(对比 `Ubuntu` 系列镜像约 `28 MB`),且拥有非常友好的包管理机制。官方镜像来自 `docker-alpine` 项目。
|
||||||
|
|
||||||
目前 Docker 官方已开始推荐使用 `Alpine` 替代之前的 `Ubuntu` 做为基础镜像环境。这样会带来多个好处。包括镜像下载速度加快,镜像安全性提高,主机之间的切换更方便,占用更少磁盘空间等。
|
目前 Docker 官方已开始推荐使用 `Alpine` 替代之前的 `Ubuntu` 作为基础镜像环境。这样会带来多个好处。包括镜像下载速度加快,镜像安全性提高,主机之间的切换更方便,占用更少磁盘空间等。
|
||||||
|
|
||||||
下表是官方镜像的大小比较(压缩后大小,实际数据以 Docker Hub 为准):
|
下表是官方镜像的大小比较(压缩后大小,实际数据以 Docker Hub 为准):
|
||||||
|
|
||||||
@@ -51,7 +51,7 @@ $ docker run alpine echo '123'
|
|||||||
```bash
|
```bash
|
||||||
$ apk add --no-cache <package>
|
$ apk add --no-cache <package>
|
||||||
```
|
```
|
||||||
`Alpine` 中软件安装包的名字可能会与其他发行版有所不同,可以在 `https://pkgs.alpinelinux.org/packages` 网站搜索并确定安装包名称。如果需要的安装包不在主索引内,但是在测试或社区索引中。那么可以按照以下方法使用这些安装包。
|
`Alpine` 中软件安装包的名字可能会与其他发行版有所不同,可以在 `https://pkgs.alpinelinux.org/packages` 网站搜索并确定安装包名称。如果需要的安装包不在主索引内,但是在测试或社区索引中,那么可以按照以下方法使用这些安装包。
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ echo "http://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories
|
$ echo "http://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||

|

|
||||||
|
|
||||||
|
|
||||||
`Debian` 是由 `GPL` 和其他自由软件许可协议授权的自由软件组成的操作系统,由 **Debian 计划 (Debian Project)** 组织维护。**Debian 计划** 是一个独立的、分散的组织,由 `3000` 人志愿者组成,接受世界多个非盈利组织的资金支持,`Software in the Public Interest` 提供支持并持有商标作为保护机构。`Debian` 以其坚守 `Unix` 和自由软件的精神,以及其给予用户的众多选择而闻名。现时 `Debian` 包括了超过 `25,000` 个软件包并支持 `12` 个计算机系统结构。
|
`Debian` 是由 `GPL` 和其他自由软件许可协议授权的自由软件组成的操作系统,由 **Debian 计划 (Debian Project)** 组织维护。**Debian 计划** 是一个独立的、分散的组织,由 `3000` 名志愿者组成,接受世界多个非盈利组织的资金支持,`Software in the Public Interest` 提供支持并持有商标作为保护机构。`Debian` 以其坚守 `Unix` 和自由软件的精神,以及其给予用户的众多选择而闻名。现时 `Debian` 包括了超过 `25,000` 个软件包并支持 `12` 个计算机系统结构。
|
||||||
|
|
||||||
`Debian` 作为一个大的系统组织框架,其下有多种不同操作系统核心的分支计划,主要为采用 `Linux` 核心的 `Debian GNU/Linux` 系统,其他还有采用 `GNU Hurd` 核心的 `Debian GNU/Hurd` 系统、采用 `FreeBSD` 核心的 `Debian GNU/kFreeBSD` 系统,以及采用 `NetBSD` 核心的 `Debian GNU/NetBSD` 系统。甚至还有利用 `Debian` 的系统架构和工具,采用 `OpenSolaris` 核心构建而成的 `Nexenta OS` 系统。在这些 `Debian` 系统中,以采用 `Linux` 核心的 `Debian GNU/Linux` 最为著名。
|
`Debian` 作为一个大的系统组织框架,其下有多种不同操作系统核心的分支计划,主要为采用 `Linux` 核心的 `Debian GNU/Linux` 系统,其他还有采用 `GNU Hurd` 核心的 `Debian GNU/Hurd` 系统、采用 `FreeBSD` 核心的 `Debian GNU/kFreeBSD` 系统,以及采用 `NetBSD` 核心的 `Debian GNU/NetBSD` 系统。甚至还有利用 `Debian` 的系统架构和工具,采用 `OpenSolaris` 核心构建而成的 `Nexenta OS` 系统。在这些 `Debian` 系统中,以采用 `Linux` 核心的 `Debian GNU/Linux` 最为著名。
|
||||||
|
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ CentOS Linux release 7.9.2009 (Core)
|
|||||||

|

|
||||||
|
|
||||||
|
|
||||||
`Fedora` 由 `Fedora Project` 社区开发,红帽公司赞助的 `Linux` 发行版。它的目标是创建一套新颖、多功能并且自由和开源的操作系统。`Fedora` 的功能对于用户而言,它是一套功能完备的,可以更新的免费操作系统,而对赞助商 `Red Hat` 而言,它是许多新技术的测试平台。被认为可用的技术最终会加入到 `Red Hat Enterprise Linux` 中。
|
`Fedora` 是由 `Fedora Project` 社区开发、红帽公司赞助的 `Linux` 发行版。它的目标是创建一套新颖、多功能并且自由和开源的操作系统。`Fedora` 的功能对于用户而言,它是一套功能完备的,可以更新的免费操作系统,而对赞助商 `Red Hat` 而言,它是许多新技术的测试平台。被认为可用的技术最终会加入到 `Red Hat Enterprise Linux` 中。
|
||||||
|
|
||||||
#### 使用 Fedora 官方镜像
|
#### 使用 Fedora 官方镜像
|
||||||
|
|
||||||
|
|||||||
@@ -134,7 +134,7 @@ RUN apt-get install -y curl nginx
|
|||||||
```
|
```
|
||||||
Docker 发现修改后的 `RUN apt-get update` 指令和之前的完全一样。所以,`apt-get update` 不会执行,而是使用之前的缓存镜像。因为 `apt-get update` 没有运行,后面的 `apt-get install` 可能安装的是过时的 `curl` 和 `nginx` 版本。
|
Docker 发现修改后的 `RUN apt-get update` 指令和之前的完全一样。所以,`apt-get update` 不会执行,而是使用之前的缓存镜像。因为 `apt-get update` 没有运行,后面的 `apt-get install` 可能安装的是过时的 `curl` 和 `nginx` 版本。
|
||||||
|
|
||||||
使用 `RUN apt-get update && apt-get install -y` 可以确保你的 Dockerfiles 每次安装的都是包的最新的版本,而且这个过程不需要进一步的编码或额外干预。这项技术叫作 `cache busting`。你也可以显示指定一个包的版本号来达到 `cache-busting`,这就是所谓的固定版本,例如:
|
使用 `RUN apt-get update && apt-get install -y` 可以确保你的 Dockerfiles 每次安装的都是包的最新的版本,而且这个过程不需要进一步的编码或额外干预。这项技术叫作 `cache busting`。你也可以显式指定一个包的版本号来达到 `cache-busting`,这就是所谓的固定版本,例如:
|
||||||
|
|
||||||
```docker
|
```docker
|
||||||
RUN apt-get update && apt-get install -y \
|
RUN apt-get update && apt-get install -y \
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
* `attach`:依附到一个正在运行的容器中;
|
* `attach`:依附到一个正在运行的容器中;
|
||||||
* `build`:从一个 Dockerfile 创建一个镜像;
|
* `build`:从一个 Dockerfile 创建一个镜像;
|
||||||
* `commit`:从一个容器的修改中创建一个新的镜像;
|
* `commit`:从一个容器的修改中创建一个新的镜像;
|
||||||
* `cp`:在容器和本地宿主系统之间复制文件中;
|
* `cp`:在容器和本地宿主系统之间复制文件;
|
||||||
* `create`:创建一个新容器,但并不运行它;
|
* `create`:创建一个新容器,但并不运行它;
|
||||||
* `diff`:检查一个容器内文件系统的修改,包括修改和增加;
|
* `diff`:检查一个容器内文件系统的修改,包括修改和增加;
|
||||||
* `events`:从服务端获取实时的事件;
|
* `events`:从服务端获取实时的事件;
|
||||||
@@ -64,7 +64,7 @@
|
|||||||
|
|
||||||
### 一张图总结 Docker 的命令
|
### 一张图总结 Docker 的命令
|
||||||
|
|
||||||
如图 16-1 所示,Docker 常用客户端命令可按功能分组理解。
|
如图 A-1 所示,Docker 常用客户端命令可按功能分组理解。
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
|||||||
@@ -206,7 +206,7 @@ $ sudo ip netns show
|
|||||||
$ sudo ip netns exec 1234 ifconfig eth0 172.17.0.100/16
|
$ sudo ip netns exec 1234 ifconfig eth0 172.17.0.100/16
|
||||||
```
|
```
|
||||||
|
|
||||||
### 如何获取容器绑定到本地那个 veth 接口上?
|
### 如何获取容器绑定到本地哪个 veth 接口上?
|
||||||
|
|
||||||
答:Docker 容器启动后,会通过 veth 接口对连接到本地网桥,veth 接口命名跟容器命名毫无关系,十分难以找到对应关系。
|
答:Docker 容器启动后,会通过 veth 接口对连接到本地网桥,veth 接口命名跟容器命名毫无关系,十分难以找到对应关系。
|
||||||
|
|
||||||
|
|||||||
@@ -135,7 +135,7 @@ Docker Compose
|
|||||||
项目 2: Node.js 微服务
|
项目 2: Node.js 微服务
|
||||||
- 优化镜像大小
|
- 优化镜像大小
|
||||||
- 配置 Compose 多个服务
|
- 配置 Compose 多个服务
|
||||||
- 设置网络和环保境变量
|
- 设置网络和环境变量
|
||||||
|
|
||||||
项目 3: 数据库容器化
|
项目 3: 数据库容器化
|
||||||
- PostgreSQL/MySQL 配置
|
- PostgreSQL/MySQL 配置
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ $ docker run -d -p 9000:9000 -p 9090:9090 minio/minio server /data --console-add
|
|||||||
|
|
||||||
### 离线部署
|
### 离线部署
|
||||||
|
|
||||||
许多生产环境是一般是没有公网资源的,这就需要从有公网资源的服务器上把镜像导出,然后导入到需要运行镜像的内网服务器。
|
许多生产环境一般是没有公网资源的,这就需要从有公网资源的服务器上把镜像导出,然后导入到需要运行镜像的内网服务器。
|
||||||
|
|
||||||
#### 导出镜像
|
#### 导出镜像
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user