Docker 容器是一种轻量级的虚拟化技术,可快速构建、部署和运行应用程序。由于它的轻量级、可移植性和易配置性等优点,Docker 已经成为开发、测试和部署应用程序的首选技术。Docker 容器编组(Container Grouping)是一项重要功能,可以帮助我们更好地管理容器。在本文中,我们将深入探讨 Docker 容器编组的原理、用法和应用。
Docker 容器编组概述
Docker 容器编组是指将多个 Docker 容器组合在一起,形成一个逻辑单元,可以以集群(cluster)或作业(job)的方式运行。每个容器都可以独立部署、配置和运行,通过容器编组,我们可以更好地管理容器,提高运行效率和安全性。
Docker 容器编组有两种实现方式:Docker Swarm 和 Kubernetes。Docker Swarm 是 Docker 官方提供的容器编组引擎,简单易用,适合中小型应用程序。Kubernetes 则是 Google 发起的开源容器编组引擎,支持大规模、高可用的容器部署和管理,适合复杂的分布式应用程序。
Docker Swarm
Docker Swarm 是 Docker 官方提供的容器编组引擎,集成了 Docker Compose 和 Docker Engine,提供了简单易用的 Swarm 模式,可以快速构建和管理容器编组。
安装 Docker Swarm
首先,我们需要安装 Docker 和 Docker Compose。Docker Swarm 需要在 Docker Compose 的基础上运行,因此必须先安装 Docker Compose。可以通过以下命令安装 Docker Compose:
$ sudo curl -L "https://github.com/docker/compose/releases/download/<VERSION>/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose $ sudo chmod +x /usr/local/bin/docker-compose $ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
其中 <VERSION>
是 Docker Compose 的版本号,可以通过 https://github.com/docker/compose/releases
查看最新版本。例如:
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose $ sudo chmod +x /usr/local/bin/docker-compose $ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
安装完 Docker Compose 后,可以安装 Docker Swarm。可以通过以下命令安装 Docker Swarm:
$ sudo docker swarm init
执行以上命令后,系统会初始化一个 Swarm 集群,同时生成一个管理令牌,用于加入其他节点。例如:
Swarm initialized: current node (54nu2qkqn71107ibkhrkg19e6) is now a manager. To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-26c0gy076bd2n1gzf2ykdgw7arupmpcskiogp7mqb8z6g61kxu-9xq3kl6kiul55c3p7hs84o3uo 192.168.0.10:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
其中,54nu2qkqn71107ibkhrkg19e6
是当前节点的 ID,用于标识该节点。而 SWMTKN-1-26c0gy076bd2n1gzf2ykdgw7arupmpcskiogp7mqb8z6g61kxu-9xq3kl6kiul55c3p7hs84o3uo
是管理令牌,用于加入其他节点。同时,生成的管理令牌还包含了当前节点的 IP 地址(192.168.0.10:2377
),其他节点可以通过该地址加入集群。
创建 Docker Swarm 编组
创建 Docker Swarm 编组前,需要准备 Docker Compose 配置文件,例如:
-- -------------------- ---- ------- -------- ----- --------- ----- ------ ------------ ------ - --------- ----- ------ ------------ ------ - ---------
该配置文件定义了两个服务(service):web1 和 web2,它们分别使用 nginx 镜像并在 8080 和 8081 端口监听请求。可以通过以下命令启动服务:
$ sudo docker stack deploy --compose-file docker-compose.yml myapp
执行以上命令后,Docker Swarm 会根据配置文件创建两个 Docker 容器,分别运行在 web1 和 web2 服务中。可以通过以下命令查看容器状态:
$ sudo docker stack ps myapp
执行以上命令后,会输出所有运行中的容器,例如:
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS dhtz2kvx4pt1 myapp_web1.a989247 nginx:latest ubuntu Running Running 12 minutes ago 7899jdwqupu0 myapp_web2.1 nginx:latest ubuntu Running Running 12 minutes ago
Kubernetes
Kubernetes 是 Google 发起的开源容器编组引擎,支持大规模、高可用的容器部署和管理。Kubernetes 通过集群(cluster)的方式管理容器,每个集群由多个节点组成,每个节点上运行多个容器。
安装 Kubernetes
首先,我们需要安装 Kubernetes,可以通过以下命令安装:
$ sudo curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - $ sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main" $ sudo apt-get update $ sudo apt-get install -y kubelet kubeadm kubectl kubernetes-cni
安装完成后,可以通过以下命令启动 Kubernetes:
$ sudo kubeadm init
执行以上命令后,系统会初始化一个 Kubernetes 集群,并生成一个管理令牌,用于加入其他节点。例如:
-- -------------------- ---- ------- ---- ---------- ------------- --- ----------- ------------- -- ----- ----- ---- -------- --- ---- -- --- --- --------- -- - ------- ----- ----- -- ----------- ---- -- -- -------------------------- ------------------ ---- ----- ---- -------- --- ------------------ ---- --- --- ---- --- ------ -- ------ ----- -- ------- --- --------- -- ---- -- ----- ------- ---- ------------- ------- ----------------------- - ------------------------------ -----------------------------------------------------------------------
其中,kubectl
是 Kubernetes 的命令行工具,可以通过它管理 Kubernetes 集群。可以通过以下命令安装 kubectl
:
$ sudo apt-get update && apt-get install -y apt-transport-https $ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - $ cat <<EOF > /etc/apt/sources.list.d/kubernetes.list deb https://apt.kubernetes.io/ kubernetes-xenial main EOF $ sudo apt-get update $ sudo apt-get install -y kubectl
创建 Kubernetes 编组
创建 Kubernetes 编组前,需要准备 Kubernetes 配置文件,例如:
-- -------------------- ---- ------- ----------- ------- ----- ---------- --------- ----- ------------ ----- --------- - --------- ------------ ---- ----- --------- --------- ------- ---- ----- ----- ----------- - ----- ----- ------ ------------ ------ - -------------- --
该配置文件定义了一个 Deployment 对象,其中的 replicas 属性表示需要创建两个 nginx 容器,selector 属性表示选择哪些容器运行该 Deployment 对象,而 template 属性表示容器的模板,其中定义了容器的镜像、端口等信息。可以通过以下命令创建 Deployment 对象:
$ kubectl apply -f nginx-deploy.yaml
执行以上命令后,Kubernetes 会根据配置文件创建两个 nginx 容器,并监控这些容器的状态,保证这些容器一直处于稳定运行的状态。可以通过以下命令查看容器状态:
$ kubectl get pods
执行以上命令后,会输出所有运行中的容器,例如:
NAME READY STATUS RESTARTS AGE nginx-deploy-7d89b8675c 1/1 Running 0 4m nginx-deploy-8696c8d6d 1/1 Running 0 4m
结论
Docker 容器编组是一种重要的容器技术,通过它,我们可以更好地管理容器,提高运行效率和安全性。本文介绍了 Docker Swarm 和 Kubernetes 两种容器编组技术的用法和原理,并分别给出了示例代码。无论是中小型应用程序还是复杂的分布式应用程序,都可以通过 Docker 容器编组技术得到简单、高效、可伸缩和可靠的部署和管理。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/670515e5d91dce0dc851b7c4