亚马逊云绑卡账号 国际AWS亚马逊云服务器Docker容器运行
在AWS国际站上跑Docker?别慌,这事儿比煮泡面还简单
你是不是也经历过:老板一句“把服务上AWS”,你心里默默翻白眼——又是IAM策略又是VPC子网又是CloudFormation模板……结果打开控制台,光找EC2按钮就花了三分钟?别急,今天咱不聊那些能写满五页PPT的高阶架构,就干一件最实在的事:在AWS国际版(us-east-1或ap-northeast-1这种主流区)里,从零建一台EC2,装好Docker,跑起一个Nginx容器,浏览器输入IP就能看到‘Welcome to nginx!’——全程不靠复制粘贴,只靠你亲手敲的命令。
第一步:选对实例,别被t3.micro骗了感情
登录 AWS Console(注意是国际站,不是国内的亚马逊云科技),进EC2 Dashboard → Launch Instance。别急着点‘Next’,先盯住这三点:
- AMI选Ubuntu 22.04 LTS(amd64)——别选Amazon Linux 2023,它默认没装curl、没开sudo密码,新手容易卡在第一步;
- 实例类型果断选t3.micro——免费套餐覆盖,够用;但提醒一句:它只有1GB内存,别想着同时跑MySQL+Redis+Nginx,那叫自虐;
- 密钥对一定要自己生成并下载!名字别写‘mykey’,写‘aws-prod-2024’这种带年份的,不然三个月后你面对十个叫‘key-pair-1’的文件会怀疑人生。
网络设置里,务必勾选‘Auto-assign Public IP’——否则你连SSH都连不上,更别说Docker了。安全组?新建一个,入站规则只开两行:SSH (22) 和 Custom TCP (8080)(别开0.0.0.0/0全放行,真有黑客扫到你,分分钟给你挂个挖矿脚本)。
第二步:连上去,别让ssh-key权限毁掉一整天
实例启动后,复制公有IPv4地址,在终端敲:
chmod 400 ~/Downloads/aws-prod-2024.pem
ssh -i ~/Downloads/aws-prod-2024.pem [email protected]
如果报错 Permissions 0644 for 'xxx.pem' are too open——恭喜,你中了90%新手第一坑。Linux认死理:私钥必须只能自己读(400)。别挣扎,chmod 400 是唯一解药。
亚马逊云绑卡账号 连进去后第一件事:sudo apt update && sudo apt upgrade -y。别跳过,Ubuntu镜像偶尔带旧内核,而Docker对cgroupv2支持要求严格,升级完再装Docker,省得后面容器起不来还查半天。
第三步:Docker安装?别信官网一键脚本,它可能让你apt崩掉
AWS官方文档推荐用 curl -fsSL https://get.docker.com | sh,但实测在Ubuntu 22.04上,这脚本会强行换源、改apt配置,甚至卸载你刚装的python3-pip——我们不搞这些玄学。
老老实实用包管理器:
sudo apt install docker.io -y
sudo systemctl enable docker
sudo systemctl start docker
sudo usermod -aG docker ubuntu
注意最后一行!usermod加完组,必须退出SSH重登,否则docker run hello-world会报‘permission denied’——这不是Docker问题,是你账号还没加载新组权限。
第四步:跑起来!但别急着pull nginx,先验证基础链路
重登后,执行:
docker run hello-world
看到‘Hello from Docker!’就说明引擎活了。接着试网络:
docker run --rm -it alpine ping -c 3 google.com
如果超时?检查安全组是否开了Outbound All Traffic(默认是开的,但万一你手抖删过呢)。确认OK后,才轮到正主:
docker run -d -p 8080:80 --name web nginx
解释下参数:-d后台运行,-p 8080:80把宿主机8080映射到容器80端口,--name web给容器起名,方便后续管理。别写-p 80:80——AWS安全组只开了8080,开80要额外申请,不值得。
第五步:浏览器打不开?先查三件事,别急着重装
打开 http://你的公网IP:8080,一片空白?别删实例,按顺序查:
docker ps—— 看容器是不是‘Up X seconds’,如果是‘Exited’,docker logs web看报错;curl -v http://localhost:8080—— 在服务器本地测,通则证明Docker没问题,不通说明端口没映射好;sudo ufw status—— Ubuntu默认关防火墙,但如果之前手动开过,它可能拦着8080;执行sudo ufw disable秒解。
常见坑:有人写docker run -p 8080:8080 nginx,结果容器里Nginx监听的是80,自然404。记住口诀:左边宿主,右边容器,容器端口不能猜,得看镜像文档。
第六步:想持久化?别直接-v挂载/home/ubuntu/data,AWS EBS才是亲儿子
临时测试用docker run够了,但真上线得考虑数据不丢。别把数据库文件挂到EC2本地盘——实例一停,EBS卷一卸载,数据全飞。正确姿势:
- 在EC2同可用区创建EBS卷(比如20GB gp3);
- Attach到实例,
sudo mkfs -t xfs /dev/xvdf(注意设备名用lsblk确认); - 挂载:
sudo mkdir /data && sudo mount /dev/xvdf /data; - 跑容器:
docker run -v /data:/usr/share/nginx/html -p 8080:80 nginx。
这样,就算你误删容器,HTML文件还在EBS里躺着,重启容器立刻复活。
最后送你三条保命口诀
- ‘安全组即命门’:所有连不上,先看安全组入站;所有访问不了外网,先看出站;
- ‘容器日志=第一现场’:
docker logs -f --tail 50 容器名比任何猜测都准; - ‘别信默认配置’:AWS控制台默认关了IPv6、关了自动分配公网IP、安全组默认空——每个‘默认’都可能是你的坑。
写完这篇文章,我顺手删掉了自己AWS账户里七台‘测试用完忘关’的t3.micro——它们默默吃了我$2.37账单。所以最后提醒一句:跑完实验,记得在EC2 Dashboard点‘Terminate’,别让那台小机器在角落里替你呼吸。毕竟,云计算的浪漫,从来不是无限资源,而是——你按下终止键那一刻,账单真的停了。

