随着云计算的发展,容器化技术已经成为了现代化应用开发中的标配,而 Docker 和 Kubernetes 则是最为流行的两个容器化技术。本文将介绍如何打造 Docker + Kubernetes 容器栈,从搭建环境到部署应用一步步指导,详细介绍 Docker 和 Kubernetes 背后的基本概念和工作原理,旨在为读者提供深入学习和指导意义。
Docker 简介
Docker 是一种开源的容器引擎,它可以轻松地打包、部署和运行应用程序,而且是跨平台的。使用 Docker,开发人员可以将应用程序与运行环境一起打包,然后以容器的方式来运行。
Docker 的基本概念:
- 镜像(Image):Docker 镜像包含了一个完整的文件系统,其中包含了运行某个应用程序所需的所有组件。开发人员可以使用 Dokerfile 来创建自己的镜像,也可以使用已有的镜像。
- 容器(Container):镜像是只读的,容器是由镜像创建的可读写的运行实例。一个容器对应一种应用程序的运行状态。
- 仓库(Repository):Docker 镜像可以存储在 Docker 仓库中,供其他人使用和共享。Docker 官方自己维护着一个 Docker Hub,其它人也可以上载自己的镜像到 Docker Hub 上。
下面是一个简单的 Dockerfile 示例:
// javascriptcn.com 代码示例 FROM node:14 # 创建一个应用程序的目录 WORKDIR /app # 拷贝 package.json/package-lock.json 到容器 COPY package*.json ./ RUN npm install # 拷贝当前目录下的所有文件到容器 COPY . . # 暴露3000端口 EXPOSE 3000 # 运行应用程序 CMD ["npm", "start"]
这个 Dockerfile 的作用是创建一个基于 Node.js 14 镜像的容器,然后安装依赖,拷贝应用程序代码,最后启动应用程序。有了这个 Dockerfile,我们就可以构建出一个应用程序的镜像,并上传到 Docker Hub 上。
Kubernetes 简介
Kubernetes 是一个开源的容器编排系统,它提供了管理、调度和扩展容器化应用程序的能力。使用 Kubernetes,开发人员可以轻松地管理数千个容器化的应用程序和服务。
Kubernetes 的基本概念:
- Pod:是 Kubernetes 调度器调度的最小单元,它是一个或多个容器的组合,它们共享网络和存储资源。
- Deployment:用于管理应用程序的部署,它可以控制 Pod 的创建和终止。Deployment 可以快速地创建和销毁 Pod,从而支持应用程序的灵活扩展和缩容。
- Service:是一个抽象的概念,用于定义一组 Pod 和访问它们的策略。Service 可以让应用程序无感知地从一个 Pod 迁移到另一个 Pod,同时也提供了应用程序的负载均衡和服务发现功能。
- Configuration:用于管理应用程序的配置,例如环境变量和密钥等。Configuration 可以让应用程序在不停机的情况下进行更新。
下面是一个简单的 Kubernetes 配置文件例子:
// javascriptcn.com 代码示例 apiVersion: apps/v1 kind: Deployment metadata: name: myapp labels: app: myapp spec: replicas: 3 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - name: myapp image: myuser/myapp ports: - containerPort: 3000
这个文件的作用是创建一个名为 myapp
的 Deployment,它将启动 3 个 Pod,每个 Pod 中都运行一个名为 myuser/myapp
的容器,同时暴露 3000 端口。
搭建 Docker + Kubernetes 环境
在开始构建容器栈之前,我们需要先搭建运行容器化应用程序的环境。下面以 Ubuntu 20.04 为例,介绍如何搭建 Docker 和 Kubernetes。
安装 Docker
Docker 可以通过官方的安装脚本进行安装,步骤如下:
安装必要的依赖:
sudo apt-get update sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg \ lsb-release
添加 Docker 的官方 GPG 密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
添加 Docker 的 APT 源:
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
安装 Docker:
sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io
验证 Docker 是否成功安装:
sudo docker run hello-world
安装 Kubernetes
Kubernetes 的安装可以使用 kubeadm 工具,步骤如下:
关闭系统的 swap 分区:
sudo swapoff -a
配置 Kubernetes apt repository:
sudo apt-get update && sudo apt-get install -y apt-transport-https curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list deb https://apt.kubernetes.io/ kubernetes-xenial main EOF sudo apt-get update
安装 Kubernetes:
sudo apt-get install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl
初始化 Kubernetes 集群:
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
安装网络插件(这里以 Flannel 为例):
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
部署应用程序:
kubectl run myapp --image=myuser/myapp --port=3000 kubectl expose deployment myapp --type=LoadBalancer --port=80 --target-port=3000
查看应用程序的服务地址:
kubectl get svc
至此,我们已经成功搭建了 Docker + Kubernetes 容器栈,可以在这个环境中进行应用程序的开发、测试和部署。
总结
容器化技术可以帮助开发人员轻松地打包、部署和运行应用程序,而 Docker 和 Kubernetes 则是目前最流行的两个容器化技术。通过本文的介绍,读者可以了解 Docker 和 Kubernetes 背后的基本概念和工作原理,以及如何搭建 Docker + Kubernetes 环境。希望读者可以在此基础上进一步深入学习和探索容器化技术。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/652fcaae7d4982a6eb0fbff0