I apologize for the error. It seems I do not have the write_file tool available in this environment. I will provide the article content directly in this response.
从零开始:在阿里云上玩转Docker容器
引言
在当今的云计算时代,Docker 容器技术已经成为应用程序打包、分发和运行的标准。它提供了一个轻量级、可移植且自给自足的环境,确保应用程序在任何地方都能一致运行。而阿里云作为国内领先的云计算服务商,为 Docker 的部署和管理提供了坚实的基础设施支持。本文将带领您从零开始,在阿里云上搭建并使用 Docker 容器,让您的应用程序部署变得前所未有的简单和高效。
为什么选择 Docker?为什么选择阿里云?
Docker 的优势:
* 环境一致性: 解决了“在我的机器上可以运行”的问题,确保开发、测试和生产环境的一致性。
* 快速部署: 容器启动速度快,秒级部署,提高开发和运维效率。
* 资源隔离: 容器之间相互隔离,互不影响,提升系统稳定性。
* 轻量级: 与虚拟机相比,容器共享宿主机的操作系统内核,更加轻量级,启动更快,资源占用更少。
* 弹性伸缩: 结合编排工具(如 Docker Compose、Kubernetes),可轻松实现应用的弹性伸缩。
阿里云的优势:
* 稳定可靠: 提供高性能、高可用的云服务器 ECS 实例。
* 网络优化: 优化的网络环境,确保容器镜像的快速拉取和应用访问。
* 丰富服务: 除了 ECS,阿里云还提供容器镜像服务 ACR、容器服务 ACK(Kubernetes)等,形成完整的容器生态。
* 国内支持: 便捷的支付方式和本地化技术支持。
前提条件
在开始之前,您需要具备以下条件:
1. 一个已注册并完成实名认证的阿里云账号。
2. 基本的 Linux 命令行操作知识。
第一步:创建阿里云 ECS 实例
我们将以一个 Ubuntu 20.04 系统的 ECS 实例为例。
- 登录阿里云控制台:访问 阿里云官网 并登录您的账号。
- 进入 ECS 控制台:在控制台顶部搜索框输入“ECS”,选择“云服务器 ECS”。
-
创建实例:点击“创建实例”按钮。
- 地域与可用区:根据您的业务需求和用户地理位置选择合适的地域和可用区。
- 实例:
- 实例规格:对于初学者,选择一款入门级实例即可,如
ecs.t5-lc1m1.small(1核1G)。 - 镜像:选择“公共镜像”,操作系统选择
Ubuntu 20.04 64位。
- 实例规格:对于初学者,选择一款入门级实例即可,如
- 存储:保持默认配置或根据需求调整。
- 网络和安全组:
- 专有网络 VPC:保持默认或选择已有 VPC。
- 公网 IP:勾选“分配公网 IP”,方便后续从外部访问。
- 安全组:创建一个新的安全组或选择现有安全组。确保开放以下端口:
22(SSH 远程连接)80(HTTP 访问)443(HTTPS 访问,如果需要)- 后续可能开放其他端口,例如 Docker 应用程序所使用的端口。
- 系统配置:
- 登录凭证:选择“自定义密码”,设置一个复杂的密码。
- 实例名称:例如
my-docker-ecs。
- 确认订单并创建。
-
连接到 ECS 实例:
- 实例创建成功后,记录其“公网 IP 地址”。
- 使用 SSH 客户端(如 PuTTY、Xshell 或 macOS/Linux 自带的终端)连接到您的 ECS 实例:
bash
ssh root@<您的公网IP地址> - 输入您之前设置的密码。
第二步:在 ECS 实例上安装 Docker Engine
连接成功后,我们开始安装 Docker。
-
更新系统软件包列表:
bash
sudo apt update
sudo apt upgrade -y -
安装 Docker 依赖:
bash
sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release -y -
添加 Docker 官方 GPG 密钥:
bash
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg -
添加 Docker 仓库:
bash
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null -
再次更新软件包列表并安装 Docker Engine:
bash
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io -y -
验证 Docker 安装:
bash
sudo docker run hello-world
如果看到“Hello from Docker!”的输出,说明 Docker 已成功安装并运行。 -
配置 Docker 镜像加速器(可选,但强烈推荐):
由于网络原因,从 Docker Hub 拉取镜像可能会很慢。阿里云提供免费的镜像加速服务。- 访问 阿里云容器镜像服务控制台。
- 复制加速器地址。
- 在 ECS 实例上创建或编辑 Docker 配置文件
/etc/docker/daemon.json:
bash
sudo vi /etc/docker/daemon.json
将以下内容粘贴进去(替换<您的加速器地址>):
json
{
"registry-mirrors": ["<您的加速器地址>"]
} - 保存并退出文件 (
:wq在 vi 中)。 - 重启 Docker 服务以使配置生效:
bash
sudo systemctl daemon-reload
sudo systemctl restart docker
-
将当前用户添加到 docker 用户组(可选,避免每次输入 sudo):
bash
sudo usermod -aG docker $USER
# 退出当前 SSH 会话并重新连接,使权限生效
exit
重新连接后,您就可以直接使用docker命令而无需sudo。
第三步:基本的 Docker 命令操作
现在您已经拥有一个运行 Docker 的 ECS 实例,让我们来学习一些常用的 Docker 命令。
-
拉取镜像:从 Docker Hub 下载镜像。
bash
docker pull nginx:latest
docker pull ubuntu:20.04 -
查看本地镜像:
bash
docker images -
运行容器:
bash
# 运行一个 Nginx 容器,并将容器的 80 端口映射到宿主机的 80 端口
# -d 表示后台运行
# -p 宿主机端口:容器端口
# --name 给容器命名
docker run -d -p 80:80 --name my-nginx nginx:latest
现在,您可以在浏览器中访问您的 ECS 公网 IP 地址,应该能看到 Nginx 的欢迎页面。 -
查看运行中的容器:
bash
docker ps
# 查看所有容器(包括已停止的)
docker ps -a -
停止容器:
bash
docker stop my-nginx -
启动容器:
bash
docker start my-nginx -
重启容器:
bash
docker restart my-nginx -
删除容器:容器停止后才能删除。
bash
docker rm my-nginx -
删除镜像:删除前确保没有容器正在使用该镜像。
bash
docker rmi nginx:latest -
查看容器日志:
bash
docker logs my-nginx -
进入容器内部:
bash
docker exec -it my-nginx /bin/bash
# 在容器内部执行命令,例如查看文件
ls /etc/nginx
# 退出容器
exit
第四步:部署一个简单的应用程序
我们将部署一个简单的 Flask Python Web 应用。
-
在 ECS 实例上创建项目目录:
bash
mkdir my-flask-app
cd my-flask-app -
创建
app.py文件:
bash
vi app.py
粘贴以下内容:
“`python
from flask import Flask
app = Flask(name)@app.route(‘/’)
def hello_world():
return ‘Hello from Flask in Docker on Alibaba Cloud!’if name == ‘main‘:
app.run(host=’0.0.0.0’, port=5000)
“` -
创建
requirements.txt文件:
bash
vi requirements.txt
粘贴以下内容:
flask -
创建
Dockerfile:用于构建 Docker 镜像。
bash
vi Dockerfile
粘贴以下内容:
“`dockerfile
# 使用官方 Python 3.8 瘦身版镜像作为基础镜像
FROM python:3.8-slim-buster设置工作目录
WORKDIR /app
将当前目录下的所有文件拷贝到容器的 /app 目录
COPY . /app
安装 Python 依赖
RUN pip install –no-cache-dir -r requirements.txt
暴露容器的 5000 端口
EXPOSE 5000
定义容器启动时执行的命令
CMD [“python”, “app.py”]
“` -
构建 Docker 镜像:在
my-flask-app目录下执行。
bash
docker build -t my-flask-app:1.0 .
-t用于给镜像打标签,.表示 Dockerfile 在当前目录。 -
运行容器:
bash
# 将容器的 5000 端口映射到宿主机的 80 端口,方便通过 HTTP 访问
docker run -d -p 80:5000 --name flask-web-app my-flask-app:1.0 -
验证应用程序:
在浏览器中访问您的 ECS 公网 IP 地址,您应该能看到“Hello from Flask in Docker on Alibaba Cloud!”。
第五步:使用 Docker Compose 管理多容器应用
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过一个 YAML 文件来配置应用程序的服务。
我们将构建一个简单的 Web 应用,包含一个 Nginx 反向代理和我们刚刚创建的 Flask 应用。
-
安装 Docker Compose:
bash
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# 验证安装
docker-compose --version
(注意:此处安装的是 Docker Compose v1,如果您想安装 v2,步骤会有所不同,通常 v2 会作为 docker cli 的插件安装) -
创建
docker-compose.yml文件:
在my-flask-app目录的父目录中(或者您喜欢的任何一个新目录)创建一个新目录,例如multi-app,然后进入该目录并创建docker-compose.yml。将my-flask-app目录也移动到multi-app目录中。bash
cd ..
mkdir multi-app
mv my-flask-app multi-app/
cd multi-app
然后创建docker-compose.yml:
bash
vi docker-compose.yml
粘贴以下内容:
yaml
version: '3.8'
services:
web:
build: ./my-flask-app # 指向我们的 Flask 应用 Dockerfile 所在的目录
ports:
- "5000" # 容器内部端口,无需暴露到宿主机,因为 Nginx 会代理
restart: always
nginx:
image: nginx:latest
ports:
- "80:80" # 将宿主机的 80 端口映射到 Nginx 容器的 80 端口
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf # 挂载 Nginx 配置文件
depends_on:
- web # 确保 web 服务在 Nginx 之前启动
restart: always -
创建 Nginx 配置文件
nginx.conf:
bash
vi nginx.conf
粘贴以下内容:
“`nginx
server {
listen 80;
server_name localhost;location / { proxy_pass http://web:5000; # 代理到 Flask 容器,容器名在 docker-compose.yml 中定义 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }}
“` -
启动多容器应用:
在multi-app目录下执行:
bash
docker-compose up -d --build-d:后台运行。--build:如果Dockerfile或其依赖有变化,重新构建镜像。
-
查看服务状态:
bash
docker-compose ps -
验证应用程序:
再次访问您的 ECS 公网 IP 地址,您应该仍然能看到“Hello from Flask in Docker on Alibaba Cloud!”,但这次请求是通过 Nginx 反向代理转发到 Flask 容器的。 -
停止并删除应用:
bash
docker-compose down
这将停止并删除docker-compose.yml中定义的所有容器和网络。
第六步:阿里云容器服务简介 (进阶)
当您的应用规模变大、容器数量增多时,您会发现手动管理 Docker 容器变得困难。此时,阿里云的容器服务将大显身手。
- 阿里云容器镜像服务 ACR (Alibaba Cloud Container Registry):
- 提供安全、高性能的镜像存储和分发服务。您可以将自己构建的 Docker 镜像推送到 ACR,方便在不同环境和实例中统一管理和拉取。
- 阿里云容器服务 ACK (Alibaba Cloud Container Service for Kubernetes):
- 基于 Kubernetes 的托管式容器服务,能够自动化部署、扩展和管理容器化应用程序。它为您提供了强大的容器编排能力,实现高可用、弹性伸缩、灰度发布等复杂场景。
当您熟悉了 Docker 的基本操作后,强烈建议您进一步学习 ACR 和 ACK,将您的容器化之旅带入更高的层次。
总结
通过本文,您应该已经掌握了在阿里云 ECS 实例上从零开始搭建 Docker 环境、安装 Docker Engine、使用基本 Docker 命令、部署单个应用程序,以及利用 Docker Compose 管理多容器应用的能力。Docker 容器技术是现代云原生应用开发和部署的核心,结合阿里云强大的基础设施,将为您的业务带来前所未有的灵活性和效率。现在,您可以继续探索更多 Docker 的高级特性,并考虑将您的应用迁移到阿里云的容器服务 ACK 上,开启您的云原生之旅!