GitBook: No commit message

This commit is contained in:
yeasy
2025-12-17 10:37:56 +00:00
committed by gitbook-bot
parent 61a71f3c25
commit 5c3841dc98
57 changed files with 138 additions and 145 deletions

BIN
.gitbook/assets/ECS.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 445 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 704 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

BIN
.gitbook/assets/docker.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 660 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 291 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 217 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
.gitbook/assets/network.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB

View File

@@ -1,6 +1,6 @@
# 高级网络配置 # 高级网络配置
>注意本章属于 `Docker` 高级配置如果您是初学者您可以暂时跳过本章节直接学习 [Docker Compose](../compose) 一节 > 注意本章属于 `Docker` 高级配置如果您是初学者您可以暂时跳过本章节直接学习 [Docker Compose](../compose/) 一节
本章将介绍 Docker 的一些高级网络配置和选项 本章将介绍 Docker 的一些高级网络配置和选项
@@ -10,6 +10,6 @@
当创建一个 Docker 容器的时候同时会创建了一对 `veth pair` 接口当数据包发送到一个接口时另外一个接口也可以收到相同的数据包这对接口一端在容器内 `eth0`另一端在本地并被挂载到 `docker0` 网桥名称以 `veth` 开头例如 `vethAQI2QT`通过这种方式主机可以跟容器通信容器之间也可以相互通信Docker 就创建了在主机和所有容器之间一个虚拟共享网络 当创建一个 Docker 容器的时候同时会创建了一对 `veth pair` 接口当数据包发送到一个接口时另外一个接口也可以收到相同的数据包这对接口一端在容器内 `eth0`另一端在本地并被挂载到 `docker0` 网桥名称以 `veth` 开头例如 `vethAQI2QT`通过这种方式主机可以跟容器通信容器之间也可以相互通信Docker 就创建了在主机和所有容器之间一个虚拟共享网络
![Docker 网络](./_images/network.png) ![Docker 网络](../.gitbook/assets/network.png)
接下来的部分将介绍在一些场景中Docker 所有的网络定制配置以及通过 Linux 命令来调整补充甚至替换 Docker 默认的网络配置 接下来的部分将介绍在一些场景中Docker 所有的网络定制配置以及通过 Linux 命令来调整补充甚至替换 Docker 默认的网络配置

View File

@@ -1,4 +1,4 @@
# 客户端命令(docker) # 客户端命令 - docker
## 客户端命令选项 ## 客户端命令选项
@@ -63,7 +63,8 @@
* `wait`阻塞直到一个容器终止然后输出它的退出符 * `wait`阻塞直到一个容器终止然后输出它的退出符
## 一张图总结 Docker 的命令 ## 一张图总结 Docker 的命令
![Docker 命令总结](../_images/cmd_logic.png)
![Docker 命令总结](../../.gitbook/assets/cmd_logic.png)
## 参考 ## 参考

View File

@@ -1,4 +1,4 @@
# 常见问题总结 # 附录一常见问题总结
## 镜像相关 ## 镜像相关
@@ -19,20 +19,15 @@
整体原则上尽量保持镜像功能的明确和内容的精简要点包括 整体原则上尽量保持镜像功能的明确和内容的精简要点包括
* 尽量选取满足需求但较小的基础系统镜像例如大部分时候可以选择 `alpine` 镜像仅有不足六兆大小 * 尽量选取满足需求但较小的基础系统镜像例如大部分时候可以选择 `alpine` 镜像仅有不足六兆大小
* 清理编译生成文件安装包的缓存等临时文件 * 清理编译生成文件安装包的缓存等临时文件
* 安装各个软件时候要指定准确的版本号并避免引入不需要的依赖 * 安装各个软件时候要指定准确的版本号并避免引入不需要的依赖
* 从安全角度考虑应用要尽量使用系统的库和依赖 * 从安全角度考虑应用要尽量使用系统的库和依赖
* 如果安装应用时候需要配置一些特殊的环境变量在安装后要还原不需要保持的变量值 * 如果安装应用时候需要配置一些特殊的环境变量在安装后要还原不需要保持的变量值
* 使用 Dockerfile 创建镜像时候要添加 .dockerignore 文件或使用干净的工作目录 * 使用 Dockerfile 创建镜像时候要添加 .dockerignore 文件或使用干净的工作目录
更多内容请查看 [Dockerfile 最佳实践](../best_practices.md) 更多内容请查看 [Dockerfile 最佳实践](../best_practices.md)
### 碰到网络问题无法 pull 镜像命令行指定 http_proxy 无效 ### 碰到网络问题无法 pull 镜像命令行指定 http\_proxy 无效
Docker 配置文件中添加 `export http_proxy="http://<PROXY_HOST>:<PROXY_PORT>"`之后重启 Docker 服务即可 Docker 配置文件中添加 `export http_proxy="http://<PROXY_HOST>:<PROXY_PORT>"`之后重启 Docker 服务即可
@@ -61,6 +56,7 @@ docker inspect --format '{{ .State.Pid }}' <CONTAINER ID or NAME>
### 如何获取某个容器的 IP 地址 ### 如何获取某个容器的 IP 地址
可以使用 可以使用
```bash ```bash
docker inspect --format '{{ .NetworkSettings.IPAddress }}' <CONTAINER ID or NAME> docker inspect --format '{{ .NetworkSettings.IPAddress }}' <CONTAINER ID or NAME>
``` ```
@@ -84,16 +80,15 @@ $ docker run --network=my-net --ip=172.25.3.3 -itd --name=my-container busybox
* 创建镜像时 `Dockerfile` 要通过 `EXPOSE` 指定正确的开放端口 * 创建镜像时 `Dockerfile` 要通过 `EXPOSE` 指定正确的开放端口
* 容器启动时指定 `PublishAllPort = true` * 容器启动时指定 `PublishAllPort = true`
### 可以在一个容器中同时运行多个应用进程么 ### 可以在一个容器中同时运行多个应用进程么
一般并不推荐在同一个容器内运行多个应用进程如果有类似需求可以通过一些额外的进程管理机制比如 `supervisord` 来管理所运行的进程可以参考 https://docs.docker.com/config/containers/multi-service_container/ 。 一般并不推荐在同一个容器内运行多个应用进程如果有类似需求可以通过一些额外的进程管理机制比如 `supervisord` 来管理所运行的进程可以参考 https://docs.docker.com/config/containers/multi-service\_container/ 。
### 如何控制容器占用系统资源CPU内存的份额 ### 如何控制容器占用系统资源CPU内存的份额
在使用 `docker create` 命令创建容器或使用 `docker run` 创建并启动容器的时候可以使用 -c|--cpu-shares[=0] 参数来调整容器使用 CPU 的权重使用 -m|--memory[=MEMORY] 参数来调整容器使用内存的大小 在使用 `docker create` 命令创建容器或使用 `docker run` 创建并启动容器的时候可以使用 -c|--cpu-shares\[=0] 参数来调整容器使用 CPU 的权重使用 -m|--memory\[=MEMORY] 参数来调整容器使用内存的大小
## 仓库相关 ## 仓库相关
@@ -109,14 +104,13 @@ $ docker run --network=my-net --ip=172.25.3.3 -itd --name=my-container busybox
使用 `systemd` 的系统 Ubuntu 16.04Centos 的配置文件在 `/etc/docker/daemon.json` 使用 `systemd` 的系统 Ubuntu 16.04Centos 的配置文件在 `/etc/docker/daemon.json`
### 如何更改 Docker 的默认存储位置 ### 如何更改 Docker 的默认存储位置
Docker 的默认存储位置是 `/var/lib/docker`如果希望将 Docker 的本地文件存储到其他分区可以使用 Linux 软连接的方式来完成或者在启动 daemon 时通过 `-g` 参数指定或者修改配置文件 `/etc/docker/daemon.json` "data-root" 可以使用 `docker system info | grep "Root Dir"` 查看当前使用的存储位置 Docker 的默认存储位置是 `/var/lib/docker`如果希望将 Docker 的本地文件存储到其他分区可以使用 Linux 软连接的方式来完成或者在启动 daemon 时通过 `-g` 参数指定或者修改配置文件 `/etc/docker/daemon.json` "data-root" 可以使用 `docker system info | grep "Root Dir"` 查看当前使用的存储位置
例如如下操作将默认存储位置迁移到 /storage/docker 例如如下操作将默认存储位置迁移到 /storage/docker
```sh ```
[root@s26 ~]# df -h [root@s26 ~]# df -h
Filesystem Size Used Avail Use% Mounted on Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root 50G 5.3G 42G 12% / /dev/mapper/VolGroup-lv_root 50G 5.3G 42G 12% /
@@ -138,9 +132,7 @@ lrwxrwxrwx. 1 root root 15 11月 17 13:43 docker -> /storage/docker
这是因为系统默认没有开启对内存和 swap 使用的统计功能引入该功能会带来性能的下降要开启该功能可以采取如下操作 这是因为系统默认没有开启对内存和 swap 使用的统计功能引入该功能会带来性能的下降要开启该功能可以采取如下操作
* 编辑 `/etc/default/grub` 文件Ubuntu 系统为例配置 `GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"` * 编辑 `/etc/default/grub` 文件Ubuntu 系统为例配置 `GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"`
* 更新 grub`$ sudo update-grub` * 更新 grub`$ sudo update-grub`
* 重启系统即可 * 重启系统即可
## Docker 与虚拟化 ## Docker 与虚拟化
@@ -148,6 +140,7 @@ lrwxrwxrwx. 1 root root 15 11月 17 13:43 docker -> /storage/docker
### Docker LXCLinux Container有何不同 ### Docker LXCLinux Container有何不同
LXC 利用 Linux 上相关技术实现了容器Docker 则在如下的几个方面进行了改进 LXC 利用 Linux 上相关技术实现了容器Docker 则在如下的几个方面进行了改进
* 移植性通过抽象容器配置容器可以实现从一个平台移植到另一个平台 * 移植性通过抽象容器配置容器可以实现从一个平台移植到另一个平台
* 镜像系统基于 OverlayFS 的镜像系统为容器的分发带来了很多的便利同时共同的镜像层只需要存储一份实现高效率的存储 * 镜像系统基于 OverlayFS 的镜像系统为容器的分发带来了很多的便利同时共同的镜像层只需要存储一份实现高效率的存储
* 版本管理类似于Git的版本管理理念用户可以更方便的创建管理镜像文件 * 版本管理类似于Git的版本管理理念用户可以更方便的创建管理镜像文件
@@ -159,7 +152,6 @@ lrwxrwxrwx. 1 root root 15 11月 17 13:43 docker -> /storage/docker
两者的定位完全不同 两者的定位完全不同
* Vagrant 类似 Boot2Docker一款运行 Docker 的最小内核是一套虚拟机的管理环境Vagrant 可以在多种系统上和虚拟机软件中运行可以在 WindowsMac 等非 Linux 平台上为 Docker 提供支持自身具有较好的包装性和移植性 * Vagrant 类似 Boot2Docker一款运行 Docker 的最小内核是一套虚拟机的管理环境Vagrant 可以在多种系统上和虚拟机软件中运行可以在 WindowsMac 等非 Linux 平台上为 Docker 提供支持自身具有较好的包装性和移植性
* 原生的 Docker 自身只能运行在 Linux 平台上但启动和运行的性能都比虚拟机要快往往更适合快速开发和部署应用的场景 * 原生的 Docker 自身只能运行在 Linux 平台上但启动和运行的性能都比虚拟机要快往往更适合快速开发和部署应用的场景
简单说Vagrant 适合用来管理虚拟机 Docker 适合用来管理应用环境 简单说Vagrant 适合用来管理虚拟机 Docker 适合用来管理应用环境

View File

@@ -86,11 +86,11 @@ $ git push origin master
打开我们部署好的 `Drone` 网站或者 Drone Cloud即可看到构建结果 打开我们部署好的 `Drone` 网站或者 Drone Cloud即可看到构建结果
![](./_images/drone-build.png) ![](../../../.gitbook/assets/drone-build.png)
当然我们也可以把构建结果上传到 GitHubDocker Registry云服务商提供的对象存储或者生产环境中 当然我们也可以把构建结果上传到 GitHubDocker Registry云服务商提供的对象存储或者生产环境中
本书 GitBook 也使用 Drone 进行 CI/CD具体配置信息请查看本书根目录 [`.drone.yml`](https://github.com/yeasy/docker_practice/blob/master/.drone.yml) 文件 本书 GitBook 也使用 Drone 进行 CI/CD具体配置信息请查看本书根目录 [`.drone.yml`](../../../.drone.yml) 文件
## 参考链接 ## 参考链接

View File

@@ -2,7 +2,7 @@
## 简介 ## 简介
![Alpine Linux 操作系统](./_images/alpinelinux-logo.png) ![Alpine Linux 操作系统](../../.gitbook/assets/alpinelinux-logo.png)
`Alpine` 操作系统是一个面向安全的轻型 `Linux` 发行版它不同于通常 `Linux` 发行版`Alpine` 采用了 `musl libc` `busybox` 以减小系统的体积和运行时资源消耗但功能上比 `busybox` 又完善的多因此得到开源社区越来越多的青睐在保持瘦身的同时`Alpine` 还提供了自己的包管理工具 `apk`可以通过 `https://pkgs.alpinelinux.org/packages` 网站上查询包信息也可以直接通过 `apk` 命令直接查询和安装各种软件 `Alpine` 操作系统是一个面向安全的轻型 `Linux` 发行版它不同于通常 `Linux` 发行版`Alpine` 采用了 `musl libc` `busybox` 以减小系统的体积和运行时资源消耗但功能上比 `busybox` 又完善的多因此得到开源社区越来越多的青睐在保持瘦身的同时`Alpine` 还提供了自己的包管理工具 `apk`可以通过 `https://pkgs.alpinelinux.org/packages` 网站上查询包信息也可以直接通过 `apk` 命令直接查询和安装各种软件
@@ -65,5 +65,5 @@ RUN sed -i "s/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g" /etc/apk/repositories
* `Alpine` 官网https://www.alpinelinux.org/ * `Alpine` 官网https://www.alpinelinux.org/
* `Alpine` 官方仓库https://github.com/alpinelinux * `Alpine` 官方仓库https://github.com/alpinelinux
* `Alpine` 官方镜像https://hub.docker.com/_/alpine/ * `Alpine` 官方镜像https://hub.docker.com/\_/alpine/
* `Alpine` 官方镜像仓库https://github.com/gliderlabs/docker-alpine * `Alpine` 官方镜像仓库https://github.com/gliderlabs/docker-alpine

View File

@@ -2,7 +2,7 @@
## 简介 ## 简介
![Busybox - Linux 瑞士军刀](./_images/busybox-logo.png) ![Busybox - Linux 瑞士军刀](../../.gitbook/assets/busybox-logo.png)
`BusyBox` 是一个集成了一百多个最常用 Linux 命令和工具 `cat``echo``grep``mount``telnet` 的精简工具箱它只需要几 MB 的大小很方便进行各种快速验证被誉为Linux 系统的瑞士军刀 `BusyBox` 是一个集成了一百多个最常用 Linux 命令和工具 `cat``echo``grep``mount``telnet` 的精简工具箱它只需要几 MB 的大小很方便进行各种快速验证被誉为Linux 系统的瑞士军刀
@@ -111,5 +111,5 @@ 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

View File

@@ -1,10 +1,10 @@
# CentOS/Fedora # CentOS Fedora
## CentOS 系统简介 ## CentOS 系统简介
`CentOS` `Fedora` 都是基于 `Redhat` 的常见 Linux 分支`CentOS` 是目前企业级服务器的常用操作系统`Fedora` 则主要面向个人桌面用户 `CentOS` `Fedora` 都是基于 `Redhat` 的常见 Linux 分支`CentOS` 是目前企业级服务器的常用操作系统`Fedora` 则主要面向个人桌面用户
![CentOS 操作系统](./_images/centos-logo.png) ![CentOS 操作系统](../../.gitbook/assets/centos-logo.png)
CentOSCommunity Enterprise Operating System中文意思是社区企业操作系统它是基于 `Red Hat Enterprise Linux` 源代码编译而成由于 `CentOS` `Redhat Linux` 源于相同的代码基础所以很多成本敏感且需要高稳定性的公司就使用 `CentOS` 来替代商业版 `Red Hat Enterprise Linux``CentOS` 自身不包含闭源软件 CentOSCommunity Enterprise Operating System中文意思是社区企业操作系统它是基于 `Red Hat Enterprise Linux` 源代码编译而成由于 `CentOS` `Redhat Linux` 源于相同的代码基础所以很多成本敏感且需要高稳定性的公司就使用 `CentOS` 来替代商业版 `Red Hat Enterprise Linux``CentOS` 自身不包含闭源软件
@@ -25,7 +25,7 @@ CentOS Linux release 7.9.2009 (Core)
## Fedora 系统简介 ## Fedora 系统简介
![Fedora 操作系统](./_images/fedora-logo.png) ![Fedora 操作系统](../../.gitbook/assets/fedora-logo.png)
`Fedora` `Fedora Project` 社区开发红帽公司赞助的 `Linux` 发行版它的目标是创建一套新颖多功能并且自由和开源的操作系统`Fedora` 的功能对于用户而言它是一套功能完备的可以更新的免费操作系统而对赞助商 `Red Hat` 而言它是许多新技术的测试平台被认为可用的技术最终会加入到 `Red Hat Enterprise Linux` `Fedora` `Fedora Project` 社区开发红帽公司赞助的 `Linux` 发行版它的目标是创建一套新颖多功能并且自由和开源的操作系统`Fedora` 的功能对于用户而言它是一套功能完备的可以更新的免费操作系统而对赞助商 `Red Hat` 而言它是许多新技术的测试平台被认为可用的技术最终会加入到 `Red Hat Enterprise Linux`
@@ -48,9 +48,9 @@ Fedora release 24 (Twenty Four)
* `Fedora` 官网https://getfedora.org/ * `Fedora` 官网https://getfedora.org/
* `Fedora` 官方仓库https://github.com/fedora-infra * `Fedora` 官方仓库https://github.com/fedora-infra
* `Fedora` 官方镜像https://hub.docker.com/_/fedora/ * `Fedora` 官方镜像https://hub.docker.com/\_/fedora/
* `Fedora` 官方镜像仓库https://github.com/fedora-cloud/docker-brew-fedora * `Fedora` 官方镜像仓库https://github.com/fedora-cloud/docker-brew-fedora
* `CentOS` 官网https://www.centos.org * `CentOS` 官网https://www.centos.org
* `CentOS` 官方仓库https://github.com/CentOS * `CentOS` 官方仓库https://github.com/CentOS
* `CentOS` 官方镜像https://hub.docker.com/_/centos/ * `CentOS` 官方镜像https://hub.docker.com/\_/centos/
* `CentOS` 官方镜像仓库https://github.com/CentOS/CentOS-Dockerfiles * `CentOS` 官方镜像仓库https://github.com/CentOS/CentOS-Dockerfiles

View File

@@ -1,10 +1,10 @@
# Debian/Ubuntu # Debian Ubuntu
`Debian` `Ubuntu` 都是目前较为流行的 **Debian ** 的服务器操作系统十分适合研发场景`Docker Hub` 上提供了官方镜像国内各大容器云服务也基本都提供了相应的支持 `Debian` `Ubuntu` 都是目前较为流行的 **Debian ** 的服务器操作系统十分适合研发场景`Docker Hub` 上提供了官方镜像国内各大容器云服务也基本都提供了相应的支持
## Debian 系统简介 ## Debian 系统简介
![Debian 操作系统](./_images/debian-logo.png) ![Debian 操作系统](../../.gitbook/assets/debian-logo.png)
`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` 个计算机系统结构
@@ -26,7 +26,7 @@ Debian GNU/Linux 8
## Ubuntu 系统简介 ## Ubuntu 系统简介
![Ubuntu 操作系统](./_images/ubuntu-logo.jpg) ![Ubuntu 操作系统](../../.gitbook/assets/ubuntu-logo.jpg)
`Ubuntu` 是一个以桌面应用为主的 `GNU/Linux` 操作系统其名称来自非洲南部祖鲁语或豪萨语的ubuntu一词官方译名友帮拓另有吾帮托乌班图有奔头乌斑兔等译名`Ubuntu` 意思是人性以及我的存在是因为大家的存在是非洲传统的一种价值观类似华人社会的仁爱思想 `Ubuntu` 基于 `Debian` 发行版和 `GNOME/Unity` 桌面环境 `Debian` 的不同在于它每 6 个月会发布一个新版本 2 年推出一个长期支持 **Long Term SupportLTS** 版本一般支持 3 年时间 `Ubuntu` 是一个以桌面应用为主的 `GNU/Linux` 操作系统其名称来自非洲南部祖鲁语或豪萨语的ubuntu一词官方译名友帮拓另有吾帮托乌班图有奔头乌斑兔等译名`Ubuntu` 意思是人性以及我的存在是因为大家的存在是非洲传统的一种价值观类似华人社会的仁爱思想 `Ubuntu` 基于 `Debian` 发行版和 `GNOME/Unity` 桌面环境 `Debian` 的不同在于它每 6 个月会发布一个新版本 2 年推出一个长期支持 **Long Term SupportLTS** 版本一般支持 3 年时间
@@ -145,9 +145,9 @@ root@7d93de07bf76:/# curl 127.0.0.1
* `Debian` 官网https://www.debian.org/ * `Debian` 官网https://www.debian.org/
* `Neuro Debian` 官网http://neuro.debian.net/ * `Neuro Debian` 官网http://neuro.debian.net/
* `Debian` 官方仓库https://github.com/Debian * `Debian` 官方仓库https://github.com/Debian
* `Debian` 官方镜像https://hub.docker.com/_/debian/ * `Debian` 官方镜像https://hub.docker.com/\_/debian/
* `Debian` 官方镜像仓库https://github.com/tianon/docker-brew-debian/ * `Debian` 官方镜像仓库https://github.com/tianon/docker-brew-debian/
* `Ubuntu` 官网https://ubuntu.com * `Ubuntu` 官网https://ubuntu.com
* `Ubuntu` 官方仓库https://github.com/ubuntu * `Ubuntu` 官方仓库https://github.com/ubuntu
* `Ubuntu` 官方镜像https://hub.docker.com/_/ubuntu/ * `Ubuntu` 官方镜像https://hub.docker.com/\_/ubuntu/
* `Ubuntu` 官方镜像仓库https://github.com/tianon/docker-brew-ubuntu-core * `Ubuntu` 官方镜像仓库https://github.com/tianon/docker-brew-ubuntu-core

View File

@@ -1,11 +1,11 @@
# 阿里云 # 阿里云
![阿里云](./_images/aliyun-logo.png) ![阿里云](../.gitbook/assets/aliyun-logo.png)
[阿里云](https://www.aliyun.com?source=5176.11533457&userCode=8lx5zmtu&type=copy) 创立于 2009 年,是中国较早的云计算平台。阿里云致力于提供安全、可靠的计算和数据处理能力。 [阿里云](https://www.aliyun.com/?source=5176.11533457\&userCode=8lx5zmtu\&type=copy) 创立于 2009 年,是中国较早的云计算平台。阿里云致力于提供安全、可靠的计算和数据处理能力。
[阿里云](https://www.aliyun.com?source=5176.11533457&userCode=8lx5zmtu&type=copy) 的客户群体中,活跃着微博、虎牙、魅族、优酷等一大批明星互联网公司。在天猫双 11 全球狂欢节等极富挑战的应用场景中,阿里云保持着良好的运行纪录。 [阿里云](https://www.aliyun.com/?source=5176.11533457\&userCode=8lx5zmtu\&type=copy) 的客户群体中,活跃着微博、虎牙、魅族、优酷等一大批明星互联网公司。在天猫双 11 全球狂欢节等极富挑战的应用场景中,阿里云保持着良好的运行纪录。
[阿里云容器服务 Kubernetes ACK](https://www.aliyun.com/product/kubernetes?source=5176.11533457&userCode=8lx5zmtu&type=copy) 提供了高性能、可伸缩的容器应用管理服务,支持在一组云服务器上通过 Docker 容器来进行应用生命周期管理。容器服务极大简化了用户对容器管理集群的搭建工作,无缝整合了阿里云虚拟化、存储、网络和安全能力。容器服务提供了多种应用发布方式和流水线般的持续交付能力,原生支持微服务架构,助力用户无缝上云和跨云管理。 [阿里云容器服务 Kubernetes ACK](https://www.aliyun.com/product/kubernetes?source=5176.11533457\&userCode=8lx5zmtu\&type=copy) 提供了高性能、可伸缩的容器应用管理服务,支持在一组云服务器上通过 Docker 容器来进行应用生命周期管理。容器服务极大简化了用户对容器管理集群的搭建工作,无缝整合了阿里云虚拟化、存储、网络和安全能力。容器服务提供了多种应用发布方式和流水线般的持续交付能力,原生支持微服务架构,助力用户无缝上云和跨云管理。
![](https://img.alicdn.com/tps/TB10yjtPpXXXXacXXXXXXXXXXXX-1531-1140.png) ![](https://img.alicdn.com/tps/TB10yjtPpXXXXacXXXXXXXXXXXX-1531-1140.png)

View File

@@ -1,6 +1,6 @@
# 亚马逊云 # 亚马逊云
![AWS](./_images/aws-logo.jpg) ![AWS](../.gitbook/assets/aws-logo.jpg)
[AWS](https://www.amazonaws.cn),即 Amazon Web Services是亚马逊Amazon公司的 IaaS 和 PaaS 平台服务。AWS 提供了一整套基础设施和应用程序服务使用户几乎能够在云中运行一切应用程序从企业应用程序和大数据项目到社交游戏和移动应用程序。AWS 面向用户提供包括弹性计算、存储、数据库、应用程序在内的一整套云计算服务,能够帮助企业降低 IT 投入成本和维护成本。 [AWS](https://www.amazonaws.cn),即 Amazon Web Services是亚马逊Amazon公司的 IaaS 和 PaaS 平台服务。AWS 提供了一整套基础设施和应用程序服务使用户几乎能够在云中运行一切应用程序从企业应用程序和大数据项目到社交游戏和移动应用程序。AWS 面向用户提供包括弹性计算、存储、数据库、应用程序在内的一整套云计算服务,能够帮助企业降低 IT 投入成本和维护成本。
@@ -8,4 +8,4 @@
2015 AWS 正式发布了 EC2 容器服务(ECS)ECS 的目的是让 Docker 容器变的更加简单它提供了一个集群和编排的层用来控制主机上的容器部署以及部署之后的集群内的容器的生命周期管理ECS 是诸如 Docker SwarmKubernetesMesos 等工具的替代它们工作在同一个层除了作为一个服务来提供这些工具和 ECS 不同的地方在于前者需要用户自己来部署和管理 ECS 作为服务来提供的 2015 AWS 正式发布了 EC2 容器服务(ECS)ECS 的目的是让 Docker 容器变的更加简单它提供了一个集群和编排的层用来控制主机上的容器部署以及部署之后的集群内的容器的生命周期管理ECS 是诸如 Docker SwarmKubernetesMesos 等工具的替代它们工作在同一个层除了作为一个服务来提供这些工具和 ECS 不同的地方在于前者需要用户自己来部署和管理 ECS 作为服务来提供的
![AWS 容器服务](./_images/ECS.jpg) ![AWS 容器服务](../.gitbook/assets/ECS.jpg)

View File

@@ -1,11 +1,11 @@
# 腾讯云 # 腾讯云
![腾讯云](./_images/qcloud-logo.jpg) ![腾讯云](../.gitbook/assets/qcloud-logo.jpg)
[腾讯云](https://cloud.tencent.com/act/cps/redirect?redirect=1040&cps_key=3a5255852d5db99dcd5da4c72f05df61&from=console) 在架构方面经过多年积累,并且有着多年对海量互联网服务的经验。不管是社交、游戏还是其他领域,都有多年的成熟产品来提供产品服务。腾讯在云端完成重要部署,为开发者及企业提供云服务、云数据、云运营等整体一站式服务方案。 [腾讯云](https://cloud.tencent.com/act/cps/redirect?redirect=1040\&cps_key=3a5255852d5db99dcd5da4c72f05df61\&from=console) 在架构方面经过多年积累,并且有着多年对海量互联网服务的经验。不管是社交、游戏还是其他领域,都有多年的成熟产品来提供产品服务。腾讯在云端完成重要部署,为开发者及企业提供云服务、云数据、云运营等整体一站式服务方案。
具体包括 [云服务器](https://cloud.tencent.com/act/cps/redirect?redirect=1001&cps_key=3a5255852d5db99dcd5da4c72f05df61&from=console)、[云存储](https://cloud.tencent.com/act/cps/redirect?redirect=1020&cps_key=3a5255852d5db99dcd5da4c72f05df61&from=console)、[云数据库](https://cloud.tencent.com/act/cps/redirect?redirect=1003&cps_key=3a5255852d5db99dcd5da4c72f05df61&from=console)、[视频与CDN](https://cloud.tencent.com/act/cps/redirect?redirect=1019&cps_key=3a5255852d5db99dcd5da4c72f05df61&from=console) 和 [域名注册](https://dnspod.cloud.tencent.com) 等基础云服务腾讯云分析MTA、腾讯云推送信鸽等腾讯整体大数据能力以及 QQ互联、QQ 空间、微云、微社区等云端链接社交体系。这些正是腾讯云可以提供给这个行业的差异化优势,造就了可支持各种互联网使用场景的高品质的腾讯云技术平台。 具体包括 [云服务器](https://cloud.tencent.com/act/cps/redirect?redirect=1001\&cps_key=3a5255852d5db99dcd5da4c72f05df61\&from=console)、[云存储](https://cloud.tencent.com/act/cps/redirect?redirect=1020\&cps_key=3a5255852d5db99dcd5da4c72f05df61\&from=console)、[云数据库](https://cloud.tencent.com/act/cps/redirect?redirect=1003\&cps_key=3a5255852d5db99dcd5da4c72f05df61\&from=console)、[视频与CDN](https://cloud.tencent.com/act/cps/redirect?redirect=1019\&cps_key=3a5255852d5db99dcd5da4c72f05df61\&from=console) 和 [域名注册](https://dnspod.cloud.tencent.com) 等基础云服务腾讯云分析MTA、腾讯云推送信鸽等腾讯整体大数据能力以及 QQ互联、QQ 空间、微云、微社区等云端链接社交体系。这些正是腾讯云可以提供给这个行业的差异化优势,造就了可支持各种互联网使用场景的高品质的腾讯云技术平台。
[腾讯云容器服务 TKE](https://cloud.tencent.com/act/cps/redirect?redirect=10058&cps_key=3a5255852d5db99dcd5da4c72f05df61) 是高度可扩展的高性能容器管理服务,用户可以在托管的云服务器实例集群上轻松运行应用程序。使用该服务,将无需安装、运维、扩展用户的集群管理基础设施,只需进行简单的 API 调用,便可启动和停止 Docker 应用程序,查询集群的完整状态,以及使用各种云服务。用户可以根据用户的资源需求和可用性要求在用户的集群中安排容器的置放,满足业务或应用程序的特定要求。 [腾讯云容器服务 TKE](https://cloud.tencent.com/act/cps/redirect?redirect=10058\&cps_key=3a5255852d5db99dcd5da4c72f05df61) 是高度可扩展的高性能容器管理服务,用户可以在托管的云服务器实例集群上轻松运行应用程序。使用该服务,将无需安装、运维、扩展用户的集群管理基础设施,只需进行简单的 API 调用,便可启动和停止 Docker 应用程序,查询集群的完整状态,以及使用各种云服务。用户可以根据用户的资源需求和可用性要求在用户的集群中安排容器的置放,满足业务或应用程序的特定要求。
![](https://mc.qcloudimg.com/static/img/0581dbeb97c869bbe6e62025dbc592d7/image.png) ![](https://mc.qcloudimg.com/static/img/0581dbeb97c869bbe6e62025dbc592d7/image.png)

View File

@@ -1,9 +1,8 @@
# Docker 数据管理 # 数据管理
![](./_images/types-of-mounts.png) ![](../.gitbook/assets/types-of-mounts.png)
这一章介绍如何在 Docker 内部以及容器之间管理数据在容器中管理数据主要有两种方式 这一章介绍如何在 Docker 内部以及容器之间管理数据在容器中管理数据主要有两种方式
* 数据卷Volumes * 数据卷Volumes
* 挂载主机目录 (Bind mounts) * 挂载主机目录 (Bind mounts)

View File

@@ -1,6 +1,6 @@
# 什么是 etcd # 简介
![](./_images/etcd_logo.png) ![](../.gitbook/assets/etcd_logo.png)
`etcd` `CoreOS` 团队于 2013 6 月发起的开源项目它的目标是构建一个高可用的分布式键值`key-value`数据库基于 `Go` 语言实现我们知道在分布式系统中各种服务的配置信息的管理分享服务的发现是一个很基本同时也是很重要的问题`CoreOS` 项目就希望基于 `etcd` 来解决这一问题 `etcd` `CoreOS` 团队于 2013 6 月发起的开源项目它的目标是构建一个高可用的分布式键值`key-value`数据库基于 `Go` 语言实现我们知道在分布式系统中各种服务的配置信息的管理分享服务的发现是一个很基本同时也是很重要的问题`CoreOS` 项目就希望基于 `etcd` 来解决这一问题
@@ -9,17 +9,14 @@
受到 [Apache ZooKeeper](https://zookeeper.apache.org/) 项目和 [doozer](https://github.com/ha/doozerd) 项目的启发,`etcd` 在设计的时候重点考虑了下面四个要素: 受到 [Apache ZooKeeper](https://zookeeper.apache.org/) 项目和 [doozer](https://github.com/ha/doozerd) 项目的启发,`etcd` 在设计的时候重点考虑了下面四个要素:
* 简单具有定义良好面向用户的 `API` ([gRPC](https://github.com/grpc/grpc)) * 简单具有定义良好面向用户的 `API` ([gRPC](https://github.com/grpc/grpc))
* 安全支持 `HTTPS` 方式的访问 * 安全支持 `HTTPS` 方式的访问
* 快速支持并发 `10 k/s` 的写操作 * 快速支持并发 `10 k/s` 的写操作
* 可靠支持分布式结构基于 `Raft` 的一致性算法 * 可靠支持分布式结构基于 `Raft` 的一致性算法
*Apache ZooKeeper 是一套知名的分布式系统中进行同步和一致性管理的工具* _Apache ZooKeeper 是一套知名的分布式系统中进行同步和一致性管理的工具_
*doozer 是一个一致性分布式数据库* _doozer 是一个一致性分布式数据库_
*[Raft](https://raft.github.io/) 是一套通过选举主节点来实现分布式系统一致性的算法,相比于大名鼎鼎的 Paxos 算法,它的过程更容易被人理解,由 Stanford 大学的 Diego Ongaro 和 John Ousterhout 提出。更多细节可以参考 [raftconsensus.github.io](http://raftconsensus.github.io)。* [_Raft_](https://raft.github.io/) _是一套通过选举主节点来实现分布式系统一致性的算法,相比于大名鼎鼎的 Paxos 算法,它的过程更容易被人理解,由 Stanford 大学的 Diego Ongaro 和 John Ousterhout 提出。更多细节可以参考_ [_raftconsensus.github.io_](http://raftconsensus.github.io)_。_
一般情况下用户使用 `etcd` 可以在多个节点上启动多个实例并添加它们为一个集群同一个集群中的 `etcd` 实例将会保持彼此信息的一致性 一般情况下用户使用 `etcd` 可以在多个节点上启动多个实例并添加它们为一个集群同一个集群中的 `etcd` 实例将会保持彼此信息的一致性

View File

@@ -1,6 +1,6 @@
# 利用 commit 理解镜像构成 # 利用 commit 理解镜像构成
>注意如果您是初学者您可以暂时跳过后面的内容直接学习 [容器](../container) 一节 > 注意如果您是初学者您可以暂时跳过后面的内容直接学习 [容器](../container/) 一节
注意 `docker commit` 命令除了学习之外还有一些特殊的应用场合比如被入侵后保存现场等但是不要使用 `docker commit` 定制镜像定制镜像应该使用 `Dockerfile` 来完成如果你想要定制镜像请查看下一小节 注意 `docker commit` 命令除了学习之外还有一些特殊的应用场合比如被入侵后保存现场等但是不要使用 `docker commit` 定制镜像定制镜像应该使用 `Dockerfile` 来完成如果你想要定制镜像请查看下一小节
@@ -16,11 +16,11 @@ $ docker run --name webserver -d -p 80:80 nginx
这条命令会用 `nginx` 镜像启动一个容器命名为 `webserver`并且映射了 80 端口这样我们可以用浏览器去访问这个 `nginx` 服务器 这条命令会用 `nginx` 镜像启动一个容器命名为 `webserver`并且映射了 80 端口这样我们可以用浏览器去访问这个 `nginx` 服务器
如果是在本机运行的 Docker那么可以直接访问`http://localhost` 如果是在虚拟机云服务器上安装的 Docker则需要将 `localhost` 换为虚拟机地址或者实际云服务器地址 如果是在本机运行的 Docker那么可以直接访问`http://localhost` 如果是在虚拟机云服务器上安装的 Docker则需要将 `localhost` 换为虚拟机地址或者实际云服务器地址
直接用浏览器访问的话我们会看到默认的 Nginx 欢迎页面 直接用浏览器访问的话我们会看到默认的 Nginx 欢迎页面
![](./_images/images-mac-example-nginx.png) ![](../.gitbook/assets/images-mac-example-nginx.png)
现在假设我们非常不喜欢这个欢迎页面我们希望改成欢迎 Docker 的文字我们可以使用 `docker exec` 命令进入容器修改其内容 现在假设我们非常不喜欢这个欢迎页面我们希望改成欢迎 Docker 的文字我们可以使用 `docker exec` 命令进入容器修改其内容
@@ -37,7 +37,7 @@ exit
现在我们再刷新浏览器的话会发现内容被改变了 现在我们再刷新浏览器的话会发现内容被改变了
![](./_images/images-create-nginx-docker.png) ![](../.gitbook/assets/images-create-nginx-docker.png)
我们修改了容器的文件也就是改动了容器的存储层我们可以通过 `docker diff` 命令看到具体的改动 我们修改了容器的文件也就是改动了容器的存储层我们可以通过 `docker diff` 命令看到具体的改动

View File

@@ -1,4 +1,4 @@
# macOS 安装 Docker # macOS
## 系统要求 ## 系统要求
@@ -22,21 +22,21 @@ $ brew install --cask docker
如同 macOS 其它软件一样安装也非常简单双击下载的 `.dmg` 文件然后将那只叫 [Moby](https://www.docker.com/blog/call-me-moby-dock/) 的鲸鱼图标拖拽到 `Application` 文件夹即可(其间需要输入用户密码)。 如同 macOS 其它软件一样安装也非常简单双击下载的 `.dmg` 文件然后将那只叫 [Moby](https://www.docker.com/blog/call-me-moby-dock/) 的鲸鱼图标拖拽到 `Application` 文件夹即可(其间需要输入用户密码)。
![](./_images/install-mac-dmg.png) ![](../.gitbook/assets/install-mac-dmg.png)
## 运行 ## 运行
从应用中找到 Docker 图标并点击运行 从应用中找到 Docker 图标并点击运行
![](./_images/install-mac-apps.png) ![](../.gitbook/assets/install-mac-apps.png)
运行之后会在右上角菜单栏看到多了一个鲸鱼图标这个图标表明了 Docker 的运行状态 运行之后会在右上角菜单栏看到多了一个鲸鱼图标这个图标表明了 Docker 的运行状态
![](./_images/install-mac-menubar.png) ![](../.gitbook/assets/install-mac-menubar.png)
每次点击鲸鱼图标会弹出操作菜单 每次点击鲸鱼图标会弹出操作菜单
![](./_images/install-mac-menu.png) ![](../.gitbook/assets/install-mac-menu.png)
之后你可以在终端通过命令检查安装后的 Docker 版本 之后你可以在终端通过命令检查安装后的 Docker 版本
@@ -51,9 +51,9 @@ Docker version 20.10.0, build 7287ab3
$ docker run -d -p 80:80 --name webserver nginx $ docker run -d -p 80:80 --name webserver nginx
``` ```
服务运行后可以访问 <http://localhost>,如果看到了 "Welcome to nginx!",就说明 Docker Desktop for Mac 安装成功了。 服务运行后可以访问 [http://localhost](http://localhost),如果看到了 "Welcome to nginx!",就说明 Docker Desktop for Mac 安装成功了。
![](./_images/install-mac-example-nginx.png) ![](../.gitbook/assets/install-mac-example-nginx.png)
要停止 Nginx 服务器并删除执行下面的命令 要停止 Nginx 服务器并删除执行下面的命令

View File

@@ -1,14 +1,12 @@
# 离线部署Docker # Linux 离线安装
[TOC] \[TOC]
生产环境中一般都是没有公网资源的本文介绍如何在生产服务器上离线部署`Docker` 生产环境中一般都是没有公网资源的本文介绍如何在生产服务器上离线部署`Docker`
括号内的字母表示该操作需要在哪些服务器上执行 括号内的字母表示该操作需要在哪些服务器上执行
<img src="_images/image-20200412202617411.png" alt="Docker-offile-install-top" style="zoom:30%;" /> ![Docker-offile-install-top](../.gitbook/assets/image-20200412202617411.png)
## Centos7 离线安装Docker ## Centos7 离线安装Docker
@@ -16,7 +14,7 @@
推荐这种方式是因为在生产环境种一般会选定某个指定的文档软件版本使用 推荐这种方式是因为在生产环境种一般会选定某个指定的文档软件版本使用
#### 查询可用的软件版本(A) #### 查询可用的软件版本(A)
```bash ```bash
#下载清华的镜像源文件 #下载清华的镜像源文件
@@ -77,28 +75,32 @@ Background downloading packages, then exiting:
Total 118 MB/s | 87 MB 00:00:00 Total 118 MB/s | 87 MB 00:00:00
exiting because "Download Only" specified exiting because "Download Only" specified
``` ```
#### 复制到目标服务器之后进入文件夹安装(C-N) #### 复制到目标服务器之后进入文件夹安装(C-N)
* 离线安装时必须使用rpm命令不检查依赖的方式安装 * 离线安装时必须使用rpm命令不检查依赖的方式安装
```bash ```bash
rpm -Uvh *.rpm --nodeps --force rpm -Uvh *.rpm --nodeps --force
``` ```
#### 锁定软件版本(C-N) #### 锁定软件版本(C-N)
##### 下载锁定版本软件 **下载锁定版本软件**
可参考下文的网络源搭建 可参考下文的网络源搭建
```bash ```bash
sudo yum install yum-plugin-versionlock sudo yum install yum-plugin-versionlock
``` ```
##### 锁定软件版本 **锁定软件版本**
```bash ```bash
sudo yum versionlock add docker sudo yum versionlock add docker
``` ```
##### 查看锁定列表 **查看锁定列表**
```bash ```bash
sudo yum versionlock list sudo yum versionlock list
@@ -110,7 +112,7 @@ Loaded plugins: fastestmirror, versionlock
versionlock list done versionlock list done
``` ```
##### 锁定后无法再更新 **锁定后无法再更新**
```bash ```bash
sudo yum install docker-ce sudo yum install docker-ce
@@ -121,7 +123,7 @@ Package 3:docker-ce-24.0.4-1.el7.x86_64 already installed and latest version
Nothing to do Nothing to do
``` ```
##### 解锁指定软件 **解锁指定软件**
```bash ```bash
sudo yum versionlock delete docker-ce sudo yum versionlock delete docker-ce
@@ -133,14 +135,12 @@ Deleting versionlock for: 3:docker-ce-24.0.4-1.el7.*
versionlock deleted: 1 versionlock deleted: 1
``` ```
##### 解锁所有软件 **解锁所有软件**
```bash ```bash
sudo yum versionlock delete all sudo yum versionlock delete all
``` ```
### YUM 本地源服务器搭建安装Docker ### YUM 本地源服务器搭建安装Docker
#### 挂载 ISO 镜像搭建本地 File AB #### 挂载 ISO 镜像搭建本地 File AB
@@ -170,8 +170,6 @@ yum clean all
yum install createrepo -y yum install createrepo -y
``` ```
#### 根据本地文件搭建BASE网络源B #### 根据本地文件搭建BASE网络源B
```bash ```bash
@@ -245,5 +243,3 @@ sudo yum makecache fast
sudo yum install docker-ce docker-ce-cli containerd.io sudo yum install docker-ce docker-ce-cli containerd.io
sudo systemctl enable docker sudo systemctl enable docker
``` ```

View File

@@ -1,4 +1,4 @@
# Windows 10 安装 Docker # Windows 10
## 系统要求 ## 系统要求
@@ -12,7 +12,7 @@
下载好之后双击 `Docker Desktop Installer.exe` 开始安装 下载好之后双击 `Docker Desktop Installer.exe` 开始安装
**使用 [winget](https://docs.microsoft.com/zh-cn/windows/package-manager/) 安装** **使用** [**winget**](https://docs.microsoft.com/zh-cn/windows/package-manager/) **安装**
```powershell ```powershell
$ winget install Docker.DockerDesktop $ winget install Docker.DockerDesktop
@@ -26,11 +26,11 @@ $ winget install Docker.DockerDesktop
Windows 搜索栏输入 **Docker** 点击 **Docker Desktop** 开始运行 Windows 搜索栏输入 **Docker** 点击 **Docker Desktop** 开始运行
![](./_images/install-win-docker-app-search.png) ![](../.gitbook/assets/install-win-docker-app-search.png)
Docker 启动之后会在 Windows 任务栏出现鲸鱼图标 Docker 启动之后会在 Windows 任务栏出现鲸鱼图标
![](./_images/install-win-taskbar-circle.png) ![](../.gitbook/assets/install-win-taskbar-circle.png)
等待片刻当鲸鱼图标静止时说明 Docker 启动成功之后你可以打开 PowerShell 使用 Docker 等待片刻当鲸鱼图标静止时说明 Docker 启动成功之后你可以打开 PowerShell 使用 Docker

View File

@@ -1,6 +1,6 @@
# 什么是 Docker # 什么是 Docker
**Docker** 最初是 `dotCloud` 公司创始人 [Solomon Hykes](https://github.com/shykes) 在法国期间发起的一个公司内部项目,它是基于 `dotCloud` 公司多年云服务技术的一次革新,并于 [2013 年 3 月以 Apache 2.0 授权协议开源][docker-soft],主要项目代码在 [GitHub](https://github.com/moby/moby) 上进行维护。`Docker` 项目后来还加入了 Linux 基金会,并成立推动 [开放容器联盟OCI](https://opencontainers.org/)。 **Docker** 最初是 `dotCloud` 公司创始人 [Solomon Hykes](https://github.com/shykes) 在法国期间发起的一个公司内部项目,它是基于 `dotCloud` 公司多年云服务技术的一次革新,并于 [2013 年 3 月以 Apache 2.0 授权协议开源](https://en.wikipedia.org/wiki/Docker_\(software\)),主要项目代码在 [GitHub](https://github.com/moby/moby) 上进行维护。`Docker` 项目后来还加入了 Linux 基金会,并成立推动 [开放容器联盟OCI](https://opencontainers.org/)。
**Docker** 自开源后受到广泛的关注和讨论至今其 [GitHub 项目](https://github.com/moby/moby) 已经超过 5 万 7 千个星标和一万多个 `fork`。甚至由于 `Docker` 项目的火爆,在 `2013` 年底,[dotCloud 公司决定改名为 Docker](https://www.docker.com/blog/dotcloud-is-becoming-docker-inc/)。`Docker` 最初是在 `Ubuntu 12.04` 上开发实现的;`Red Hat` 则从 `RHEL 6.5` 开始对 `Docker` 进行支持;`Google` 也在其 `PaaS` 产品中广泛应用 `Docker`。 **Docker** 自开源后受到广泛的关注和讨论至今其 [GitHub 项目](https://github.com/moby/moby) 已经超过 5 万 7 千个星标和一万多个 `fork`。甚至由于 `Docker` 项目的火爆,在 `2013` 年底,[dotCloud 公司决定改名为 Docker](https://www.docker.com/blog/dotcloud-is-becoming-docker-inc/)。`Docker` 最初是在 `Ubuntu 12.04` 上开发实现的;`Red Hat` 则从 `RHEL 6.5` 开始对 `Docker` 进行支持;`Google` 也在其 `PaaS` 产品中广泛应用 `Docker`。
@@ -16,8 +16,6 @@
下面的图片比较了 **Docker** 和传统虚拟化方式的不同之处传统虚拟机技术是虚拟出一套硬件后在其上运行一个完整操作系统在该系统上再运行所需应用进程而容器内的应用进程直接运行于宿主的内核容器内没有自己的内核而且也没有进行硬件虚拟因此容器要比传统虚拟机更为轻便 下面的图片比较了 **Docker** 和传统虚拟化方式的不同之处传统虚拟机技术是虚拟出一套硬件后在其上运行一个完整操作系统在该系统上再运行所需应用进程而容器内的应用进程直接运行于宿主的内核容器内没有自己的内核而且也没有进行硬件虚拟因此容器要比传统虚拟机更为轻便
![传统虚拟化](./_images/virtualization.png) ![传统虚拟化](../.gitbook/assets/virtualization.png)
![Docker](./_images/docker.png) ![Docker](../.gitbook/assets/docker.png)
[docker-soft]:https://en.wikipedia.org/wiki/Docker_(software)

View File

@@ -1,6 +1,6 @@
# 基本概念 # 基本概念
![](./_images/kubernetes_design.jpg) ![](../.gitbook/assets/kubernetes_design.jpg)
* 节点`Node`一个节点是一个运行 Kubernetes 中的主机 * 节点`Node`一个节点是一个运行 Kubernetes 中的主机
* 容器组`Pod`一个 Pod 对应于由若干容器组成的一个容器组同个组内的容器共享一个存储卷(volume) * 容器组`Pod`一个 Pod 对应于由若干容器组成的一个容器组同个组内的容器共享一个存储卷(volume)
@@ -59,15 +59,15 @@ Kubernetes 校验节点可用依赖于 ID。在当前的版本中有两个接
### 节点控制 ### 节点控制
Kubernetes 主节点中节点控制器是用来管理节点的组件主要包含 Kubernetes 主节点中节点控制器是用来管理节点的组件主要包含
* 集群范围内节点同步 * 集群范围内节点同步
* 单节点生命周期管理 * 单节点生命周期管理
节点控制有一个同步轮询主要监听所有云平台的虚拟实例会根据节点状态创建和删除可以通过 `--node_sync_period`标志来控制该轮询如果一个实例已经创建节点控制将会为其创建一个结构同样的如果一个节点被删除节点控制也会删除该结构 Kubernetes 启动时可用通过 `--machines`标记来显示指定节点同样可以使用 `kubectl` 来一条一条的添加节点两者是相同的通过设置 `--sync_nodes=false`标记来禁止集群之间的节点同步你也可以使用 api/kubectl 命令行来增删节点 节点控制有一个同步轮询主要监听所有云平台的虚拟实例会根据节点状态创建和删除可以通过 `--node_sync_period`标志来控制该轮询如果一个实例已经创建节点控制将会为其创建一个结构同样的如果一个节点被删除节点控制也会删除该结构 Kubernetes 启动时可用通过 `--machines`标记来显示指定节点同样可以使用 `kubectl` 来一条一条的添加节点两者是相同的通过设置 `--sync_nodes=false`标记来禁止集群之间的节点同步你也可以使用 api/kubectl 命令行来增删节点
## 容器组 ## 容器组
Kubernetes 使用的最小单位是容器组容器组是创建调度管理的最小单位 Kubernetes 使用的最小单位是容器组容器组是创建调度管理的最小单位 一个容器组使用相同的 Docker 容器并共享卷挂载点一个容器组是一个特定应用的打包集合包含一个或多个容器
一个容器组使用相同的 Docker 容器并共享卷挂载点一个容器组是一个特定应用的打包集合包含一个或多个容器
和运行的容器类似一个容器组被认为只有很短的运行周期容器组被调度到一组节点运行直到容器的生命周期结束或者其被删除如果节点死掉运行在其上的容器组将会被删除而不是重新调度也许在将来的版本中会添加容器组的移动 和运行的容器类似一个容器组被认为只有很短的运行周期容器组被调度到一组节点运行直到容器的生命周期结束或者其被删除如果节点死掉运行在其上的容器组将会被删除而不是重新调度也许在将来的版本中会添加容器组的移动
@@ -133,50 +133,56 @@ Kubernetes 校验节点可用依赖于 ID。在当前的版本中有两个接
举例如下 举例如下
* 容器组状态 `running` 1 容器容器正常退出 * 容器组状态 `running` 1 容器容器正常退出
* 记录完成事件 * 记录完成事件
* 如果重启策略为 * 如果重启策略为
* 始终重启容器容器组保持 `running` * 始终重启容器容器组保持 `running`
* 失败时容器组变为 `succeeded` * 失败时容器组变为 `succeeded`
* 从不容器组变为 `succeeded` * 从不容器组变为 `succeeded`
* 容器组状态 `running`有1容器容器异常退出 * 容器组状态 `running`有1容器容器异常退出
* 记录失败事件 * 记录失败事件
* 如果重启策略为 * 如果重启策略为
* 始终重启容器容器组保持 `running` * 始终重启容器容器组保持 `running`
* 失败时重启容器容器组保持 `running` * 失败时重启容器容器组保持 `running`
* 从不容器组变为 `failed` * 从不容器组变为 `failed`
* 容器组状态 `running`有2容器有1容器异常退出 * 容器组状态 `running`有2容器有1容器异常退出
* 记录失败事件 * 记录失败事件
* 如果重启策略为 * 如果重启策略为
* 始终重启容器容器组保持 `running` * 始终重启容器容器组保持 `running`
* 失败时重启容器容器组保持 `running` * 失败时重启容器容器组保持 `running`
* 从不容器组保持 `running` * 从不容器组保持 `running`
* 当有2容器退出 * 当有2容器退出
* 记录失败事件 * 记录失败事件
* 如果重启策略为
* 始终重启容器容器组保持 `running`
* 失败时重启容器容器组保持 `running`
* 从不容器组变为 `failed`
* 容器组状态 `running`容器内存不足
* 标记容器错误中断
* 记录内存不足事件
* 如果重启策略为 * 如果重启策略为
* 始终重启容器容器组保持 `running` * 始终重启容器容器组保持 `running`
* 失败时重启容器容器组保持 `running` * 失败时重启容器容器组保持 `running`
* 从不记录错误事件容器组变为 `failed` * 从不容器组变为 `failed`
* 容器组状态 `running`容器内存不足
* 标记容器错误中断
* 记录内存不足事件
* 如果重启策略为
* 始终重启容器容器组保持 `running`
* 失败时重启容器容器组保持 `running`
* 从不记录错误事件容器组变为 `failed`
* 容器组状态 `running`一块磁盘死掉 * 容器组状态 `running`一块磁盘死掉
* 杀死所有容器 * 杀死所有容器
* 记录事件 * 记录事件
* 容器组变为 `failed` * 容器组变为 `failed`
* 如果容器组运行在一个控制器下容器组将会在其他地方重新创建 * 如果容器组运行在一个控制器下容器组将会在其他地方重新创建
* 容器组状态 `running`对应的节点段溢出 * 容器组状态 `running`对应的节点段溢出
* 节点控制器等到超时 * 节点控制器等到超时
* 节点控制器标记容器组 `failed` * 节点控制器标记容器组 `failed`
* 如果容器组运行在一个控制器下容器组将会在其他地方重新创建 * 如果容器组运行在一个控制器下容器组将会在其他地方重新创建
## Replication Controllers ## Replication Controllers
## 服务 ## 服务
## ##
## 标签 ## 标签
## 接口权限 ## 接口权限
## web界面 ## web界面
## 命令行操作 ## 命令行操作

View File

@@ -1,9 +1,11 @@
# 基本架构 # 架构设计
任何优秀的项目都离不开优秀的架构设计本小节将介绍 Kubernetes 在架构方面的设计考虑 任何优秀的项目都离不开优秀的架构设计本小节将介绍 Kubernetes 在架构方面的设计考虑
## 基本考虑 ## 基本考虑
如果让我们自己从头设计一套容器管理平台有如下几个方面是很容易想到的 如果让我们自己从头设计一套容器管理平台有如下几个方面是很容易想到的
* 分布式架构保证扩展性 * 分布式架构保证扩展性
* 逻辑集中式的控制平面 + 物理分布式的运行平面 * 逻辑集中式的控制平面 + 物理分布式的运行平面
* 一套资源调度系统管理哪个容器该分配到哪个节点上 * 一套资源调度系统管理哪个容器该分配到哪个节点上
@@ -13,7 +15,7 @@
下面这张图完整展示了 Kubernetes 的运行原理 下面这张图完整展示了 Kubernetes 的运行原理
![Kubernetes 架构](./_images/k8s_architecture.png) ![Kubernetes 架构](../.gitbook/assets/k8s_architecture.png)
可见Kubernetes 首先是一套分布式系统由多个节点组成节点分为两类一类是属于管理平面的主节点/控制节点Master Node一类是属于运行平面的工作节点Worker Node 可见Kubernetes 首先是一套分布式系统由多个节点组成节点分为两类一类是属于管理平面的主节点/控制节点Master Node一类是属于运行平面的工作节点Worker Node
@@ -22,6 +24,7 @@
从这张图上我们没有能发现 Kubernetes 中对于控制平面的分布式实现但是由于数据后端自身就是一套分布式的数据库 Etcd因此可以很容易扩展到分布式实现 从这张图上我们没有能发现 Kubernetes 中对于控制平面的分布式实现但是由于数据后端自身就是一套分布式的数据库 Etcd因此可以很容易扩展到分布式实现
## 控制平面 ## 控制平面
### 主节点服务 ### 主节点服务
主节点上需要提供如下的管理服务 主节点上需要提供如下的管理服务
@@ -31,6 +34,7 @@
* `controller-manager` 负责管理控制器包括 endpoint-controller刷新服务和 pod 的关联信息 replication-controller维护某个 pod 的复制为配置的数值 * `controller-manager` 负责管理控制器包括 endpoint-controller刷新服务和 pod 的关联信息 replication-controller维护某个 pod 的复制为配置的数值
### Etcd ### Etcd
这里 Etcd 即作为数据后端又作为消息中间件 这里 Etcd 即作为数据后端又作为消息中间件
通过 Etcd 来存储所有的主节点上的状态信息很容易实现主节点的分布式扩展 通过 Etcd 来存储所有的主节点上的状态信息很容易实现主节点的分布式扩展
@@ -38,7 +42,8 @@
组件可以自动的去侦测 Etcd 中的数值变化来获得通知并且获得更新后的数据来执行相应的操作 组件可以自动的去侦测 Etcd 中的数值变化来获得通知并且获得更新后的数据来执行相应的操作
## 工作节点 ## 工作节点
* kubelet 是工作节点执行操作的 agent负责具体的容器生命周期管理根据从数据库中获取的信息来管理容器并上报 pod 运行状态等 * kubelet 是工作节点执行操作的 agent负责具体的容器生命周期管理根据从数据库中获取的信息来管理容器并上报 pod 运行状态等
* kube-proxy 是一个简单的网络访问代理同时也是一个 Load Balancer它负责将访问到某个服务的请求具体分配给工作节点上的 Pod同一类标签 * kube-proxy 是一个简单的网络访问代理同时也是一个 Load Balancer它负责将访问到某个服务的请求具体分配给工作节点上的 Pod同一类标签
![Proxy 代理对服务的请求](./_images/kube-proxy.png) ![Proxy 代理对服务的请求](../.gitbook/assets/kube-proxy.png)

View File

@@ -1,6 +1,6 @@
# 项目简介 # 简介
![](./_images/kubernetes_logo.png) ![](../.gitbook/assets/kubernetes_logo.png)
Kubernetes Google 团队发起的开源项目它的目标是管理跨多个主机的容器提供基本的部署维护以及应用伸缩主要实现语言为 Go 语言Kubernetes Kubernetes Google 团队发起的开源项目它的目标是管理跨多个主机的容器提供基本的部署维护以及应用伸缩主要实现语言为 Go 语言Kubernetes

View File

@@ -1,4 +1,4 @@
# Nexus3.x 的私有仓库 # Nexus 3
使用 Docker 官方的 Registry 创建的仓库面临一些维护问题比如某些镜像删除以后空间默认是不会回收的需要一些命令去回收空间然后重启 Registry在企业中把内部的一些工具包放入 `Nexus` 中是比较常见的做法最新版本 `Nexus3.x` 全面支持 Docker 的私有镜像所以使用 [`Nexus3.x`](https://www.sonatype.com/product/repository-oss-download) 一个软件来管理 `Docker` , `Maven` , `Yum` , `PyPI` 等是一个明智的选择。 使用 Docker 官方的 Registry 创建的仓库面临一些维护问题比如某些镜像删除以后空间默认是不会回收的需要一些命令去回收空间然后重启 Registry在企业中把内部的一些工具包放入 `Nexus` 中是比较常见的做法最新版本 `Nexus3.x` 全面支持 Docker 的私有镜像所以使用 [`Nexus3.x`](https://www.sonatype.com/product/repository-oss-download) 一个软件来管理 `Docker` , `Maven` , `Yum` , `PyPI` 等是一个明智的选择。
@@ -22,7 +22,6 @@ $ docker logs nexus3 -f
Started Sonatype Nexus OSS 3.30.0-01 Started Sonatype Nexus OSS 3.30.0-01
------------------------------------------------- -------------------------------------------------
``` ```
如果你看到以上内容说明 `Nexus` 已经启动成功你可以使用浏览器打开 `http://YourIP:8081` 访问 `Nexus` 如果你看到以上内容说明 `Nexus` 已经启动成功你可以使用浏览器打开 `http://YourIP:8081` 访问 `Nexus`
@@ -53,7 +52,7 @@ $ docker exec nexus3 cat /nexus-data/admin.password
菜单 `Security->Realms` Docker Bearer Token Realm 移到右边的框中保存 菜单 `Security->Realms` Docker Bearer Token Realm 移到右边的框中保存
添加用户规则菜单 `Security->Roles`->`Create role` `Privlleges` 选项搜索 docker 把相应的规则移动到右边的框中然后保存 添加用户规则菜单 `Security->Roles`->`Create role` `Privlleges` 选项搜索 docker 把相应的规则移动到右边的框中然后保存
添加用户菜单 `Security->Users`->`Create local user` `Roles` 选项中选中刚才创建的规则移动到右边的窗口保存 添加用户菜单 `Security->Users`->`Create local user` `Roles` 选项中选中刚才创建的规则移动到右边的窗口保存
@@ -114,7 +113,7 @@ server {
## Docker 主机访问镜像仓库 ## Docker 主机访问镜像仓库
如果不启用 SSL 加密可以通过 [前面章节](./registry.md) 的方法添加非 https 仓库地址到 Docker 的配置文件中然后重启 Docker 如果不启用 SSL 加密可以通过 [前面章节](registry.md) 的方法添加非 https 仓库地址到 Docker 的配置文件中然后重启 Docker
使用 SSL 加密以后程序需要访问就不能采用修改配置的方式了具体方法如下 使用 SSL 加密以后程序需要访问就不能采用修改配置的方式了具体方法如下

View File

@@ -1,4 +1,4 @@
# Swarm 集群中使用 compose 文件 # 使用 compose 文件
正如之前使用 `docker-compose.yml` 来一次配置启动多个容器 `Swarm` 集群中也可以使用 `compose` 文件 `docker-compose.yml` 来配置启动多个服务 正如之前使用 `docker-compose.yml` 来一次配置启动多个容器 `Swarm` 集群中也可以使用 `compose` 文件 `docker-compose.yml` 来配置启动多个服务
@@ -70,7 +70,7 @@ $ docker stack deploy -c docker-compose.yml wordpress
现在我们打开浏览器输入 `任一节点IP:8080` 即可看到各节点运行状态如下图所示 现在我们打开浏览器输入 `任一节点IP:8080` 即可看到各节点运行状态如下图所示
![](image/wordpress.png) ![](../.gitbook/assets/wordpress.png)
在浏览器新的标签页输入 `任一节点IP` 即可看到 `WordPress` 安装界面安装完成之后输入 `任一节点IP` 即可看到 `WordPress` 页面 在浏览器新的标签页输入 `任一节点IP` 即可看到 `WordPress` 安装界面安装完成之后输入 `任一节点IP` 即可看到 `WordPress` 页面

View File

@@ -4,7 +4,7 @@ Docker 采用了 `C/S` 架构包括客户端和服务端。Docker 守护进
客户端和服务端既可以运行在一个机器上也可通过 `socket` 或者 `RESTful API` 来进行通信 客户端和服务端既可以运行在一个机器上也可通过 `socket` 或者 `RESTful API` 来进行通信
![Docker 基本架构](./_images/docker_arch.png) ![Docker 基本架构](../.gitbook/assets/docker_arch.png)
Docker 守护进程一般在宿主主机后台运行等待接收来自客户端的消息 Docker 守护进程一般在宿主主机后台运行等待接收来自客户端的消息