Docker 基础:在 Amazon EC2 上的实用入门

发布: (2026年1月1日 GMT+8 21:51)
5 分钟阅读
原文: Dev.to

Source: Dev.to

请提供您希望翻译的完整文本内容,我将按照要求保留源链接、格式和技术术语,仅翻译正文部分。谢谢!

让我们从一个简单的故事开始

想象一下。

一名开发者在自己的笔记本电脑上构建了一个应用程序。它运行得非常完美。充满信心地,他们把它交给了测试团队。

但随后收到一条信息:

“该应用在我们的服务器上无法工作。”

开发者检查了一切后回复:

“但它在我的机器上可以运行!”

实际出了什么问题?

  • 特定版本的编程语言
  • 某些库和工具
  • 在开发者笔记本电脑上设置的配置文件

服务器的设置略有不同——这就足以导致应用崩溃。

🐳 进入 Docker

Docker 像一个智能打包系统一样介入。它不是只发送应用代码,而是将应用连同运行所需的一切——运行时、库和配置——一起打包成一个称为 container(容器)的单元。

现在,当应用迁移时:

  • 从笔记本电脑 → 测试服务器
  • 从测试服务器 → 生产环境
  • 从本地系统 → 云端

…它在所有地方的表现完全相同。

把 Docker 想象成这样

想象一下,你要把自制的菜肴寄给朋友。与其只发送配方并希望他们拥有合适的食材和炉灶,你把整个即食的餐点装在密封盒子里寄过去。这就是 Docker。

在 EC2 上安装 Docker

  1. 启动一个使用 Amazon Linux AMI 的 EC2 实例,并通过 Instance Connect 连接。
  2. 运行以下命令:
sudo yum update -y
sudo yum install docker -y
sudo systemctl start docker
sudo systemctl enable docker
sudo usermod -aG docker ec2-user  # Allow running Docker without sudo

验证 Docker 安装

docker --version

退出并重新连接到 EC2 实例,然后运行:

docker ps  # Should return an empty list

运行容器

docker run 命令从指定镜像创建并启动容器。例如,启动一个 Redis 容器:

docker run redis

如果本地不存在 Redis 镜像,Docker 会自动从 Docker Hub 拉取。后续运行将使用缓存的镜像。

计数容器

  • 列出运行中的容器:

    docker ps
  • 列出 所有 容器(包括已停止的):

    docker ps -a

停止容器

docker stop <container-id-or-name>

删除容器

注意: 必须先停止容器才能将其删除。

docker rm <container-id-or-name>

计数镜像

docker images

拉取镜像

docker pull <image-name>:<tag>

如果未指定标签,Docker 默认会拉取 latest 标签。

删除镜像

首先确保没有容器在使用该镜像(停止并删除它们)。然后运行:

docker rmi <image-id-or-name>

在分离模式下运行容器

添加 -d 标志以在后台运行:

docker run -d <image-name>
docker run -d --name=webapp1 nginx:1.14-alpine

托管本地注册表

docker run -d --name my-registry -p 80:5000 --restart always registry:2

拉取 Nginx 镜像

docker pull nginx:latest

用新名称标记镜像

docker image tag nginx:latest localhost:80/nginx:latest

推送镜像

docker push localhost:80/nginx:latest

验证镜像已推送

curl -X GET localhost/v2/_catalog

Docker 注册表示例

端口映射用于 Web 应用

通过使用 -p 选项将主机端口映射到容器端口,以在外部公开应用:

docker run -d --name=flask -p 80:80 nandinivijayr/myflaskapplication

上述命令将容器的 80 端口映射到主机的 80 端口,并以分离模式运行容器。

检查容器和镜像

检索容器的详细 JSON 配置:

docker inspect <container-id-or-name>

检索镜像的详细 JSON 配置:

docker inspect <image-id-or-name>

检索容器日志

docker logs <container-id-or-name>

Question Time

运行一个 MySQL 容器,并为其指定一个你喜欢的名称。

Back to Blog

相关文章

阅读更多 »

RGB LED 支线任务 💡

markdown !Jennifer Davishttps://media2.dev.to/dynamic/image/width=50,height=50,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%...

Mendex:我为何构建

介绍 大家好。今天我想分享一下我是谁、我在构建什么以及为什么。 早期职业生涯与倦怠 我在 17 年前开始我的 developer 生涯……