尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Alpine Linux虚拟机安装Docker与Docker Compose全流程指南

Alpine Linux虚拟机安装Docker与Docker Compose全流程指南 1. 项目概述为什么选择Alpine作为Docker的轻量级底座如果你和我一样经常需要在本地搭建测试环境、快速部署服务或者单纯想找一个资源占用极低、启动飞快的Linux系统来跑容器那么Alpine Linux绝对是一个绕不开的选择。这个项目标题——“[Alpine] 安装Alpine虚拟机并安装dockerdocker-compose”——听起来像是一系列基础操作但背后其实是一套非常高效的开发运维工作流搭建。它解决的核心痛点是如何在个人电脑上用一个最小化的系统快速获得一个功能完整、干净可控的容器化开发与测试平台。Alpine以其极致的轻量化著称一个基础镜像只有5MB左右安装后的系统内存占用可以轻松控制在100MB以内。这意味着即使在配置不高的机器上你也能流畅地运行多个虚拟机或容器。更重要的是它使用musl libc和BusyBox安全性和简洁性都很好特别适合作为容器的基础操作系统。在这个项目里我们不只是按部就班地执行安装命令而是要理解每一步操作背后的意图打造一个从零开始、完全掌控的容器化沙箱。无论你是刚接触容器技术的开发者还是需要频繁重建测试环境的老手这套流程都能让你事半功倍。2. 环境准备与Alpine虚拟机安装2.1 虚拟机平台选型与考量在开始之前我们需要一个虚拟机管理软件。常见的有VMware WorkstationPlayer、VirtualBox、Hyper-V等。这里我以VMware Workstation Player为例因为它对个人用户免费且性能、兼容性和易用性都比较均衡。如果你使用Windows 10/11专业版或企业版Hyper-V也是一个原生集成的优秀选择但需要注意它和VMware/VirtualBox通常不能同时启用。选择VMware还有一个原因它的虚拟化驱动和网络配置相对稳定对于后续Docker的运行尤其是需要嵌套虚拟化或特定网络模式时干扰较少。当然VirtualBox完全免费开源也是很好的选择只是我个人在跨多个项目时VMware的稳定性体验更佳。注意无论选择哪个平台请务必在BIOS/UEFI设置中开启CPU的虚拟化支持通常叫Intel VT-x或AMD-V。这是所有虚拟机软件能高效运行的前提也是后续Docker Desktop如果报错“virtualization support not detected”时需要首先排查的地方。2.2 Alpine ISO镜像下载与校验首先访问Alpine Linux的官方网站下载页面。这里有个关键选择版本和架构。对于大多数人的个人电脑选择x86_64架构。版本方面我强烈建议选择最新稳定版的Extended版本ISO。标准版Standard非常精简而扩展版Extended包含了一些常用驱动和固件在虚拟机里兼容性更好避免出现找不到网卡等硬件的问题。下载完成后务必进行校验。官网通常会提供SHA256校验和。在Windows上你可以用PowerShell执行Get-FileHash -Algorithm SHA256 .\alpine-extended-xxx.iso来获取下载文件的哈希值并与官网对比。这一步能确保你下载的镜像完整无误避免安装过程中出现不可预知的错误。2.3 VMware虚拟机创建与Alpine系统安装创建新虚拟机在VMware中选择“创建新虚拟机”配置类型选“典型”即可。在安装客户机操作系统时选择“稍后安装操作系统”客户机操作系统选择“Linux”版本选择“其他Linux 5.x内核 64位”。虚拟机硬件配置内存Alpine本身极其省资源分配1GB1024MB内存足以流畅运行系统和多个容器。如果你的宿主机内存充裕分配2GB会更从容。处理器分配1个CPU核心1核1线程就够用分配2个核心性能会更佳。磁盘选择“创建新虚拟磁盘”磁盘类型用默认的SCSI。容量方面由于我们只装系统和Docker20GB绰绰有余。关键是选择“将虚拟磁盘拆分成多个文件”这样迁移和备份更方便。网络适配器默认的NAT模式即可。它能让虚拟机共享宿主机的IP上网同时宿主机可以访问虚拟机是最方便的开发测试网络模式。挂载ISO并启动编辑虚拟机设置在“CD/DVD”选项中选择“使用ISO映像文件”指向你下载的Alpine镜像。启动虚拟机。Alpine系统安装流程虚拟机启动后会进入Alpine的Live环境。在命令行登录用户root密码为空直接输入setup-alpine开始安装。键盘布局输入对应编号例如us美式键盘。主机名可以自定义比如alpine-docker。网卡通常会自动识别如eth0直接回车。IP地址对于NAT网络强烈建议使用dhcp动态获取最省事。手动配置是否手动配置全部选none。设置root密码输入并确认一个强密码。时区输入Asia/Shanghai。HTTP代理若无则直接回车。镜像源这一步非常重要默认的源可能很慢。输入f选择最快的镜像系统会自动测速。或者你可以手动输入一个国内的源例如阿里云的镜像源地址https://mirrors.aliyun.com/alpine/。这能极大提升后续软件包下载速度。SSH服务选择openssh这样以后可以用终端工具如MobaXterm、FinalShell远程连接比在VMware窗口里操作方便得多。安装到哪块磁盘默认是sda你创建的虚拟磁盘。使用哪种方式选择sys即安装到整个磁盘。擦除磁盘并安装输入y确认。安装完成后输入poweroff关机。回到VMware设置将“CD/DVD”改为“使用物理驱动器”或者直接移除ISO镜像。然后重新启动虚拟机。至此一个极简、纯净的Alpine Linux系统就安装完成了。启动后用root用户登录你已经拥有了一个完全可控的Linux环境。3. Alpine系统初始化与Docker引擎安装3.1 系统更新与基础工具配置刚安装好的系统是最小化的我们需要先更新软件包索引并安装一些必要工具。# 更新本地软件包索引 apk update # 升级所有已安装的软件包 apk upgrade # 安装一些常用工具方便后续操作 apk add curl wget bash bash-completion vim tree sudo安装bash是因为Alpine默认使用ashbash的脚本兼容性和功能更丰富。sudo允许普通用户执行特权命令为了安全我们可以创建一个日常使用的普通用户。# 添加一个用户例如叫 ‘dev’ adduser dev # 将用户 ‘dev’ 添加到 wheel 组该组默认有sudo权限 adduser dev wheel # 编辑sudoers文件确保wheel组有权限 visudo在打开的编辑器中找到# %wheel ALL(ALL) ALL这一行去掉行首的#注释符号然后保存退出。这样以后就可以用dev用户登录并在需要时使用sudo。3.2 Docker社区版安装详解Alpine的包管理器apk提供了Docker的安装包但通常版本不是最新的。为了获得最新的特性和安全更新我们采用Docker官方提供的安装脚本或者使用官方仓库。方法一使用官方仓库安装推荐这种方法更规范便于后续管理和升级。# 1. 安装必要的依赖包 sudo apk add --no-cache docker-cli docker-engine # 但实际上更标准的方式是添加Docker的官方仓库 # 2. 安装依赖允许apk通过HTTPS使用仓库 sudo apk add --no-cache ca-certificates curl # 3. 添加Docker的官方GPG密钥确保软件包来源可信 sudo install -m 0755 -d /etc/apt/keyrings # 这个目录结构是给Debian/Ubuntu的Alpine不需要我们直接下载密钥 sudo curl -fsSL https://download.docker.com/linux/alpine/gpg -o /etc/apk/keys/docker.asc # 4. 添加Docker的APK仓库 # 首先确定Alpine的版本代号例如v3.19 echo https://download.docker.com/linux/alpine/$(cut -d. -f1,2 /etc/alpine-release)/stable | sudo tee /etc/apk/repositories.d/docker.list # 5. 更新apk索引并从新仓库安装Docker sudo apk update sudo apk add docker docker-cli docker-compose-plugin方法二使用官方便捷脚本快速Docker提供了一个自动化安装脚本适合快速搭建测试环境。# 下载并执行安装脚本 curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh执行完毕后脚本会自动完成所有安装和配置。无论用哪种方法安装完成后都需要启动Docker服务并设置开机自启。# 启动Docker守护进程 sudo service docker start # 或者使用rc-service (Alpine的初始化系统) sudo rc-service docker start # 设置Docker开机自启 sudo rc-update add docker boot3.3 安装后配置与权限管理默认情况下只有root用户和docker组的用户才能运行Docker命令。为了避免每次都用sudo我们需要将当前用户dev加入到docker组。# 将用户 ‘dev’ 加入到 docker 用户组 sudo addgroup dev docker # 或者直接使用gpasswd如果addgroup不支持 # sudo adduser dev docker # 重要更新组信息。你需要退出当前会话并重新登录或者使用以下命令使组更改在当前shell生效。 newgrp docker现在你可以尝试运行一个测试容器验证Docker是否安装成功# 运行一个经典的Hello World容器 docker run --rm hello-world如果看到“Hello from Docker!”等欢迎信息说明Docker引擎已经安装并运行正常。实操心得在Alpine上Docker的存储驱动默认是overlay2这是目前性能最好、最推荐的后端。你可以通过docker info | grep Storage来确认。Alpine的轻量特性与overlay2驱动结合使得容器创建和运行速度非常快。4. Docker Compose的安装与项目化部署4.1 Docker Compose的两种安装方式Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。现在它主要有两种形态独立的docker-composev1和作为Docker CLI插件的docker-compose-pluginv2。官方推荐使用插件版本。方式一安装Docker Compose Plugin推荐如果你在安装Docker时已经按照3.2节的方法一添加了官方仓库那么docker-compose-plugin很可能已经一并安装了。你可以通过以下命令检查docker compose version如果显示版本号说明插件已安装。如果没有可以单独安装sudo apk add docker-compose-plugin安装后使用命令是docker compose注意中间没有横线。方式二安装独立版本的Docker Compose虽然插件是未来但很多现有脚本和文档仍在使用独立的docker-compose命令。我们也可以安装它。# 确定要下载的版本例如 v2.24.6 DOCKER_COMPOSE_VERSIONv2.24.6 # 下载二进制文件到 /usr/local/bin/docker-compose sudo curl -L https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose # 授予二进制文件可执行权限 sudo chmod x /usr/local/bin/docker-compose # 创建软链接确保在PATH中可选通常/usr/local/bin已在PATH中 # sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose # 验证安装 docker-compose --version4.2 编写你的第一个docker-compose.ymlDocker Compose的核心是一个docker-compose.yml文件。我们来创建一个最简单的示例部署一个Nginx web服务器和一个简单的Python Flask应用。首先创建一个项目目录并进入mkdir my-docker-app cd my-docker-app创建docker-compose.yml文件version: 3.8 # 指定Compose文件格式版本 services: # 定义一个名为‘web’的服务 web: image: nginx:alpine # 使用Alpine版本的Nginx镜像更轻量 container_name: my-nginx ports: - 8080:80 # 将宿主机的8080端口映射到容器的80端口 volumes: - ./html:/usr/share/nginx/html # 挂载本地html目录到容器 networks: - app-network restart: unless-stopped # 设置重启策略 # 定义一个名为‘app’的服务 app: build: ./app # 指定构建上下文目录Dockerfile位于./app container_name: my-flask-app ports: - 5000:5000 environment: - FLASK_ENVdevelopment volumes: - ./app:/app # 挂载代码目录便于开发时热重载 networks: - app-network depends_on: - web # 表示app服务依赖于web服务仅控制启动顺序 # 定义自定义网络使服务间可以通过服务名通信 networks: app-network: driver: bridge然后创建相关的目录和文件# 创建挂载目录和默认页面 mkdir html echo h1Hello from Nginx on Alpine!/h1 html/index.html # 创建Flask应用目录和Dockerfile mkdir app创建app/app.py:from flask import Flask app Flask(__name__) app.route(/) def hello(): return Hello from Flask inside Docker Compose! if __name__ __main__: app.run(host0.0.0.0, port5000)创建app/Dockerfile:# 使用Python Alpine镜像 FROM python:3.11-alpine # 设置工作目录 WORKDIR /app # 复制依赖文件并安装 COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # 复制应用代码 COPY . . # 暴露端口 EXPOSE 5000 # 启动命令 CMD [python, app.py]创建app/requirements.txt:Flask2.3.34.3 使用Compose启动与管理多服务应用一切就绪后在my-docker-app目录下执行一条命令即可启动所有服务# 使用插件版本 docker compose up -d # 或者使用独立版本 docker-compose up -d-d参数表示在后台运行守护进程模式。现在你可以进行以下操作访问服务在宿主机浏览器打开http://localhost:8080看到Nginx页面打开http://localhost:5000看到Fl应用响应。查看日志docker compose logs -f # 查看所有服务日志 docker compose logs -f web # 只看web服务日志查看运行状态docker compose ps停止服务docker compose downdown命令会停止并移除所有容器、网络但不会移除镜像和卷除非加-v参数。注意事项在开发阶段我们通过volumes将本地代码目录挂载到容器内这样修改本地代码容器内的应用会自动重载如Flask开发服务器。但在生产环境部署时应该构建镜像并将代码复制进去而不是依赖挂载。5. 网络、存储与性能调优5.1 Docker网络模式解析与容器互联Docker提供了几种网络模式理解它们对部署多容器应用至关重要。使用docker network ls可以查看现有网络。bridge桥接默认模式。Docker会创建一个名为docker0的虚拟网桥每个容器分配一个独立IP容器间可以通过IP通信。在Compose中默认会为每个项目创建一个独立的bridge网络服务间可以通过服务名直接通信如上面的web和app这是最常用的模式。host主机容器直接使用宿主机的网络命名空间没有独立的IP容器端口直接映射到宿主机端口。性能最好但端口冲突风险高。none容器没有网络栈只有lo回环接口用于完全隔离网络的场景。自定义网络如我们在docker-compose.yml中定义的app-network。它比默认bridge提供更好的服务发现DNS和隔离性。容器间通信测试在我们的Compose例子中app服务如果想访问web服务可以直接在代码中使用http://web:80这个地址因为Docker内置的DNS会将服务名web解析到对应容器的IP。5.2 数据持久化Volume与Bind Mount的选择容器是无状态的数据需要持久化存储。Docker主要有两种方式Volume卷由Docker管理存储在宿主机文件系统的一部分通常是/var/lib/docker/volumes/与容器生命周期解耦。是持久化数据的最佳实践。# 创建卷 docker volume create my-data # 在Compose中使用 # volumes: # - my-data:/app/dataBind Mount绑定挂载将宿主机上的一个特定目录或文件挂载到容器。性能好但依赖宿主机路径可移植性差。我们之前在开发时挂载代码目录用的就是这种方式。tmpfs mount仅存储在宿主机的内存中永不写入磁盘适用于临时敏感数据。在docker-compose.yml中顶层的volumes键用于声明卷服务下的volumes键用于挂载。5.3 Alpine系统与Docker性能优化建议镜像源加速这是在国内提升体验最关键的一步。为Docker配置国内镜像加速器。创建或编辑/etc/docker/daemon.json文件{ registry-mirrors: [ https://docker.mirrors.ustc.edu.cn, https://hub-mirror.c.163.com, https://mirror.baidubce.com ] }保存后重启Docker服务sudo service docker restart。之后拉取镜像速度会快很多。资源限制在VMware中你可以为Alpine虚拟机分配更多的CPU核心和内存以支持运行更多容器。在Docker层面也可以在docker run或Compose文件中使用--cpus、--memory等参数限制单个容器的资源使用避免某个容器耗尽所有资源。使用.dockerignore文件在构建镜像的目录下创建.dockerignore文件忽略不需要的文件如.git,__pycache__,node_modules等可以显著减少构建上下文大小加速镜像构建。选择Alpine基础镜像在编写自己的Dockerfile时尽量选择-alpine后缀的官方镜像如python:3.11-alpine,nginx:alpine。这能保证整个容器栈的轻量化与宿主Alpine系统风格统一。6. 常见问题排查与实战技巧6.1 安装与启动故障排除问题1在Alpine上安装Docker时提示缺少依赖或报错。原因可能是软件包索引未更新或者网络问题导致无法访问仓库。解决运行apk update更新索引。检查网络连接ping -c 4 8.8.8.8。确认已安装ca-certificates包以支持HTTPS。如果使用官方仓库检查/etc/apk/repositories.d/docker.list文件中的仓库地址是否正确。问题2运行docker run命令时报错“Cannot connect to the Docker daemon”。原因Docker服务没有启动或者当前用户没有docker用户组权限。解决检查服务状态sudo service docker status。如果未运行则启动它sudo service docker start。检查当前用户是否在docker组groups。如果不在参考3.3节添加用户到组并重新登录终端会话。问题3Docker Desktop用户遇到的“virtualization support not detected”或类似错误。说明本项目是在Alpine虚拟机内安装Docker引擎与在Windows/macOS上安装Docker Desktop是两回事。Docker Desktop需要在宿主机开启虚拟化如Hyper-V、WSL2后端。如果你在宿主机安装Docker Desktop失败请检查BIOS虚拟化是否开启并确保符合Docker Desktop的系统要求。6.2 容器运行与网络连接问题问题1容器端口映射后在宿主机无法访问如localhost:8080打不开。排查步骤确认容器在运行docker ps查看容器状态是否为Up。确认端口映射正确docker port 容器名查看实际映射。检查防火墙Alpine默认使用iptablesDocker会自动配置规则。但宿主机Windows/Mac的防火墙可能阻止了VMware虚拟网卡的通信。尝试暂时关闭宿主机防火墙测试。检查VMware网络模式确保虚拟机网络适配器是NAT或桥接模式并且能正常上网。问题2Compose中的服务间无法通过服务名通信。原因服务没有在同一个自定义网络中或者DNS解析有问题。解决确保docker-compose.yml中所有需要通信的服务都定义了相同的网络如app-network。运行docker network inspect 项目名_app-network查看网络详情和连接的容器。进入一个容器内部测试docker exec -it 容器名 sh然后ping web看是否能解析到IP。6.3 日常维护与高效操作命令掌握一些命令组合能极大提升效率清理无用资源# 删除所有已停止的容器 docker container prune -f # 删除所有未被使用的镜像谨慎会删除中间镜像和悬空镜像 docker image prune -a -f # 删除所有未被使用的卷非常谨慎会丢失数据 docker volume prune -f # 一键清理所有容器、镜像、网络、卷build缓存 docker system prune -a -f --volumes查看容器资源占用docker stats进入容器Shelldocker exec -it 容器名或ID sh # Alpine容器通常用sh跟随查看日志docker compose logs -f --tail50备份与迁移整个环境的核心是docker-compose.yml文件。要迁移时只需要复制这个文件以及相关的Dockerfile、代码目录和卷数据如果有。在新的Alpine虚拟机上安装好Docker和Compose把文件放过去运行docker compose up -d即可重建整个应用栈。从一张干净的Alpine虚拟机开始到建立起一个完整的、可项目化管理的Docker环境这个过程本身就是一个对容器化技术栈的深度实践。它剥离了图形界面的干扰让你更专注于核心服务定义、编排和运维。这个轻量、可控的环境无论是用于学习、开发测试还是作为轻量级生产部署的模板都极具价值。最关键的是你完全清楚每一个环节是如何构建起来的这种掌控感是应对更复杂运维场景的坚实基础。
返回列表