VirtualBox虚拟机中Docker部署与实战:从零搭建到服务配置 1. VirtualBox虚拟机环境准备在开始Docker部署之前我们需要先搭建一个稳定的VirtualBox虚拟机环境。VirtualBox作为一款开源的虚拟化软件能够完美模拟出独立的Linux操作系统环境非常适合用来学习和测试Docker技术。我推荐使用CentOS 8作为基础系统因为它对Docker的支持非常友好。首先从官网下载CentOS 8的ISO镜像文件建议选择Minimal版本这样既节省空间又避免了不必要的软件干扰。下载完成后打开VirtualBox点击新建按钮按照向导创建一个新的虚拟机。这里有几个关键配置需要注意内存分配建议至少分配2GB内存如果主机配置允许4GB会更流畅硬盘空间40GB的虚拟硬盘足够日常使用网络设置初次使用建议选择NAT模式简单易用安装CentOS时记得创建一个普通用户比如名为dockeruser同时设置好root密码。安装完成后别忘了执行系统更新sudo dnf update -y sudo reboot提示VirtualBox安装CentOS后建议安装增强功能Guest Additions这样可以获得更好的显示效果和文件共享支持。执行命令sudo dnf install -y kernel-devel gcc make perl然后在VirtualBox菜单选择设备-安装增强功能。2. Docker安装与配置2.1 安装Docker CE在CentOS上安装Docker有多种方式我推荐使用官方仓库安装这样既方便后续升级又能保证软件来源的可靠性。首先清理系统中可能存在的旧版本Dockersudo dnf remove -y docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine接着安装必要的工具包和设置稳定版仓库sudo dnf install -y yum-utils device-mapper-persistent-data lvm2 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo最后安装Docker引擎和常用组件sudo dnf install -y docker-ce docker-ce-cli containerd.io安装完成后启动Docker服务并设置开机自启sudo systemctl start docker sudo systemctl enable docker2.2 验证安装通过运行hello-world镜像来验证Docker是否安装成功sudo docker run hello-world如果看到Hello from Docker!的欢迎信息说明安装已经成功。你还可以查看更详细的版本信息docker version docker info3. 镜像源优化配置3.1 配置国内镜像加速默认情况下Docker会从Docker Hub拉取镜像但由于网络原因国内用户经常会遇到下载速度慢甚至失败的情况。我们可以配置国内镜像源来解决这个问题。首先创建或修改Docker的daemon配置文件sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json -EOF { registry-mirrors: [ https://docker.mirrors.ustc.edu.cn, https://hub-mirror.c.163.com, https://registry.docker-cn.com ] } EOF然后重新加载配置并重启Docker服务sudo systemctl daemon-reload sudo systemctl restart docker3.2 验证镜像加速可以通过以下命令检查镜像加速是否生效docker info | grep Mirrors -A 5如果看到配置的镜像地址出现在输出中说明配置成功。现在拉取镜像的速度应该会有显著提升。4. Docker基础操作实战4.1 镜像管理Docker镜像是容器运行的基础掌握镜像管理是使用Docker的第一步。让我们从最基础的镜像操作开始搜索镜像docker search nginx拉取镜像docker pull nginx:latest查看本地镜像docker images删除镜像docker rmi 镜像ID我经常使用Alpine Linux作为基础镜像因为它非常轻量docker pull alpine4.2 容器操作有了镜像后我们就可以创建和运行容器了。以下是一些常用命令运行容器docker run -it --name myalpine alpine sh查看运行中的容器docker ps查看所有容器docker ps -a停止容器docker stop 容器ID启动已停止的容器docker start 容器ID进入运行中的容器docker exec -it 容器ID sh删除容器docker rm 容器ID一个实用的技巧是使用--rm参数运行临时容器退出后自动删除docker run --rm -it alpine sh5. Web服务部署实战5.1 部署Nginx服务让我们以Nginx为例演示如何在Docker中部署Web服务。首先拉取官方Nginx镜像docker pull nginx然后运行一个Nginx容器docker run --name mynginx -d -p 8080:80 nginx这里解释一下参数-d后台运行容器-p 8080:80将主机的8080端口映射到容器的80端口现在你可以在主机浏览器访问http://localhost:8080应该能看到Nginx的欢迎页面。5.2 自定义网页内容默认的Nginx欢迎页面没什么意思我们来替换成自己的网页。首先创建一个简单的HTML文件mkdir -p ~/nginx-html echo h1Hello from Docker Nginx!/h1 ~/nginx-html/index.html然后使用数据卷挂载的方式运行Nginxdocker run --name custom-nginx -d \ -p 8081:80 \ -v ~/nginx-html:/usr/share/nginx/html \ nginx现在访问http://localhost:8081就能看到我们自定义的内容了。这种方式的好处是修改主机上的HTML文件会立即反映在容器中无需重新构建镜像。5.3 配置端口转发要让局域网内的其他设备也能访问这个Nginx服务我们需要配置VirtualBox的端口转发。打开VirtualBox管理界面选择你的虚拟机进入设置-网络-高级-端口转发添加一条规则名称nginx协议TCP主机IP留空主机端口8080子系统IP留空子系统端口8080保存后局域网内的其他设备就可以通过主机的IP和8080端口访问这个Nginx服务了。6. 数据持久化与容器管理6.1 数据卷使用Docker容器默认是临时性的当容器删除后其中的数据也会丢失。为了持久化数据我们可以使用数据卷(Volume)# 创建命名卷 docker volume create mydata # 使用数据卷运行容器 docker run -d --name db \ -v mydata:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORDsecret \ mysql:5.76.2 容器资源限制在生产环境中限制容器的资源使用非常重要。我们可以通过以下参数控制容器的资源docker run -d --name limited-nginx \ --memory512m \ --cpus1.5 \ nginx6.3 容器日志管理Docker会自动收集容器的标准输出和错误输出。查看日志的命令docker logs mynginx docker logs --tail 50 -f mynginx # 实时查看最后50行日志对于长期运行的容器建议配置日志轮转docker run --log-opt max-size10m --log-opt max-file3 ...7. 常见问题排查在实际使用中你可能会遇到各种问题。这里分享几个我踩过的坑和解决方法问题1端口冲突错误信息Bind for 0.0.0.0:8080 failed: port is already allocated解决方法更改端口号或停止占用端口的容器问题2权限拒绝错误信息Got permission denied while trying to connect to the Docker daemon socket解决方法将当前用户加入docker组sudo usermod -aG docker $USER newgrp docker问题3镜像拉取失败错误信息net/http: TLS handshake timeout解决方法检查镜像加速配置或者尝试更换其他镜像源问题4磁盘空间不足错误信息no space left on device解决方法清理无用镜像和容器docker system prune -a