1. 首页 > IT综合教程 > 正文

it教程FG152-容器技术基础

内容大纲

容器技术概述

容器技术是一种轻量级的虚拟化技术,它允许将应用程序及其依赖项打包到一个独立的容器中,学习交流加群风哥微信: 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

Hello from Docker!
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版本
$ 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示例

# 使用官方Node.js镜像作为基础
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

REPOSITORY TAG IMAGE ID CREATED SIZE
fgedu/node-app latest abc123def456 1 minute ago 120MB
node 14-alpine 789012abc345 2 weeks ago 110MB

镜像管理

  • 使用标签管理镜像版本
  • 推送镜像到Docker Registry
  • 从Docker Registry拉取镜像
  • 使用多阶段构建减小镜像大小

推送镜像到Docker Hub

# 登录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

PING container2 (172.18.0.3): 56 data bytes
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

# 下载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示例

version: ‘3’
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环境)

# 安装Minikube
$ 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配置示例

apiVersion: apps/v1
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

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息