Docker 基础:在 Amazon EC2 上的实用入门
Source: Dev.to
请提供您希望翻译的完整文本内容,我将按照要求保留源链接、格式和技术术语,仅翻译正文部分。谢谢!
让我们从一个简单的故事开始
想象一下。
一名开发者在自己的笔记本电脑上构建了一个应用程序。它运行得非常完美。充满信心地,他们把它交给了测试团队。
但随后收到一条信息:
“该应用在我们的服务器上无法工作。”
开发者检查了一切后回复:
“但它在我的机器上可以运行!”
实际出了什么问题?
- 特定版本的编程语言
- 某些库和工具
- 在开发者笔记本电脑上设置的配置文件
服务器的设置略有不同——这就足以导致应用崩溃。
🐳 进入 Docker
Docker 像一个智能打包系统一样介入。它不是只发送应用代码,而是将应用连同运行所需的一切——运行时、库和配置——一起打包成一个称为 container(容器)的单元。
现在,当应用迁移时:
- 从笔记本电脑 → 测试服务器
- 从测试服务器 → 生产环境
- 从本地系统 → 云端
…它在所有地方的表现完全相同。
把 Docker 想象成这样
想象一下,你要把自制的菜肴寄给朋友。与其只发送配方并希望他们拥有合适的食材和炉灶,你把整个即食的餐点装在密封盒子里寄过去。这就是 Docker。
在 EC2 上安装 Docker
- 启动一个使用 Amazon Linux AMI 的 EC2 实例,并通过 Instance Connect 连接。
- 运行以下命令:
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

端口映射用于 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 容器,并为其指定一个你喜欢的名称。