公司动态

阿里云服务器Docker部署实战:从零搭建云端容器化环境

📅 2026/8/25 20:02:24
阿里云服务器Docker部署实战:从零搭建云端容器化环境
这次我们来看一个非常实用的技术操作如何在阿里云服务器上完成 Docker 的完整部署。对于开发者、运维人员或是想学习容器化技术的朋友来说拥有一台随时可用的云服务器作为 Docker 实验环境是提升效率、避免本地环境冲突的最佳选择。本文的核心不是空谈概念而是提供一套从零开始、可落地的操作指南。我们将重点关注几个关键点如何选择性价比合适的阿里云服务器配置、如何完成服务器的初始化安全设置、如何在不同操作系统上安装 Docker以及如何通过一个简单的 Web 应用来验证 Docker 服务是否正常运行。整个过程力求清晰、直接让你看完就能动手操作快速搭建起自己的云端容器化平台。1. 核心能力速览在开始具体步骤之前我们先快速了解通过本文你将获得的核心能力以及整个流程的关键节点。能力项说明目标平台阿里云 ECS弹性计算服务核心任务完成从购买服务器到 Docker 服务可用的全流程部署涉及技术栈Linux 系统管理、SSH 安全连接、Docker Engine、容器镜像硬件门槛最低 1核2G 配置即可运行 Docker 基础服务建议 2核4G 以获得更好体验环境依赖需准备阿里云账号、可联网的电脑、SSH 客户端如 Xshell, FinalShell, 或系统终端部署成果一台可通过公网 IP 访问、已安装并启动 Docker 的云服务器并能运行示例容器适合场景个人学习、项目测试、微服务部署、CI/CD 环境搭建、避免本地环境污染2. 适用场景与使用边界在云服务器上部署 Docker主要服务于以下几类具体需求适合谁初学者与学习者需要一个干净、独立的 Linux 环境来系统学习 Docker 命令和容器概念避免弄乱本地电脑。全栈与后端开发者开发微服务应用时需要在接近生产环境的环境中测试 Docker 镜像的构建与运行。运维与 DevOps 工程师搭建持续集成/持续部署CI/CD的测试节点或部署如 GitLab、Jenkins、监控系统等容器化应用。个人项目部署者希望以较低成本、标准化方式部署自己的博客、API 服务或小型应用。能解决什么问题环境一致性确保应用在开发、测试、生产环境中的运行表现一致。资源隔离单个服务器上可运行多个互不干扰的容器化应用。快速部署与伸缩基于镜像的部署方式极快便于水平扩展。简化依赖管理应用及其所有依赖被打包在镜像中无需在宿主机上复杂配置。不适合什么场景超低延迟本地开发如果开发调试对网络延迟极其敏感本地 Docker 仍是首选。无公网访问需求的内网服务若服务仅供内网访问使用内网虚拟机或物理机可能更简单。对成本极度敏感的原型验证仅做一次性概念验证使用本地 Docker 或 Docker Desktop 零成本。安全与合规边界服务器安全云服务器暴露在公网必须设置强密码或密钥对并配置安全组规则仅开放必要端口如 SSH 的 22 Web 服务的 80/443。镜像来源优先使用 Docker Hub 官方镜像或可信来源的镜像避免运行来路不明的镜像以防安全风险。数据持久化容器内数据默认随容器删除而丢失重要数据应通过 Volume数据卷挂载到宿主机或使用云存储。资源监控注意监控云服务器的 CPU、内存、磁盘和网络流量使用情况避免因应用异常导致资源耗尽产生额外费用。3. 环境准备与前置条件开始动手之前请确保你已准备好以下内容阿里云账号拥有一个实名认证的阿里云账号。新用户通常有免费试用或优惠活动。支付方式在阿里云账户中绑定有效的支付方式如支付宝、信用卡用于结算服务器费用。本地 SSH 客户端Windows 用户推荐使用Xshell、FinalShell、MobaXterm或 Windows 10/11 自带的PowerShell/Windows Terminal需启用 OpenSSH 客户端。macOS/Linux 用户直接使用系统自带的终端Terminal即可。网络环境确保你的本地电脑可以稳定访问互联网。基础认知对 Linux 基础命令如ls,cd,vim,systemctl有初步了解会更顺利。4. 阿里云服务器购买与初始化配置这是整个流程的起点我们将一步步选择并启动一台云服务器。4.1 登录控制台与创建实例访问 阿里云官网 登录你的账号。在控制台首页找到“产品”或搜索“ECS”进入弹性计算服务管理控制台。点击“创建实例”或“购买实例”按钮开始配置。4.2 关键配置选项选择在创建页面你需要做出以下关键选择计费方式对于学习和测试选择“按量付费”最为灵活用多久付多久随时可释放。长期稳定使用可考虑“包年包月”。地域与可用区选择一个离你的目标用户近或网络延迟低的地域如华北2-北京、华东2-上海。可用区默认即可。实例规格系列选择“通用型 g”或“计算型 c”系列。规格入门学习选择ecs.g6.large(2vCPU 4GiB)性价比很高。如果预算有限最低可选ecs.t6-c1m1.large(1vCPU 1GiB)但运行稍复杂的容器会比较吃力。在筛选时可以留意“是否支持I/O优化”建议选择支持的规格。镜像这是服务器的操作系统。强烈推荐选择Alibaba Cloud Linux 3或Ubuntu 22.04。它们对阿里云生态兼容性好且软件源更新及时。本文后续命令以Alibaba Cloud Linux 3为例。系统盘默认的ESSD云盘 40GiB即可满足大部分需求。公网IP务必勾选“分配公网 IPv4 地址”否则你将无法从外网访问这台服务器。带宽计费模式选择“按使用流量”并设置一个峰值带宽如 1Mbps 或 3Mbps这样只有在产生流量时才计费成本更低。安全组这是云服务器的虚拟防火墙。创建新安全组并至少添加两条规则规则1授权策略允许协议类型SSH(22)端口范围22/22授权对象0.0.0.0/0为安全起见后期可改为你自己的公网IP。规则2授权策略允许协议类型HTTP(80)端口范围80/80授权对象0.0.0.0/0用于后续测试Web服务。登录凭证推荐使用“密钥对”创建新密钥对将私钥文件.pem妥善保存到本地这是最安全的登录方式。也可以选择“自定义密码”设置一个高强度的 root 用户密码。确认配置无误后阅读并同意服务条款点击“创建实例”。系统需要几分钟来创建并启动你的服务器。4.3 获取连接信息并首次登录在 ECS 实例列表中找到你刚创建的服务器记录其公网 IP 地址。使用 SSH 客户端连接如果使用密钥对# 在本地终端执行将 your-private-key.pem 替换为你的私钥文件路径将 123.123.123.123 替换为你的公网IP ssh -i /path/to/your-private-key.pem root123.123.123.123首次连接会提示确认主机指纹输入yes继续。如果使用密码ssh root123.123.123.123然后输入你设置的自定义密码。登录成功后你将看到类似[rootiZbp1 ~]#的命令行提示符表示已进入服务器。5. Docker 安装部署与启动成功登录服务器后我们开始安装 Docker。不同 Linux 发行版的安装命令略有差异。5.1 在 Alibaba Cloud Linux 3 上安装 DockerAlibaba Cloud Linux 3 默认集成了 Docker 的安装源安装非常方便。更新系统包索引yum makecache安装 Docker CE (社区版)yum install -y docker-ce docker-ce-cli containerd.io这个命令会安装 Docker 引擎、命令行工具和容器运行时。启动 Docker 服务并设置开机自启systemctl start docker systemctl enable docker验证安装docker --version如果安装成功会输出 Docker 的版本信息如Docker version 24.0.7, build afdd53b。5.2 在 Ubuntu 22.04 上安装 Docker如果你选择的是 Ubuntu 系统请按以下步骤操作。卸载旧版本如有sudo apt-get remove docker docker-engine docker.io containerd runc安装依赖包sudo apt-get update sudo apt-get install -y ca-certificates curl gnupg lsb-release添加 Docker 官方 GPG 密钥sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg设置稳定版仓库echo \ deb [arch$(dpkg --print-architecture) signed-by/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable | sudo tee /etc/apt/sources.list.d/docker.list /dev/null安装 Docker Enginesudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin启动服务并验证同 Alibaba Cloud Linux 步骤sudo systemctl start docker sudo systemctl enable docker docker --version5.3 配置非 root 用户运行 Docker可选但推荐默认情况下运行docker命令需要root权限。为了方便和安全可以将当前用户加入docker用户组。# 创建 docker 用户组通常安装时已自动创建 sudo groupadd docker # 将当前用户加入 docker 用户组 sudo usermod -aG docker $USER # 退出当前 SSH 会话重新登录使组权限生效 exit重新登录后即可直接使用docker命令无需sudo。6. 功能测试与效果验证运行第一个容器安装完成后必须通过运行一个实际的容器来验证 Docker 服务是否完全正常。6.1 测试目的验证 Docker 守护进程运行正常能够从 Docker Hub 拉取镜像并成功创建、运行、访问一个容器化应用。6.2 运行 Nginx 测试容器我们将运行一个最经典的 Nginx Web 服务器容器。从 Docker Hub 拉取 Nginx 镜像docker pull nginx:alpinealpine标签表示一个非常小巧的 Linux 发行版镜像下载速度快。执行后Docker 会开始下载镜像层。以后台模式运行 Nginx 容器docker run -d --name my-nginx-test -p 8080:80 nginx:alpine-d后台运行容器。--name my-nginx-test给容器起一个名字便于管理。-p 8080:80端口映射。将宿主机的8080端口映射到容器的80端口Nginx 默认端口。nginx:alpine使用的镜像名。检查容器运行状态docker ps你应该能看到一个名为my-nginx-test的容器状态为Up正在运行。6.3 验证 Web 服务可访问现在我们可以通过两种方式验证服务是否成功运行在服务器内部验证curl http://localhost:8080如果返回一大段 HTML 代码包含 “Welcome to nginx!”说明容器内的 Nginx 服务运行正常。从你的本地电脑浏览器访问 打开你本地电脑的浏览器在地址栏输入http://你的服务器公网IP:8080例如http://123.123.123.123:8080如果能看到 Nginx 的欢迎页面恭喜你这标志着 Docker 在阿里云服务器上的部署、运行和网络映射全部成功。6.4 清理测试容器测试完成后为了保持环境整洁可以停止并删除这个测试容器。# 停止容器 docker stop my-nginx-test # 删除容器 docker rm my-nginx-test # 可选删除不再使用的镜像以节省空间 docker rmi nginx:alpine7. Docker 基本操作与容器管理部署成功只是第一步以下是日常使用中最频繁的操作命令帮助你管理容器和镜像。7.1 镜像Image相关命令# 搜索镜像在 Docker Hub docker search ubuntu # 拉取镜像 docker pull ubuntu:22.04 # 列出本地所有镜像 docker images # 删除本地镜像 docker rmi 镜像ID或镜像名:标签 # 导出镜像为文件用于备份或迁移 docker save -o ubuntu2204.tar ubuntu:22.04 # 从文件加载镜像 docker load -i ubuntu2204.tar7.2 容器Container相关命令# 运行一个新容器交互式并进入bash docker run -it --name my_ubuntu ubuntu:22.04 /bin/bash # 运行一个新容器后台模式 docker run -d --name my_web -p 80:80 nginx # 列出正在运行的容器 docker ps # 列出所有容器包括已停止的 docker ps -a # 停止容器 docker stop 容器名或容器ID # 启动已停止的容器 docker start 容器名或容器ID # 重启容器 docker restart 容器名或容器ID # 进入正在运行的容器打开新的终端 docker exec -it 容器名或容器ID /bin/bash # 查看容器日志 docker logs 容器名或容器ID docker logs -f 容器名或容器ID # 实时跟踪日志 # 删除已停止的容器 docker rm 容器名或容器ID docker rm -f 容器名或容器ID # 强制删除运行中的容器 # 复制文件到容器 docker cp local_file.txt 容器名或容器ID:/path/in/container/ # 从容器复制文件到宿主机 docker cp 容器名或容器ID:/path/in/container/file.txt ./8. 进阶配置与最佳实践为了让 Docker 环境更高效、更安全建议进行以下配置。8.1 配置 Docker 镜像加速器从 Docker Hub 拉取镜像在国内可能较慢配置国内镜像加速器可以极大提升下载速度。编辑 Docker 守护进程配置文件sudo vim /etc/docker/daemon.json如果文件不存在则新建它。输入以下内容以阿里云镜像加速器为例你需要去阿里云容器镜像服务控制台获取专属加速器地址{ registry-mirrors: [ https://your-aliyun-mirror.mirror.aliyuncs.com, https://docker.mirrors.ustc.edu.cn, https://registry.docker-cn.com ] }注意将https://your-aliyun-mirror.mirror.aliyuncs.com替换为你从阿里云控制台获取的实际加速器地址。保存并退出编辑器在 vim 中按Esc输入:wq回车。重新加载配置并重启 Docker 服务sudo systemctl daemon-reload sudo systemctl restart docker验证加速器是否生效docker info在输出信息中查找Registry Mirrors确认列表中包含了你配置的镜像地址。8.2 数据持久化使用数据卷Volume容器内的数据是易失的。为了持久化存储如数据库文件、应用配置文件必须使用数据卷。# 创建一个名为 my_data 的卷 docker volume create my_data # 运行一个容器并将卷挂载到容器内的 /app/data 目录 docker run -d --name my_app -v my_data:/app/data some_image # 查看所有数据卷 docker volume ls # 查看某个卷的详细信息包括在宿主机上的实际存储路径 docker volume inspect my_data8.3 使用 Docker Compose 编排多容器应用对于需要多个容器协同工作的应用如 Web 应用 数据库 缓存使用 Docker Compose 可以简化管理。安装 Docker Compose Plugin在安装 Docker 时可能已包含# 对于 Alibaba Cloud Linux 3 / CentOS/RHEL yum install -y docker-compose-plugin # 对于 Ubuntu在之前安装 docker-ce 时已包含 docker-compose-plugin编写docker-compose.yml文件 在项目目录下创建一个docker-compose.yml文件示例内容如下version: 3.8 services: web: image: nginx:alpine container_name: my_web ports: - 80:80 volumes: - ./html:/usr/share/nginx/html # 挂载本地html目录 restart: unless-stopped mysql: image: mysql:8.0 container_name: my_mysql environment: MYSQL_ROOT_PASSWORD: your_strong_password MYSQL_DATABASE: myapp volumes: - mysql_data:/var/lib/mysql restart: unless-stopped volumes: mysql_data:启动服务栈docker compose up -d这个命令会根据 YAML 文件定义自动拉取镜像、创建网络、启动所有服务。查看状态与管理docker compose ps # 查看本项目的容器状态 docker compose logs -f web # 查看web服务的日志 docker compose down # 停止并移除所有容器、网络保留数据卷 docker compose down -v # 停止并移除所有容器、网络、数据卷9. 资源占用与性能观察在云服务器上运行 Docker需要关注系统资源的使用情况避免单个容器耗尽资源影响宿主机。9.1 查看容器资源使用# 查看所有容器的实时资源占用类似 top 命令 docker stats # 查看指定容器的详细资源限制和使用情况 docker inspect 容器名或容器ID | grep -A 10 -B 5 Memory\|CpuShares9.2 为容器设置资源限制在docker run或docker-compose.yml中可以限制容器的资源使用。# 运行一个容器并限制其 CPU 和内存使用 docker run -d \ --name limited_container \ --cpus1.5 \ # 最多使用 1.5 个 CPU 核心 --memory512m \ # 内存限制为 512 MB --memory-swap1g \ # 内存交换分区总共 1 GB nginx:alpine9.3 监控宿主机资源使用 Linux 系统命令监控服务器整体资源。# 查看 CPU 和内存使用概况 htop # 如果未安装先运行 yum install htop 或 apt install htop # 或使用 top # 查看磁盘使用情况 df -h # 查看网络连接和端口监听情况 netstat -tulnp # 或使用更现代的 ss 命令 ss -tulnp10. 常见问题与排查方法在部署和使用过程中你可能会遇到以下问题。这里提供快速的排查思路。问题现象可能原因排查方式解决方案SSH 连接失败1. 安全组未放行 22 端口。2. 服务器未启动。3. IP 地址或密钥错误。1. 检查阿里云控制台安全组规则。2. 检查实例状态是否为“运行中”。3. 核对 IP 和密钥文件路径。1. 添加入站规则允许 SSH。2. 启动实例。3. 使用ssh -v查看详细连接过程。docker pull速度极慢默认从 Docker Hub 拉取网络不佳。运行docker info查看Registry Mirrors是否配置。配置国内镜像加速器见第8.1节。docker run提示端口冲突宿主机上该端口已被其他进程占用。运行ss -tulnp | grep :端口号查看占用进程。1. 停止占用端口的进程。2. 修改-p参数映射到其他空闲端口。容器启动后立即退出1. 容器内主进程执行完毕退出。2. 镜像默认命令错误。运行docker logs 容器名查看退出前的日志。1. 对于需要持久运行的容器如 Nginx确保使用-d后台运行。2. 检查 Dockerfile 或镜像的CMD/ENTRYPOINT。容器内无法访问外网1. 宿主机网络问题。2. Docker 网络配置问题。1. 在宿主机ping 8.8.8.8。2. 进入容器docker exec -it 容器名 ping 8.8.8.8。1. 检查宿主机 DNS 配置 (/etc/resolv.conf)。2. 重启 Docker 服务systemctl restart docker。Permission denied错误当前用户没有 Docker 命令的执行权限。运行groups查看当前用户所在组。将用户加入docker组见第5.3节并重新登录SSH会话。磁盘空间不足过多镜像、容器或卷占满空间。运行docker system df查看 Docker 磁盘使用。1. 清理无用镜像、容器、卷docker system prune -a谨慎使用。2. 扩容云服务器系统盘。Docker 服务无法启动1. 内核版本或系统不支持。2. 配置文件错误。运行systemctl status docker和journalctl -xe -u docker查看错误详情。1. 检查系统是否满足 Docker 要求。2. 检查/etc/docker/daemon.json格式是否正确。11. 总结与下一步至此你已经成功在阿里云服务器上完成了 Docker 环境的搭建、验证和基础配置。这套环境为你打开了容器化技术的大门。最值得尝试的下一步就是把你本地开发的应用打包成 Docker 镜像并部署到这台云服务器上运行。最先应该验证的功能尝试使用Dockerfile构建一个属于你自己的镜像。例如将一个简单的 Python Flask 应用或静态网页打包推送到阿里云容器镜像服务ACR然后从你的云服务器上拉取并运行它。这个“开发 - 构建 - 推送 - 部署”的完整闭环是 DevOps 实践的核心。最容易踩的坑忘记安全组规则部署 Web 服务后无法访问首先检查安全组是否放行了对应端口如 80, 443。数据未持久化将数据库直接运行在容器内重启容器后数据丢失。务必使用-v参数挂载数据卷或宿主机目录。镜像版本管理混乱始终为你的镜像打上明确的标签如myapp:v1.0而不是依赖默认的latest。后续扩展方向学习 Dockerfile 编写掌握如何编写高效的 Dockerfile优化镜像层减少镜像体积。深入 Docker Compose使用 Compose 管理多服务应用定义网络、依赖和健康检查。接入 CI/CD将这台服务器作为 GitLab Runner 或 Jenkins Agent实现代码提交后自动构建镜像并部署。探索容器编排当需要管理多台服务器上的大量容器时可以学习 KubernetesK8s阿里云也提供了托管版的 Kubernetes 服务ACK。这台已经配置好 Docker 的阿里云服务器就是一个随时待命的强大实验场。建议收藏本文在后续实践中遇到问题时可以快速回顾相关章节进行排查。现在就从运行你的第一个自定义容器开始吧。