ARTICLE DETAIL

资讯详情

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

阿里云ECS服务器从零部署Docker完整指南:半小时搭建安全容器环境

阿里云ECS服务器从零部署Docker完整指南:半小时搭建安全容器环境 最近在帮团队搭建新的开发测试环境发现很多同学在从零开始部署 Docker 服务时总会在云服务器购买、系统配置和 Docker 安装这几个环节卡住。网上的资料要么只讲 Docker 命令要么只讲云服务器操作缺少一个从“买服务器”到“跑起容器”的完整闭环指南。本文将以阿里云 ECS 为例手把手带你走通从服务器选购、系统初始化、安全加固到 Docker 引擎安装配置的全过程。无论你是刚接触云服务的学生还是需要快速搭建一套标准化环境的后端开发者都能按照本文的步骤在半小时内获得一个安全、可用的 Docker 运行环境。文中所有命令和配置都经过实测你可以直接复制使用。1. 背景与核心概念为什么需要云服务器部署 Docker在深入实操之前我们先理清几个关键概念这能帮助你理解后续每一步操作的意义。Docker是一种容器化技术。你可以把它理解为一个轻量级的“软件集装箱”。开发者将应用程序及其所有依赖库、环境变量、配置文件打包进一个标准的镜像Image里。这个镜像可以在任何安装了 Docker 引擎的机器上快速、一致地运行成一个容器Container。它解决了“在我机器上能跑到你那就出错”的经典难题极大地提升了开发、测试和部署的效率。阿里云服务器ECS是阿里云提供的弹性计算服务。简单说它就是一台运行在云端的虚拟电脑拥有独立的 CPU、内存、磁盘和公网 IP。我们可以在上面安装任何操作系统和软件就像操作一台物理服务器一样。选择云服务器来部署 Docker主要基于以下几点考虑环境一致性云服务器的配置CPU、内存、系统是标准化的避免了本地机器因系统版本、依赖库差异导致的问题。资源隔离与弹性Docker 容器本身提供应用层隔离而云服务器则提供了硬件资源层的隔离。结合使用可以更安全、灵活地分配资源。需要更多资源时可以随时升级云服务器配置。公网访问云服务器自带公网 IP方便我们将容器内运行的服务如网站、API暴露到互联网供他人访问。成本与便捷性对于个人学习或中小项目购买一台按量付费或包年包月的云服务器远比维护一台物理服务器成本更低、更省心。因此“在阿里云服务器上部署 Docker”是一个典型的云原生应用基础架构场景。接下来我们就从零开始一步步完成这个目标。2. 环境准备与版本说明在开始购买和操作之前请确保你已拥有一个实名认证的阿里云账号。这是使用所有阿里云服务的前提。本文将使用以下环境进行演示但核心步骤和思路适用于大多数情况云服务商阿里云服务器类型弹性计算服务ECS操作系统CentOS 7.9这是一个非常稳定且广泛使用的 Linux 发行版适合生产环境。如果你偏好其他系统如 Ubuntu 20.04/22.04大部分命令也类似。Docker 版本Docker CE社区版 24.0.5。我们将使用官方仓库安装最新稳定版。网络环境服务器需能访问公网以下载安装包。重要提示云产品控制台界面和活动价格可能随时更新但核心的购买流程、配置项和服务器管理逻辑是相通的。请以实际操作时的界面为准理解每个配置选项的含义更为关键。3. 阿里云 ECS 服务器购买与基础配置这是整个流程的第一步也是最容易让人困惑的一步。我们将重点关注那些影响后续 Docker 使用的关键配置。3.1 登录控制台与创建实例登录阿里云控制台访问 阿里云官网 使用你的账号密码登录。进入 ECS 控制台在控制台首页找到“产品”或“服务”选择“弹性计算”下的“云服务器 ECS”或者直接搜索“ECS”进入管理控制台。创建实例在 ECS 实例列表页面点击“创建实例”或“购买实例”按钮开始配置之旅。3.2 关键配置项详解避坑指南创建实例时你会看到一连串的配置选项。我们逐一拆解告诉你为什么这么选。① 基础配置计费模式与地域计费模式对于学习和测试强烈推荐选择“按量付费”。它的优点是灵活用多久付多久不用了可以立即释放没有长期绑定的压力。如果确定长期使用半年以上可以对比“包年包月”的价格。地域选择离你的目标用户或你自己地理位置最近的地域。例如用户主要在华东就选“华东1杭州”或“华东2上海”。这能降低网络延迟。注意不同地域的 ECS 实例、磁盘、网络资源相互隔离创建后不能更改。② 实例规格选择适合的“电脑配置”这是核心成本所在。对于运行 Docker我们主要关注 CPU 和内存。共享型 vs 计算型个人学习或轻量应用选择“共享计算型 n4”或“突发性能型 t6/t5”即可性价比高。它们允许在一定基准性能上突发使用 CPU适合负载不持续的场景。vCPU 和内存如果只是跑几个简单的容器如 Nginx、MySQL、Redis选择1核2GB或2核4GB完全足够。如果想学习 Docker Compose 或部署微服务集群建议从2核4GB起步。架构选择x86计算。ARM 架构如“通用型 g8y”可能在某些镜像兼容性上存在差异初学者建议避开。③ 镜像安装什么样的“操作系统”镜像决定了你服务器的初始系统环境。选择“公共镜像”。操作系统选择CentOS。版本选择7.9 64位。CentOS 7 拥有极广泛的社区支持和软件兼容性教程也最多。避免选择即将停止维护的版本如 CentOS 8。④ 存储系统盘与数据盘系统盘默认的40GB ESSD PL0或高效云盘足够安装系统和 Docker。如果预算充足ESSD 性能更好。数据盘初期可以不添加。以后如果 Docker 容器数据量很大如数据库、日志可以单独购买并挂载数据盘方便管理和扩容。⑤ 网络与安全组服务器的“门”和“防火墙规则”这是安全的关键也是后续访问 Docker 服务的通道。专有网络 VPC如果第一次使用直接使用默认VPC和交换机即可。公网 IP务必勾选“分配公网 IPv4 地址”这是你从外部 SSH 连接和管理服务器的唯一方式。带宽选择按固定带宽1Mbps起步即可学习够用后续可升级。安全组可以把它看作服务器的虚拟防火墙。选择“新建安全组”并添加以下两条入方向规则这是为了后续能访问服务器上的服务授权策略协议类型端口范围授权对象说明允许SSH (22)22/220.0.0.0/0用于远程连接服务器生产环境建议改为自己的IP允许HTTP (80)80/800.0.0.0/0用于访问将来容器内运行的Web服务允许自定义 TCP8080/80800.0.0.0/0常用于其他应用服务端口⑥ 系统配置设置登录“钥匙”登录凭证选择“自定义密码”然后为系统管理员root用户设置一个高强度密码包含大小写字母、数字、特殊符号。请务必牢记此密码实例名称给服务器起个名字如my-docker-host方便管理。完成以上所有配置后确认订单总价阅读并同意服务条款点击“创建实例”或“立即购买”。系统需要几分钟来创建并启动你的云服务器。3.3 获取连接信息并登录服务器实例状态变为“运行中”后即可连接。获取公网 IP在 ECS 实例列表找到你刚创建的实例复制其“公网 IP”地址。使用 SSH 客户端连接Windows 用户推荐使用PuTTY或Xshell也可以使用 Windows 10/11 自带的 PowerShell 或 CMD需支持 OpenSSH。macOS/Linux 用户直接使用系统自带的终端Terminal。连接命令如下将你的公网IP替换为实际IPssh root你的公网IP首次连接会提示确认主机指纹输入yes。然后输入你之前设置的root密码。登录成功后你会看到类似[rootiZbp1 ~]#的命令行提示符。4. 服务器系统初始化与安全加固新服务器就像毛坯房需要做一些基础装修才能安全、舒适地入住。这一步常被忽略但对生产安全至关重要。4.1 更新系统与安装基础工具登录后首先更新系统软件包到最新版本并安装一些常用工具如vim编辑器、wget下载工具。# 1. 更新本地Yum缓存 yum makecache fast # 2. 升级所有可更新的软件包 yum update -y # 3. 安装常用工具 yum install -y vim wget net-tools curl bash-completion4.2 创建普通用户并配置 sudo 权限安全最佳实践长期使用root用户操作是危险的。我们应该创建一个普通用户并赋予其sudo权限。# 1. 创建新用户例如名为 dockeruser adduser dockeruser # 2. 为新用户设置密码 passwd dockeruser # 根据提示输入两次强密码 # 3. 将新用户添加到 wheel 组该组默认拥有sudo权限 usermod -aG wheel dockeruser4.3 配置 SSH 密钥登录并禁用密码登录强烈推荐使用密钥对登录比密码更安全且无需每次输入密码。在本地生成密钥对如果你没有的话Windows (PowerShell/Git Bash):ssh-keygen -t rsa -b 4096macOS/Linux:ssh-keygen -t rsa -b 4096一路回车默认保存在~/.ssh/id_rsa私钥和~/.ssh/id_rsa.pub公钥。将公钥上传到服务器。在本地执行ssh-copy-id dockeruser你的公网IP如果系统没有ssh-copy-id可以手动操作将本地~/.ssh/id_rsa.pub文件内容复制到服务器的/home/dockeruser/.ssh/authorized_keys文件中需创建.ssh目录并设置权限。测试密钥登录ssh dockeruser你的公网IP如果无需密码直接登录成功说明密钥配置正确。禁用 root 密码登录和密码认证谨慎操作# 切换到 root 用户或使用 sudo sudo vim /etc/ssh/sshd_config找到并修改以下两行PermitRootLogin no # 禁止root直接登录 PasswordAuthentication no # 禁止使用密码认证重要在确认密钥登录绝对可用之前不要将PasswordAuthentication设为no可以先设为yes重启SSH服务测试密钥登录确认无误后再改为no。# 重启SSH服务使配置生效 sudo systemctl restart sshd # 在另一个终端窗口测试密钥登录确认成功后再关闭当前连接4.4 配置防火墙FirewalldCentOS 7 默认使用firewalld管理防火墙。我们需要放行必要的端口。# 1. 启动firewalld并设置开机自启 sudo systemctl start firewalld sudo systemctl enable firewalld # 2. 放行我们之前安全组里规划的端口SSH(22), HTTP(80), 自定义应用端口(8080) sudo firewall-cmd --permanent --add-servicessh sudo firewall-cmd --permanent --add-servicehttp sudo firewall-cmd --permanent --add-port8080/tcp # 3. 重新加载防火墙规则 sudo firewall-cmd --reload # 4. 查看当前放行的端口和服务 sudo firewall-cmd --list-all至此你的云服务器已经是一个相对安全、基础环境完备的状态。接下来我们开始安装主角——Docker。5. Docker 引擎安装与配置我们将使用 Docker 官方提供的 Yum 仓库进行安装这是最推荐的方式能保证获得最新的稳定版本和安全的更新。5.1 卸载旧版本如有如果你的系统上存在老旧的 Docker 版本如docker或docker-engine请先卸载。sudo yum remove -y docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine5.2 设置 Docker 仓库安装必要的依赖包yum-utils提供了yum-config-manager工具。sudo yum install -y yum-utils添加 Docker 官方 Yum 仓库sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo5.3 安装 Docker Engine安装最新版本的 Docker CE、CLI 和 Containerdsudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin这里一并安装了docker-compose-plugin它是管理多容器应用的工具后续会用到。5.4 启动 Docker 并设置开机自启# 启动Docker守护进程 sudo systemctl start docker # 设置Docker开机自动启动 sudo systemctl enable docker # 验证Docker是否安装成功 sudo docker --version如果安装成功会输出类似Docker version 24.0.5, build 24.0.5-1.el7的信息。5.5 配置 Docker 镜像加速器国内必备从 Docker Hub 拉取镜像在国内可能很慢。我们需要配置一个国内镜像加速器这里以阿里云容器镜像服务为例。登录阿里云控制台搜索“容器镜像服务”。在“镜像工具” - “镜像加速器”页面选择你的系统CentOS你会看到一段配置命令。在服务器上执行类似下面的命令加速器地址每个阿里云账号独有请使用控制台提供的sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json -EOF { registry-mirrors: [https://你的专属加速器地址.mirror.aliyuncs.com] } EOF重新加载配置并重启 Dockersudo systemctl daemon-reload sudo systemctl restart docker5.6 允许普通用户执行 Docker 命令可选但方便默认情况下只有root用户和docker组的用户才能运行 Docker 命令。为了避免每次都要加sudo可以将你的普通用户加入docker组。# 将当前用户dockeruser加入docker组 sudo usermod -aG docker $USER # 或者明确指定用户 # sudo usermod -aG docker dockeruser重要执行此操作后你需要完全退出当前 SSH 会话并重新登录才能使组权限生效。之后你就可以直接使用docker ps等命令而无需sudo了。6. Docker 实战运行你的第一个容器环境已经就绪让我们通过几个经典示例来验证 Docker 是否工作正常并熟悉基本操作。6.1 示例一运行一个 Nginx Web 服务器Nginx 是一个高性能的 Web 服务器它的 Docker 镜像非常流行。# 1. 从镜像仓库拉取最新的 Nginx 镜像 docker pull nginx:latest # 2. 以后台模式运行一个 Nginx 容器并将容器的80端口映射到宿主机的8080端口 docker run -d --name my-nginx -p 8080:80 nginx-d后台运行。--name my-nginx给容器起个名字方便管理。-p 8080:80端口映射格式为宿主机端口:容器端口。这里将容器内的 80 端口映射到服务器的 8080 端口。验证在服务器上运行docker ps应该能看到名为my-nginx的容器正在运行。打开你的浏览器访问http://你的公网IP:8080。如果看到 “Welcome to nginx!” 的页面恭喜你第一个容器运行成功6.2 示例二运行一个交互式的 Ubuntu 容器这个例子演示如何进入一个容器的内部进行操作。# 运行一个交互式的 Ubuntu 容器并进入其bash终端 docker run -it --name my-ubuntu ubuntu:latest /bin/bash-it-i保持标准输入打开-t分配一个伪终端两者结合可以让我们与容器交互。ubuntu:latestUbuntu 系统镜像。/bin/bash容器启动后执行的命令这里是启动 bash shell。执行后你的命令行前缀会变成类似root容器ID:/#表示你已经进入了容器内部。你可以尝试运行ls,cat /etc/os-release等命令。输入exit可以退出并停止容器。6.3 示例三使用 Docker Compose 启动多容器应用WordPressDocker Compose 通过一个 YAML 文件来定义和运行多个容器。这里我们用它快速搭建一个 WordPress 博客包含 WordPress 和 MySQL 两个容器。创建项目目录并编写docker-compose.yml文件mkdir ~/my-wordpress cd ~/my-wordpress vim docker-compose.yml将以下内容粘贴到docker-compose.yml文件中version: 3.8 services: db: image: mysql:8.0 container_name: wp-db restart: always environment: MYSQL_ROOT_PASSWORD: your_strong_root_password MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: your_strong_wordpress_password volumes: - db_data:/var/lib/mysql wordpress: depends_on: - db image: wordpress:latest container_name: wp-app restart: always ports: - 8081:80 environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: your_strong_wordpress_password WORDPRESS_DB_NAME: wordpress volumes: - wp_data:/var/www/html volumes: db_data: wp_data:注意请务必将your_strong_root_password和your_strong_wordpress_password替换成你自己的强密码启动服务docker compose up -d这个命令会拉取镜像并启动定义的所有服务-d表示后台运行。验证运行docker ps会看到wp-db和wp-app两个容器。访问http://你的公网IP:8081你应该会看到 WordPress 的安装界面。按照提示完成安装你的博客就上线了7. 常见问题与排查思路在部署过程中你可能会遇到以下问题。这里提供快速排查的思路。问题现象可能原因排查步骤与解决方案SSH 连接失败1. 安全组未放行 22 端口。2. 服务器未启动或 IP 错误。3. 本地网络或防火墙限制。1. 检查阿里云控制台安全组规则。2. 在 ECS 控制台查看实例状态和公网 IP。3. 尝试使用其他网络或关闭本地防火墙测试。docker pull或docker run速度极慢网络连接到 Docker Hub 不稳定。确认已正确配置国内镜像加速器/etc/docker/daemon.json。重启 Docker 后重试。docker run时报错port is already allocated宿主机上映射的端口如 8080已被其他进程占用。1. 使用sudo netstat -tlnp | grep :8080查看占用进程。2. 停止占用进程或修改docker run -p参数使用另一个空闲端口。容器启动后立即退出容器内主进程执行完毕或出错退出。1. 使用docker logs 容器名查看容器日志寻找错误信息。2. 对于交互式命令如/bin/bash确保使用了-it参数。普通用户运行docker ps报权限错误用户未加入docker组或未重新登录会话。1. 执行groups命令确认当前用户是否在docker组。2. 使用sudo usermod -aG docker $USER添加后必须完全退出 SSH 并重新登录。Docker 服务启动失败1. 系统内核版本过低。2. 与现有软件冲突。3. 存储驱动问题。1. 运行uname -r确认内核版本CentOS 7 需 3.10。2. 查看日志sudo journalctl -u docker.service。3. 检查daemon.json配置格式是否正确JSON 格式严格。无法访问容器内服务如 Nginx1. 安全组未放行对应端口。2. 宿主机防火墙firewalld未放行。3. 容器端口映射错误。1. 检查阿里云安全组规则如 8080, 8081。2. 检查firewall-cmd --list-all。3. 检查docker ps输出的PORTS列确认映射关系。8. 最佳实践与工程建议将 Docker 用于实际项目时遵循以下建议可以让你的工作更高效、更安全。8.1 镜像与容器管理使用特定版本标签在Dockerfile或docker run时避免使用latest标签。应指定具体版本如nginx:1.24-alpine以保证环境一致性。定期清理定期清理无用的镜像和停止的容器释放磁盘空间。# 删除所有已停止的容器 docker container prune -f # 删除所有未被使用的镜像谨慎会删除所有未被容器引用的镜像 docker image prune -a -f使用.dockerignore文件在构建镜像时创建.dockerignore文件来排除不必要的文件如.git,node_modules, 日志文件可以加速构建过程并减小镜像体积。8.2 数据持久化与存储使用命名卷Named Volumes对于需要持久化的数据如数据库文件、应用配置应使用 Docker 卷Volumes或绑定挂载Bind Mounts。在docker-compose.yml中定义命名卷是首选便于管理。volumes: mysql_data: # 声明一个命名卷 services: mysql: volumes: - mysql_data:/var/lib/mysql # 挂载到容器避免在容器内存储数据容器本身是易变的重启或重建后容器内部的文件更改会丢失。重要数据一定要挂载到宿主机或卷中。8.3 安全与配置非 root 用户运行容器在Dockerfile中使用USER指令指定一个非 root 用户来运行应用进程遵循最小权限原则。扫描镜像漏洞对于生产环境使用的镜像可以使用docker scan命令需登录 Docker Hub或集成其他安全工具来扫描已知漏洞。备份daemon.json和docker-compose.yml将这些配置文件纳入版本控制如 Git方便迁移和恢复。8.4 生产环境考量资源限制使用-m内存限制、--cpusCPU限制等参数为容器设置资源上限防止单个容器耗尽主机资源。docker run -d --name my-app -m 512m --cpus1.5 my-image日志管理配置 Docker 日志驱动和日志轮转策略防止日志文件占满磁盘。可以在/etc/docker/daemon.json中配置。{ log-driver: json-file, log-opts: { max-size: 10m, max-file: 3 } }监控与健康检查使用HEALTHCHECK指令或在docker-compose.yml中定义健康检查让 Docker 能够感知应用状态。结合监控工具如 Prometheus cAdvisor监控容器运行状态。至此你已经完成了一台阿里云服务器从购买、系统配置、安全加固到 Docker 引擎安装、实战演练的完整流程。这个环境可以作为你学习 Docker 和容器化技术的稳定沙箱也可以作为小型应用的原型部署平台。后续你可以基于此环境继续深入学习 Dockerfile 编写、Docker 网络、Docker Swarm 或 Kubernetes 等更高级的主题。记住熟练使用 Docker 的最佳方式就是多动手实践尝试将自己现有的应用容器化。如果在实践中遇到新的问题善用docker --help、docker logs和搜索引擎大部分问题都能找到解决方案。
返回列表