如何从ECS仓库运行Docker镜像?完成前置操作后如何启动服务器?
别急,我一步步给你捋清楚这些问题:
- 不需要再次推送镜像:只要你没修改镜像内容,之前推到ECS仓库(ECR)或Docker Hub的版本完全可用,直接拉取就行。
- 镜像不会自动运行:得手动或者配置自动化流程来启动容器,EC2实例不会自己识别仓库里的镜像并启动。
- 脚本是可选但推荐的:手动敲命令也能启动,但脚本可以简化后续的启动/更新操作。
第一步:给EC2实例装Docker
你的EC2要运行Docker容器,首先得确保实例上有Docker环境。用SSH登录到你的EC2实例(命令类似 ssh -i "你的密钥文件.pem" ec2-user@你的公网IP),然后根据系统类型安装:
如果你用的是Amazon Linux 2:
sudo yum update -y sudo amazon-linux-extras install docker -y sudo service docker start sudo usermod -aG docker ec2-user
安装完退出SSH再重新登录,这样你不用每次都加sudo就能用Docker命令。
如果你用的是Ubuntu:
sudo apt update -y sudo apt install docker.io -y sudo systemctl start docker sudo systemctl enable docker sudo usermod -aG docker ubuntu
第二步:从仓库拉取镜像到EC2
不管是从ECR还是Docker Hub,都需要先把镜像拉到EC2本地:
从Docker Hub拉取:
docker pull 你的Docker Hub用户名/镜像名:标签
比如 docker pull grabury/my-server:v1
从Amazon ECR拉取:
首先得让EC2有权限访问ECR,要么给EC2实例的IAM角色加AmazonEC2ContainerRegistryReadOnly权限,要么在EC2上配置AWS凭证。然后执行登录命令:
aws ecr get-login-password --region 你的AWS区域 | docker login --username AWS --password-stdin 你的ECR仓库地址
比如你的ECR地址是123456789012.dkr.ecr.us-east-1.amazonaws.com,然后拉取镜像:
docker pull 你的ECR仓库地址/镜像名:标签
第三步:启动Docker容器(运行服务器)
拉取完镜像后,用docker run命令启动容器,假设你的服务器在容器内用8080端口,要映射到EC2的80端口(公网可访问):
docker run -d -p 80:8080 --name my-server-container 镜像名:标签
参数解释:
-d:让容器在后台运行,不会占用你的SSH会话-p 主机端口:容器端口:把EC2的公网端口映射到容器内的服务器端口,这样外部就能通过EC2公网IP访问你的服务器--name:给容器起个好记的名字,方便后续管理
启动后可以用docker ps查看容器是否正常运行,用docker logs my-server-container查看服务器日志,排查启动问题。
第四步:配置自动启动(可选但强烈推荐)
如果你希望EC2重启后容器能自动启动,运行容器时加上--restart always参数:
docker run -d -p 80:8080 --restart always --name my-server-container 镜像名:标签
如果已经启动了容器,也可以事后修改重启策略:
docker update --restart always my-server-container
关于脚本配置
如果你觉得每次手动敲命令麻烦,可以写个简单的shell脚本(比如start-server.sh)来一键完成拉取、更新、启动操作:
#!/bin/bash # 拉取最新镜像(如果有更新的话) docker pull 你的镜像名:标签 # 停止并删除旧容器(如果存在,不存在就忽略错误) docker stop my-server-container || true docker rm my-server-container || true # 启动新容器 docker run -d -p 80:8080 --restart always --name my-server-container 你的镜像名:标签
给脚本加执行权限:chmod +x start-server.sh,以后直接运行./start-server.sh就能快速启动或者更新你的服务器了。
另外,如果你想更专业的管理容器,可以用ECS的服务来部署,ECS会自动帮你在集群的EC2实例上调度容器、自动重启故障容器,但如果只是快速启动服务器,直接在EC2上手动运行Docker容器就足够了。
内容的提问来源于stack exchange,提问作者grabury

