容器化技术已成为现代应用部署的标准方案,Docker 与 Kubernetes 的组合更是企业级应用的首选。本文基于 2025 年最新技术栈,提供从环境搭建到应用部署的完整实操指南,包含多架构支持、安全加固等最新特性。
Docker 27.0 版本带来了对 containerd 2.0 的原生支持和多架构构建增强,安装步骤如下:
# 卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc
# 安装依赖
sudo apt-get update
sudo apt-get install 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
# 设置稳定版仓库
echo "deb [arch=$(dpkg --print-architecture) 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 Engine
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 验证安装
sudo docker --version # 应显示 Docker Engine - Community 27.0.x
配置 Docker 以非 root 用户运行(安全最佳实践):
sudo usermod -aG docker $USER
newgrp docker # 无需重启即可生效
使用 kubeadm 部署最新稳定版 K8s 1.30,支持容器运行时接口(CRI)v1:
# 关闭 swap
sudo swapoff -a
sudo sed -i '/swap/s/^/#/' /etc/fstab
# 安装容器运行时(containerd 2.0)
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install containerd.io
# 配置 containerd
containerd config default | sudo tee /etc/containerd/config.toml > /dev/null
sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml
sudo systemctl restart containerd
# 安装 kubeadm、kubelet、kubectl
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet=1.30.0-00 kubeadm=1.30.0-00 kubectl=1.30.0-00
sudo apt-mark hold kubelet kubeadm kubectl
# 初始化控制平面(仅在主节点执行)
sudo kubeadm init --kubernetes-version=1.30.0 --pod-network-cidr=10.244.0.0/16
# 配置 kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 安装网络插件(Calico 3.28)
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.28.0/manifests/calico.yaml
# (可选)如果是单节点集群,允许控制平面调度 Pod
kubectl taint nodes --all node-role.kubernetes.io/control-plane-
验证集群状态:
kubectl get nodes # 应显示 Ready 状态
kubectl get pods -n kube-system # 所有系统组件应正常运行
Docker 27 增强了对 ARM64 和 AMD64 混合架构的支持,以下是构建多架构镜像的实操步骤:
以一个简单的 Node.js 应用为例,目录结构如下:
node-app/
├── app.js
├── package.json
└── Dockerfile
app.js 内容:
const express = require('express');
const app = express();
const port = process.env.PORT || 3000;
app.get('/', (req, res) => {
res.json({
message: 'Hello from Kubernetes!',
node: process.env.NODE_NAME,
timestamp: new Date().toISOString()
});
});
app.listen(port, () => {
console.log(`App running on port ${port}`);
});
package.json 内容:
{
"name": "k8s-demo-app",
"version": "1.0.0",
"dependencies": {
"express": "^4.19.2"
},
"scripts": {
"start": "node app.js"
}
}
# 构建阶段
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json./
RUN npm ci --only=production
# 运行阶段
FROM node:20-alpine
WORKDIR /app
COPY --from=builder /app/node_modules./node_modules
COPY app.js.
ENV PORT=3000
USER node # 非 root 用户运行,增强安全性
EXPOSE 3000
HEALTHCHECK --interval=30s --timeout=3s \
CMD wget -q -O /dev/null http://localhost:3000/ || exit 1
CMD ["node", "app.js"]
这个 Dockerfile 包含以下现代特性:
# 创建构建器实例
docker buildx create --name mybuilder --use
# 登录 Docker Hub(或私有仓库)
docker login
# 构建并推送多架构镜像(amd64 + arm64)
docker buildx build --platform linux/amd64,linux/arm64 \
-t yourusername/node-demo:latest \
--push.
验证镜像:
docker buildx imagetools inspect yourusername/node-demo:latest
创建 deployment.yaml
:
apiVersion: apps/v1
kind: Deployment
metadata:
name: node-demo
labels:
app: node-demo
spec:
replicas: 3
selector:
matchLabels:
app: node-demo
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
template:
metadata:
labels:
app: node-demo
spec:
containers:
- name: node-demo
image: yourusername/node-demo:latest
ports:
- containerPort: 3000
env:
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "500m"
memory: "256Mi"
readinessProbe:
httpGet:
path: /
port: 3000
initialDelaySeconds: 5
periodSeconds: 10
livenessProbe:
httpGet:
path: /
port: 3000
initialDelaySeconds: 15
periodSeconds: 20
securityContext:
runAsUser: 1000
runAsGroup: 3000
fsGroup: 2000
应用部署:
kubectl apply -f deployment.yaml
# 查看部署状态
kubectl get deployments
kubectl get pods -o wide
配置说明:
创建 service.yaml
:
apiVersion: v1
kind: Service
metadata:
name: node-demo-service
spec:
selector:
app: node-demo
ports:
- port: 80
targetPort: 3000
type: ClusterIP
部署 Service:
kubectl apply -f service.yaml
对于外部访问,使用最新的 Ingress-NGINX 控制器(1.10+):
# 安装 Ingress-NGINX
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.10.0/deploy/static/provider/cloud/deploy.yaml
# 创建 Ingress 资源
cat <<EOF | kubectl apply -f -
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: node-demo-ingress
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
ingressClassName: nginx
rules:
- host: demo.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: node-demo-service
port:
number: 80
EOF
获取 Ingress 地址:
kubectl get ingress node-demo-ingress
创建 kustomization.yaml
:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
- service.yaml
- ingress.yaml
# 可以根据环境覆盖配置
patches:
- path: patch-replicas.yaml # 例如生产环境增加副本数
应用配置:
kubectl apply -k.
# 安装 Prometheus 和 Grafana(使用 kube-prometheus-stack)
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm install prometheus prometheus-community/kube-prometheus-stack --namespace monitoring --create-namespace
访问 Grafana 仪表板:
kubectl port-forward -n monitoring svc/prometheus-grafana 3000:80
# 使用 Docker Scout 扫描镜像漏洞
docker scout cves yourusername/node-demo:latest
# 在 Namespace 中应用限制
apiVersion: v1
kind: Namespace
metadata:
name: my-app-namespace
labels:
pod-security.kubernetes.io/enforce: restricted
pod-security.kubernetes.io/audit: restricted
pod-security.kubernetes.io/warn: restricted
# 创建 Secret
kubectl create secret generic app-secrets --from-literal=DB_PASSWORD=strongpassword
# 在 Deployment 中引用
#...
env:
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: app-secrets
key: DB_PASSWORD
#...
本文基于 2025 年最新版本的 Docker 27 和 Kubernetes 1.30,提供了从环境搭建到应用部署的完整实操指南。通过多架构镜像构建、安全加固配置和现代化部署策略,你可以构建一个高效、安全、可扩展的容器化平台。
随着容器技术的不断发展,建议定期关注官方文档以获取最新特性和最佳实践。Docker 和 Kubernetes 生态系统正持续演进,新的工具和功能不断涌现,将进一步简化容器化应用的管理和运维。
Docker,Kubernetes, 容器化,实操指南,容器技术入门,容器化方案,从入门到精通,镜像构建,Pod 配置,服务发现,负载均衡,自动化部署,监控日志,云原生应用,容器编排
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。