## 使用 etcdctl
`etcdctl` 是一个命令行客户端,它能提供一些简洁的命令,供用户直接跟 `etcd` 服务打交道,而无需基于 `HTTP API` 方式。这在某些情况下将很方便,例如用户对服务进行测试或者手动修改数据库内容。我们也推荐在刚接触 `etcd` 时通过 `etcdctl` 命令来熟悉相关的操作,这些操作跟 `HTTP API` 实际上是对应的。
`etcd` 项目二进制发行包中已经包含了 `etcdctl` 工具,没有的话,可以从 [github.com/coreos/etcd/releases](https://github.com/coreos/etcd/releases) 下载。
`etcdctl` 支持如下的命令,大体上分为数据库操作和非数据库操作两类,后面将分别进行解释。
```
<pre class="prettyprint"><ol class="linenums"><li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln">NAME</span><span class="pun">:</span></code></li>
<li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> etcdctl </span><span class="pun">-</span><span class="pln"> A simple command line client </span><span class="kwd">for</span><span class="pln"> etcd3</span><span class="pun">.</span></code></li>
<li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"></code></li>
<li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln">USAGE</span><span class="pun">:</span></code></li>
<li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> etcdctl</span></code></li>
<li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"></code></li>
<li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln">VERSION</span><span class="pun">:</span></code></li>
<li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> </span><span class="lit">3.2</span><span class="pun">.</span><span class="lit">10</span></code></li>
<li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"></code></li>
<li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln">API VERSION</span><span class="pun">:</span></code></li>
<li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> </span><span class="lit">3.2</span></code></li>
<li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"></code></li>
<li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"></code></li>
<li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln">COMMANDS</span><span class="pun">:</span></code></li>
<li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> </span><span class="kwd">get</span><span class="pln"> </span><span class="typ">Gets</span><span class="pln"> the key </span><span class="kwd">or</span><span class="pln"> a range of keys</span></code></li>
<li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> put </span><span class="typ">Puts</span><span class="pln"> the given key </span><span class="kwd">into</span><span class="pln"> the store</span></code></li>
<li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> </span><span class="kwd">del</span><span class="pln"> </span><span class="typ">Removes</span><span class="pln"> the specified key </span><span class="kwd">or</span><span class="pln"> range of keys </span><span class="pun">[</span><span class="pln">key</span><span class="pun">,</span><span class="pln"> range_end</span><span class="pun">)</span></code></li>
<li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> txn </span><span class="typ">Txn</span><span class="pln"> processes all the requests </span><span class="kwd">in</span><span class="pln"> one transaction</span></code></li>
<li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> compaction </span><span class="typ">Compacts</span><span class="pln"> the </span><span class="kwd">event</span><span class="pln"> history </span><span class="kwd">in</span><span class="pln"> etcd</span></code></li>
<li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> alarm disarm </span><span class="typ">Disarms</span><span class="pln"> all alarms</span></code></li>
<li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> alarm list </span><span class="typ">Lists</span><span class="pln"> all alarms</span></code></li>
<li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> defrag </span><span class="typ">Defragments</span><span class="pln"> the storage of the etcd members </span><span class="kwd">with</span><span class="pln"> given endpoints</span></code></li>
<li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> endpoint health </span><span class="typ">Checks</span><span class="pln"> the healthiness of endpoints specified </span><span class="kwd">in</span><span class="pln"> </span><span class="str">`--endpoints`</span><span class="pln"> flag</span></code></li>
<li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> endpoint status </span><span class="typ">Prints</span><span class="pln"> </span><span class="kwd">out</span><span class="pln"> the status of endpoints specified </span><span class="kwd">in</span><span class="pln"> </span><span class="str">`--endpoints`</span><span class="pln"> flag</span></code></li>
<li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> watch </span><span class="typ">Watches</span><span class="pln"> events stream on keys </span><span class="kwd">or</span><span class="pln"> prefixes</span></code></li>
<li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> version </span><span class="typ">Prints</span><span class="pln"> the version of etcdctl</span></code></li>
<li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> lease grant </span><span class="typ">Creates</span><span class="pln"> leases</span></code></li>
<li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> lease revoke </span><span class="typ">Revokes</span><span class="pln"> leases</span></code></li>
<li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> lease timetolive </span><span class="typ">Get</span><span class="pln"> lease information</span></code></li>
<li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> lease keep</span><span class="pun">-</span><span class="pln">alive </span><span class="typ">Keeps</span><span class="pln"> leases alive </span><span class="pun">(</span><span class="pln">renew</span><span class="pun">)</span></code></li>
<li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> member add </span><span class="typ">Adds</span><span class="pln"> a member </span><span class="kwd">into</span><span class="pln"> the cluster</span></code></li>
<li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> member remove </span><span class="typ">Removes</span><span class="pln"> a member </span><span class="kwd">from</span><span class="pln"> the cluster</span></code></li>
<li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> member update </span><span class="typ">Updates</span><span class="pln"> a member </span><span class="kwd">in</span><span class="pln"> the cluster</span></code></li>
<li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> member list </span><span class="typ">Lists</span><span class="pln"> all members </span><span class="kwd">in</span><span class="pln"> the cluster</span></code></li>
<li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> snapshot save </span><span class="typ">Stores</span><span class="pln"> an etcd node backend snapshot to a given file</span></code></li>
<li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> snapshot restore </span><span class="typ">Restores</span><span class="pln"> an etcd member snapshot to an etcd directory</span></code></li>
<li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> snapshot status </span><span class="typ">Gets</span><span class="pln"> backend snapshot status of a given file</span></code></li>
<li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> make</span><span class="pun">-</span><span class="pln">mirror </span><span class="typ">Makes</span><span class="pln"> a mirror at the destination etcd cluster</span></code></li>
<li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> migrate </span><span class="typ">Migrates</span><span class="pln"> keys </span><span class="kwd">in</span><span class="pln"> a v2 store to a mvcc store</span></code></li>
<li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> </span><span class="kwd">lock</span><span class="pln"> </span><span class="typ">Acquires</span><span class="pln"> a named </span><span class="kwd">lock</span></code></li>
<li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> elect </span><span class="typ">Observes</span><span class="pln"> </span><span class="kwd">and</span><span class="pln"> participates </span><span class="kwd">in</span><span class="pln"> leader election</span></code></li>
<li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> auth enable </span><span class="typ">Enables</span><span class="pln"> authentication</span></code></li>
<li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> auth disable </span><span class="typ">Disables</span><span class="pln"> authentication</span></code></li>
<li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> user add </span><span class="typ">Adds</span><span class="pln"> a </span><span class="kwd">new</span><span class="pln"> user</span></code></li>
<li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> user </span><span class="kwd">delete</span><span class="pln"> </span><span class="typ">Deletes</span><span class="pln"> a user</span></code></li>
<li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> user </span><span class="kwd">get</span><span class="pln"> </span><span class="typ">Gets</span><span class="pln"> detailed information of a user</span></code></li>
<li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> user list </span><span class="typ">Lists</span><span class="pln"> all users</span></code></li>
<li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> user passwd </span><span class="typ">Changes</span><span class="pln"> password of user</span></code></li>
<li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> user grant</span><span class="pun">-</span><span class="pln">role </span><span class="typ">Grants</span><span class="pln"> a role to a user</span></code></li>
<li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> user revoke</span><span class="pun">-</span><span class="pln">role </span><span class="typ">Revokes</span><span class="pln"> a role </span><span class="kwd">from</span><span class="pln"> a user</span></code></li>
<li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> role add </span><span class="typ">Adds</span><span class="pln"> a </span><span class="kwd">new</span><span class="pln"> role</span></code></li>
<li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> role </span><span class="kwd">delete</span><span class="pln"> </span><span class="typ">Deletes</span><span class="pln"> a role</span></code></li>
<li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> role </span><span class="kwd">get</span><span class="pln"> </span><span class="typ">Gets</span><span class="pln"> detailed information of a role</span></code></li>
<li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> role list </span><span class="typ">Lists</span><span class="pln"> all roles</span></code></li>
<li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> role grant</span><span class="pun">-</span><span class="pln">permission </span><span class="typ">Grants</span><span class="pln"> a key to a role</span></code></li>
<li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> role revoke</span><span class="pun">-</span><span class="pln">permission </span><span class="typ">Revokes</span><span class="pln"> a key </span><span class="kwd">from</span><span class="pln"> a role</span></code></li>
<li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> check perf </span><span class="typ">Check</span><span class="pln"> the performance of the etcd cluster</span></code></li>
<li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> help </span><span class="typ">Help</span><span class="pln"> about any command</span></code></li>
<li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"></code></li>
<li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln">OPTIONS</span><span class="pun">:</span></code></li>
<li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> </span><span class="pun">--</span><span class="pln">cacert</span><span class="pun">=</span><span class="str">""</span><span class="pln"> verify certificates of TLS</span><span class="pun">-</span><span class="pln">enabled secure servers </span><span class="kwd">using</span><span class="pln"> </span><span class="kwd">this</span><span class="pln"> CA bundle</span></code></li>
<li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> </span><span class="pun">--</span><span class="pln">cert</span><span class="pun">=</span><span class="str">""</span><span class="pln"> identify secure client </span><span class="kwd">using</span><span class="pln"> </span><span class="kwd">this</span><span class="pln"> TLS certificate file</span></code></li>
<li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> </span><span class="pun">--</span><span class="pln">command</span><span class="pun">-</span><span class="pln">timeout</span><span class="pun">=</span><span class="lit">5s</span><span class="pln"> timeout </span><span class="kwd">for</span><span class="pln"> </span><span class="kwd">short</span><span class="pln"> running command </span><span class="pun">(</span><span class="pln">excluding dial timeout</span><span class="pun">)</span></code></li>
<li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> </span><span class="pun">--</span><span class="pln">debug</span><span class="pun">[=</span><span class="kwd">false</span><span class="pun">]</span><span class="pln"> enable client</span><span class="pun">-</span><span class="pln">side debug logging</span></code></li>
<li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> </span><span class="pun">--</span><span class="pln">dial</span><span class="pun">-</span><span class="pln">timeout</span><span class="pun">=</span><span class="lit">2s</span><span class="pln"> dial timeout </span><span class="kwd">for</span><span class="pln"> client connections</span></code></li>
<li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> </span><span class="pun">--</span><span class="pln">endpoints</span><span class="pun">=[</span><span class="lit">127.0</span><span class="pun">.</span><span class="lit">0.1</span><span class="pun">:</span><span class="lit">2379</span><span class="pun">]</span><span class="pln"> gRPC endpoints</span></code></li>
<li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> </span><span class="pun">--</span><span class="pln">hex</span><span class="pun">[=</span><span class="kwd">false</span><span class="pun">]</span><span class="pln"> </span><span class="kwd">print</span><span class="pln"> </span><span class="kwd">byte</span><span class="pln"> strings </span><span class="kwd">as</span><span class="pln"> hex encoded strings</span></code></li>
<li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> </span><span class="pun">--</span><span class="pln">insecure</span><span class="pun">-</span><span class="pln">skip</span><span class="pun">-</span><span class="pln">tls</span><span class="pun">-</span><span class="pln">verify</span><span class="pun">[=</span><span class="kwd">false</span><span class="pun">]</span><span class="pln"> skip server certificate verification</span></code></li>
<li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> </span><span class="pun">--</span><span class="pln">insecure</span><span class="pun">-</span><span class="pln">transport</span><span class="pun">[=</span><span class="kwd">true</span><span class="pun">]</span><span class="pln"> disable transport security </span><span class="kwd">for</span><span class="pln"> client connections</span></code></li>
<li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> </span><span class="pun">--</span><span class="pln">key</span><span class="pun">=</span><span class="str">""</span><span class="pln"> identify secure client </span><span class="kwd">using</span><span class="pln"> </span><span class="kwd">this</span><span class="pln"> TLS key file</span></code></li>
<li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> </span><span class="pun">--</span><span class="pln">user</span><span class="pun">=</span><span class="str">""</span><span class="pln"> username</span><span class="pun">[:</span><span class="pln">password</span><span class="pun">]</span><span class="pln"> </span><span class="kwd">for</span><span class="pln"> authentication </span><span class="pun">(</span><span class="pln">prompt </span><span class="kwd">if</span><span class="pln"> password </span><span class="kwd">is</span><span class="pln"> </span><span class="kwd">not</span><span class="pln"> supplied</span><span class="pun">)</span></code></li>
<li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> </span><span class="pun">-</span><span class="pln">w</span><span class="pun">,</span><span class="pln"> </span><span class="pun">--</span><span class="pln">write</span><span class="pun">-</span><span class="kwd">out</span><span class="pun">=</span><span class="str">"simple"</span><span class="pln"> </span><span class="kwd">set</span><span class="pln"> the output format </span><span class="pun">(</span><span class="pln">fields</span><span class="pun">,</span><span class="pln"> json</span><span class="pun">,</span><span class="pln"> protobuf</span><span class="pun">,</span><span class="pln"> simple</span><span class="pun">,</span><span class="pln"> table</span><span class="pun">)</span></code></li>
</ol>
```
### 数据库操作
数据库操作围绕对键值和目录的 CRUD (符合 REST 风格的一套操作:Create)完整生命周期的管理。
etcd 在键的组织上采用了层次化的空间结构(类似于文件系统中目录的概念),用户指定的键可以为单独的名字,如 `testkey`,此时实际上放在根目录 `/` 下面,也可以为指定目录结构,如 `cluster1/node2/testkey`,则将创建相应的目录结构。
> 注:CRUD 即 Create, Read, Update, Delete,是符合 REST 风格的一套 API 操作。
#### put
```
<pre class="prettyprint"><ol class="linenums"><li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln">$ etcdctl put </span><span class="pun">/</span><span class="pln">testdir</span><span class="pun">/</span><span class="pln">testkey </span><span class="str">"Hello world"</span></code></li>
<li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln">OK</span></code></li>
</ol>
```
#### get
获取指定键的值。例如
```
<pre class="prettyprint"><ol class="linenums"><li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln">$ etcdctl put testkey hello</span></code></li>
<li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln">OK</span></code></li>
<li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln">$ etcdctl get testkey</span></code></li>
<li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln">testkey</span></code></li>
<li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln">hello</span></code></li>
</ol>
```
支持的选项为
`--sort` 对结果进行排序
`--consistent` 将请求发给主节点,保证获取内容的一致性
#### del
删除某个键值。例如
```
<pre class="prettyprint"><ol class="linenums"><li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln">$ etcdctl del testkey</span></code></li>
<li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="lit">1</span></code></li>
</ol>
```
### 非数据库操作
#### watch
监测一个键值的变化,一旦键值发生更新,就会输出最新的值。
例如,用户更新 `testkey` 键值为 `Hello world`。
```
<pre class="prettyprint"><ol class="linenums"><li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln">$ etcdctl watch testkey</span></code></li>
<li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln">PUT</span></code></li>
<li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln">testkey</span></code></li>
<li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="lit">2</span></code></li>
</ol>
```
#### member
通过 `list`、`add`、`update`、`remove` 命令列出、添加、更新、删除 etcd 实例到 etcd 集群中。
例如本地启动一个 `etcd` 服务实例后,可以用如下命令进行查看。
```
<pre class="prettyprint"><ol class="linenums"><li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln">$ etcdctl member list</span></code></li>
<li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="lit">422a74f03b622fef</span><span class="pun">,</span><span class="pln"> started</span><span class="pun">,</span><span class="pln"> node1</span><span class="pun">,</span><span class="pln"> http</span><span class="pun">://</span><span class="lit">172.16</span><span class="pun">.</span><span class="lit">238.100</span><span class="pun">:</span><span class="lit">2380</span><span class="pun">,</span><span class="pln"> http</span><span class="pun">://</span><span class="lit">172.16</span><span class="pun">.</span><span class="lit">238.100</span><span class="pun">:</span><span class="lit">23</span></code></li>
</ol>
```
- 致谢
- 目录
- 01. 前言
- 02. 修订记录
- 03. 如何贡献
- 04. Docker 简介
- 什么是 Docker
- 为什么要用 Docker
- 05. 基本概念
- 镜像
- 容器
- 仓库
- 06. 安装 Docker
- Ubuntu
- Debian
- CentOS
- Raspberry Pi
- macOS
- Windows PC
- 镜像加速器
- 07.使用镜像
- 获取镜像
- 列出镜像
- 删除本地镜像
- 利用 commit 理解镜像构成
- 使用 Dockerfile 定制镜像
- Dockerfile 指令详解
- COPY 复制文件
- ADD 更高级的复制文件
- CMD 容器启动命令
- ENTRYPOINT 入口点
- ENV 设置环境变量
- ARG 构建参数
- VOLUME 定义匿名卷
- EXPOSE 暴露端口
- WORKDIR 指定工作目录
- USER 指定当前用户
- HEALTHCHECK 健康检查
- ONBUILD 为他人作嫁衣裳
- 参考文档
- Dockerfile 多阶段构建
- 其它制作镜像的方式
- 实现原理
- 08. 操作容器
- 启动
- 守护态运行
- 终止
- 进入容器
- 导出和导入
- 删除
- 09. 访问仓库
- Docker Hub
- 私有仓库
- 私有仓库高级配置
- 10. 数据管理
- 数据卷
- 监听主机目录
- 11. 使用网络
- 外部访问容器
- 容器互联
- 配置 DNS
- 12. 高级网络配置
- 快速配置指南
- 容器访问控制
- 配置 docker0 网桥
- 自定义网桥
- 工具和示例
- 编辑网络配置文件
- 实例:创建一个点到点连接
- 映射容器端口到宿主主机的实现
- 13. Docker 三剑客之 Compose 项目
- 简介
- 安装与卸载
- 使用
- 命令说明
- Compose 模板文件
- 实战 Django
- 实战 Rails
- 实战 WordPress
- 14. Docker 三剑客之 Machine 项目
- 安装
- 使用
- 15. Docker 三剑客之 Docker Swarm
- 16. Swarm mode
- 基本概念
- 创建 Swarm 集群
- 部署服务
- 使用 compose 文件
- 管理敏感数据
- 管理配置信息
- 17. 安全
- 内核命名空间
- 控制组
- 服务端防护
- 内核能力机制
- 其它安全特性
- 总结
- 18. 底层实现
- 基本架构
- 命名空间
- 控制组
- 联合文件系统
- 容器格式
- 网络
- 19. Etcd 项目
- 简介
- 安装
- 集群
- 使用 etcdctl
- 使用 etcdctl v2
- 20. CoreOS 项目
- 简介
- 工具
- 快速搭建 CoreOS 集群
- 21. Kubernetes 项目
- 简介
- 快速上手
- 基本概念
- kubectl 使用
- 架构设计
- 22. Mesos - 优秀的集群资源调度平台
- Mesos 简介
- 安装与使用
- 原理与架构
- Mesos 配置项解析
- 日志与监控
- 常见应用框架
- 本章小结
- 23. 容器与云计算
- 简介
- 亚马逊云
- 腾讯云
- 阿里云
- 小结
- 24. 实战案例-操作系统
- Busybox
- Alpine
- Debian Ubuntu
- CentOS Fedora
- 本章小结
- 25. 实战案例-CI-CD
- Drone
- 26. Docker 开源项目
- LinuxKit
- 27. 附录
- 附录一:常见问题总结
- 附录二:热门镜像介绍
- Ubuntu
- CentOS
- MySQL
- MongoDB
- Redis
- Nginx
- WordPress
- Node.js
- 附录三:Docker 命令查询
- 附录四:Dockerfile 最佳实践
- 附录五:资源链接
- 附录六:Docker 中文资源