
看完本文希望读者能够了解到,Docker 的基本原理,Kubernetes 是怎么工作的, 对于前端 Kubernetes 有哪些优势与玩法。
Docker 和传统部署方式最大的不同在于,它将不会限制我们使用任何工具,任何语言,任何版本的 runtime,Docker 将我们的应用看成一个只提供网络服务的盒子(也即容器),Kubernetes 则是对这些盒子进行更多自动化的操作,自动创建,自动重启,自动扩容,自动调度,这个过程称之为容器编排。
在今天,容器编排技术给 Web 应用带来了巨大的灵活性,让我们轻松创建需要的程序对外提供服务。和传统的 IaaS 相比,不需要去关心云主机申请,云主机配置等信息,也不需考虑云主机故障导致的服务不可用,由 Kubernetes 的副本控制器帮我们完成云主机故障发生后容器迁移。
本篇文章和大家一起,回顾一下从 Docker 到 Kubernetes 的一些相关内容,最后再看看 Kubernetes 在前端领域有哪些优势和新玩法。
Docker 安装
- Linux Debian/Ubuntu, 安装 社区版DockerCE
- Windows 一键安装
如果是 Windows10, Windows7 将会使用 VirtualBox 安装 Linux 作为 Docker 的宿主机。
Windows10 Pro 会使用 Hyper-V 安装 Linux 作为 Docker 的宿主机。
- macOS 一键安装
Docker 基本信息
默认 Docker 存储位置为 /var/lib/docker
,所有的镜像,容器,卷都会在这里,如果你使用了多硬盘,或者挂载了 SSD 不在 /
上,需要修改默认路径(graph)到合适位置,配置文件为 /etc/docker/daemon.json
, 例如
{
"bip": "192.168.0.1/16",
"graph": "/mnt/ssd/0/docker"
}
Docker 在安装过程中会自动创建好 docker0 网卡,并分配 ip 给他。
上面指定的 bip 是指定了 docker0 网卡的 ip , 如果不指定那么在创建 docker0 时会自动根据主机 ip 选取一个合适的 ip,不过由于网络的复杂性,特别是机房网络内很容易发现地址选取冲突,这时候就需要手动指定 bip 为一个合适的值。docker 的 ip 选取规则这篇文章分析的很好, 可以参考 https://blog.csdn.net/longxin… 。
安装并启动后可以通过 docker info
查看Docker的一些配置信息。
Docker hello world
Docker 检查安装是否正常的第一个测试命令很简单。
docker run hello-world
首先他会去 Docker Hub 上下载 hello-world 这个镜像,然后在本地运行这个镜像,启动后的这个 Docker 服务称之为容器。容器创建后就会执行规定的入口程序,程序执行向流中输出了一些信息后退出,容器也会随着这个入口程序的结束而结束。
- 查看所有容器
docker ps -a
输出如下:
cf9a6bc212f9 hello-world "/hello" 28 hours ago Exited (0) 3 min
第一列为容器 id, 很多针对容器的操作都需要这个 id, 例如下面一些常用的操作。
docker rm container_id
docker stop container_id
docker start container_id
docker describe container_id
这里有个docker start container_id
, 启动一个容器,说明容器即使退出后其资源依然存在,还可以使用docker start
重启这个容器。要想让容器退出后自动删除可以在docker run
时指定--rm
参数。
当我们运行这个命令时 Docker 会去下载 hello-world 这个镜像缓存到本地,这样当下次再运行这条命令时就不需要去源中下载。
- 查看本地镜像
docker images
运行 Nginx
Nginx 作为使用广泛的 Web 服务器在 Docker 世界里也是同样流行, 常常用来启动一个网络服务验证网络配置情况, 使用下面这条命令启动 Nginx 容器 docker run --rm -p 80:80 nginx
。
访问 localhost:80
端口即可看到 Nginx 服务启动, 控制台中可以看到 Nginx 服务的日志输出。
因为 Docker 内的网络与外部世界是隔离的,所以我们需要手动指定端口转发 -p 80:80
来显式将宿主机的80(前)转发到容器的80端口, 暴露端口是我们提供服务最常用的使用方式之一。 也有一些其他类型的服务,例如日志处理,数据收集需要共享数据卷才能提供服务,所有这些都需要我们在启动容器时显式指定。

一些常见的启动参数:
-
-p
本机端口:容器端口 映射本地端口到容器 -
-P
将容器端口映射为本机随机端口 -
-v
本地路径或卷名:容器路径 将本地路径或者数据卷挂载到容器的指定位置 -
-it
作为交互式命令启动 -
-d
将容器放在后台运行 -
--rm
容器退出后清除资源