内容大纲
容器技术概述
容器技术是一种轻量级的虚拟化技术,它允许将应用程序及其依赖项打包到一个独立的容器中,学习交流加群风哥微信: itpux-com。
容器与虚拟机的区别
| 特性 | 容器 | 虚拟机 |
|---|---|---|
| 隔离级别 | 进程级别 | 操作系统级别 |
| 启动时间 | 秒级 | 分钟级 |
| 资源占用 | 低 | 高 |
| 镜像大小 | 小(MB级) | 大(GB级) |
| 移植性 | 高 | 中 |
容器技术的优势
- 轻量级:容器共享主机内核,启动快速
- 一致性:容器在任何环境中运行相同
- 隔离性:容器之间相互隔离
- 可移植性:容器可以在不同环境中无缝运行
- 可扩展性:容器可以快速部署和扩展
Docker基础
Docker架构
- Docker Engine:核心组件,包括Docker守护进程和API
- Docker镜像:容器的只读模板
- Docker容器:基于镜像运行的实例
- Docker Registry:存储镜像的仓库
安装Docker
在Ubuntu上安装Docker
$ sudo apt update
# 安装依赖包
$ sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
# 添加Docker GPG密钥
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add –
# 添加Docker仓库
$ sudo add-apt-repository “deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable”
# 安装Docker
$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli containerd.io
# 验证安装
$ sudo docker run hello-world
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the “hello-world” image from the Docker Hub.
3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
Docker基本命令
$ docker –version
# 查看Docker信息
$ docker info
# 搜索镜像
$ docker search ubuntu
# 拉取镜像
$ docker pull ubuntu:latest
# 列出本地镜像
$ docker images
# 运行容器
$ docker run -it –name my-container ubuntu:latest bash
# 列出容器
$ docker ps -a
# 启动容器
$ docker start my-container
# 停止容器
$ docker stop my-container
# 删除容器
$ docker rm my-container
# 删除镜像
$ docker rmi ubuntu:latest
容器镜像
创建Docker镜像
使用Dockerfile创建自定义镜像,风哥风哥提示:Dockerfile是定义镜像构建步骤的文本文件。
Dockerfile示例
FROM node:14-alpine
# 设置工作目录
WORKDIR /app
# 复制package.json文件
COPY package.json .
# 安装依赖
RUN npm install
# 复制应用代码
COPY . .
# 暴露端口
EXPOSE 3000
# 启动应用
CMD [“node”, “server.js”]
构建镜像
$ docker build -t fgedu/node-app:latest .
# 查看构建的镜像
$ docker images
fgedu/node-app latest abc123def456 1 minute ago 120MB
node 14-alpine 789012abc345 2 weeks ago 110MB
镜像管理
- 使用标签管理镜像版本
- 推送镜像到Docker Registry
- 从Docker Registry拉取镜像
- 使用多阶段构建减小镜像大小
推送镜像到Docker Hub
$ docker login
# 标记镜像
$ docker tag fgedu/node-app:latest username/node-app:latest
# 推送镜像
$ docker push username/node-app:latest
容器管理
容器网络
- Bridge网络:默认网络模式
- Host网络:容器使用主机网络
- None网络:容器没有网络
- 自定义网络:用户创建的网络
创建自定义网络
$ docker network create my-network
# 在自定义网络中运行容器
$ docker run -d –name container1 –network my-network nginx
$ docker run -d –name container2 –network my-network nginx
# 测试容器间通信
$ docker exec container1 ping container2
64 bytes from 172.18.0.3: seq=0 ttl=64 time=0.123 ms
64 bytes from 172.18.0.3: seq=1 ttl=64 time=0.098 ms
64 bytes from 172.18.0.3: seq=2 ttl=64 time=0.101 ms
容器数据卷
数据卷用于持久化容器数据,以及在容器之间共享数据。
创建和使用数据卷
$ docker volume create my-volume
# 查看数据卷
$ docker volume ls
# 在容器中使用数据卷
$ docker run -d –name mysql -v my-volume:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=password mysql:latest
# 查看数据卷详细信息
$ docker volume inspect my-volume
Docker Compose
Docker Compose是一个用于定义和运行多容器Docker应用的工具。
安装Docker Compose
$ 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
# 验证安装
$ docker-compose –version
docker-compose.yml示例
services:
web:
build: .
ports:
– “3000:3000”
depends_on:
– db
environment:
– DATABASE_URL=mysql://db:3306/app
db:
image: mysql:5.7
volumes:
– db-data:/var/lib/mysql
environment:
– MYSQL_ROOT_PASSWORD=password
– MYSQL_DATABASE=app
volumes:
db-data:
使用Docker Compose
$ docker-compose up -d
# 查看服务状态
$ docker-compose ps
# 查看服务日志
$ docker-compose logs
# 停止服务
$ docker-compose down
# 停止并删除数据卷
$ docker-compose down -v
Kubernetes基础
Kubernetes是一个开源的容器编排平台,用于自动化容器的部署、扩展和管理。
Kubernetes核心概念
- Pod:最小的部署单元,包含一个或多个容器
- Service:为Pod提供网络访问
- Deployment:管理Pod的副本数和更新策略
- Namespace:将集群划分为多个逻辑空间
- ConfigMap:存储配置数据
- Secret:存储敏感信息
安装Minikube(本地Kubernetes环境)
$ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
$ sudo install minikube-linux-amd64 /usr/local/bin/minikube
# 启动Minikube
$ minikube start
# 验证集群状态
$ kubectl cluster-info
# 查看节点
$ kubectl get nodes
部署应用到Kubernetes
Deployment配置示例
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
– name: nginx
image: nginx:latest
ports:
– containerPort: 80
—
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
– port: 80
targetPort: 80
type: NodePort
部署应用
$ kubectl apply -f nginx-deployment.yaml
# 查看Deployment
$ kubectl get deployments
# 查看Pod
$ kubectl get pods
# 查看Service
$ kubectl get services
# 访问应用
$ minikube service nginx-service
最佳实践
Docker最佳实践
- 使用官方基础镜像
- 最小化镜像大小
- 使用多阶段构建
- 避免在容器中运行特权进程
- 使用健康检查
- 正确设置容器资源限制
- 使用Docker Compose管理多容器应用
Kubernetes最佳实践
- 使用命名空间隔离不同环境
- 使用ConfigMap和Secret管理配置
- 设置资源请求和限制
- 使用健康检查和就绪探针
- 使用Horizontal Pod Autoscaler实现自动扩缩容
- 使用Ingress管理外部访问
- 定期更新容器镜像
- 使用私有Docker Registry存储镜像
- 实施镜像扫描,确保安全性
- 使用Kubernetes进行容器编排
- 设置资源限制,防止资源耗尽
- 实施监控和告警
- 定期备份数据卷
- 制定容器安全策略
更多学习教程www.fgedu.net.cn
学习交流加群风哥QQ113257174
更多学习教程公众号风哥教程itpux_com
author:www.itpux.com
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
