ubuntu

Ubuntu虚拟机容器化实践指南

小樊
37
2025-10-12 01:46:29
栏目: 云计算

Ubuntu虚拟机容器化实践指南

一、容器化基础准备:Ubuntu虚拟机环境配置

在Ubuntu虚拟机中实现容器化,需先确保虚拟机环境满足容器运行要求。推荐使用VirtualBoxKVM创建Ubuntu虚拟机(如Ubuntu 22.04 LTS),分配至少2GB内存、2核CPU及20GB磁盘空间(容器化对资源要求低于传统虚拟机,但需满足基础运行需求)。
虚拟机创建完成后,需安装Docker引擎(容器化核心工具)。以Ubuntu 22.04为例,执行以下命令:

# 更新软件包索引
sudo apt update
# 安装Docker依赖
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
# 添加Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 添加Docker软件源
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引擎
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
# 启动Docker服务并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker

验证Docker安装:docker --version(应输出Docker版本信息)。

二、Docker容器化核心操作:从镜像到应用部署

1. 运行基础Ubuntu容器

通过Docker Hub官方镜像快速启动Ubuntu容器,用于测试环境或临时任务:

docker run -it --rm ubuntu:22.04 /bin/bash

2. 构建自定义应用镜像(以Python应用为例)

通过Dockerfile定义应用环境,实现“一次构建,到处运行”。假设应用目录结构如下:

my-python-app/
├── app.py
├── requirements.txt
└── Dockerfile
# 使用官方Python轻量级镜像(slim版本减少体积)
FROM python:3.8-slim
# 设置工作目录(容器内的路径)
WORKDIR /app
# 复制应用代码到容器(.表示当前目录)
COPY . /app
# 安装Python依赖(--no-cache-dir避免缓存增加体积)
RUN pip install --no-cache-dir -r requirements.txt
# 暴露应用端口(容器内端口,需与宿主机映射一致)
EXPOSE 5000
# 定义容器启动命令(应用入口)
CMD ["python", "app.py"]
docker build -t my-python-app .
docker run -d -p 5000:5000 --name my-python-container my-python-app

3. 容器资源限制(避免资源滥用)

为防止容器占用过多宿主机资源,可通过以下命令限制:

# 限制CPU使用(最多使用1.5核)
docker run -it --cpus="1.5" ubuntu
# 限制内存使用(最多使用512MB,禁用交换分区)
docker run -it --memory="512m" --memory-swap=0 ubuntu

三、进阶场景:虚拟机与容器化整合

1. 将现有Ubuntu虚拟机转换为Docker容器

若已有Ubuntu虚拟机(如VirtualBox创建的.vdi镜像),可将其转换为Docker镜像:

# 导出虚拟机磁盘为raw格式(假设虚拟机名为ubuntu-vm,镜像路径为~/ubuntu.vdi)
qemu-img convert -O raw ~/ubuntu.vdi ~/ubuntu.raw
# 导入raw镜像到Docker(生成名为ubuntu-vm-image的镜像)
docker import ~/ubuntu.raw ubuntu-vm-image
# 运行容器(基于转换后的镜像)
docker run -it --name my-converted-vm ubuntu-vm-image /bin/bash

注意:转换前需备份虚拟机数据,避免丢失;转换后的镜像可能较大(需优化以减小体积)。

2. 容器网络配置(自定义网络)

默认情况下,容器使用Docker的bridge网络(隔离性强但无法直接通信)。若需容器间通信,可创建自定义网络:

# 创建自定义网络(名为my-net,驱动为bridge)
docker network create my-net
# 运行容器并连接到自定义网络(--network指定网络)
docker run -d --name web --network my-net nginx
docker run -d --name app --network my-net my-python-app

优势:同一网络内的容器可通过容器名直接访问(如app容器可通过http://web:80访问web容器的Nginx服务)。

四、常见问题排查与优化

1. 内核兼容性检查(解决Docker无法运行问题)

Docker要求宿主机内核支持特定配置(如cgroupnamespace)。可通过以下脚本检查:

# 下载并运行Docker官方检查脚本
curl -fsSL https://raw.githubusercontent.com/moby/moby/master/contrib/check-config.sh | sudo bash

2. 镜像体积优化(减少下载与存储成本)

3. 数据持久化(避免容器删除后数据丢失)

容器内的数据默认随容器删除而消失,需通过**卷(Volume)绑定挂载(Bind Mount)**实现持久化:

# 创建命名卷(宿主机自动管理路径)
docker volume create my-volume
# 运行容器并挂载卷(-v指定卷名:容器内路径)
docker run -d -v my-volume:/app/data --name my-data-container ubuntu

0
看了该问题的人还看了