准备一个简单的 Docker Compose 项目
在这一步中,我们将准备一个简单的 Docker Compose 项目。由于 LabEx 环境中没有预装 Docker Compose,我们将首先安装它。然后,我们会创建一个简单的 web 应用和一个 Docker Compose 文件来定义并运行它。
首先,让我们安装 Docker Compose。我们将下载 Docker Compose 二进制文件并赋予可执行权限。
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
现在,让我们通过检查 Docker Compose 版本来验证安装。
docker-compose --version
你应该能在输出中看到已安装的 Docker Compose 版本。
接下来,我们将创建一个简单的 web 应用。我们将使用一个基础的 Python Flask 应用。为项目创建一个目录并进入该目录。
mkdir my-web-app
cd my-web-app
在 my-web-app
目录中,创建一个名为 app.py
的文件,内容如下:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, Docker Compose!'
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0')
这是一个简单的 Flask 应用,当被访问时会返回 "Hello, Docker Compose!"。
现在,我们需要一个 Dockerfile
来为我们的 Flask 应用构建 Docker 镜像。在 my-web-app
目录中创建一个名为 Dockerfile
的文件,内容如下:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD ["python", "app.py"]
这个 Dockerfile 使用了精简版的 Python 3.9 镜像,设置了工作目录,从 requirements.txt
复制并安装依赖项,复制应用代码,暴露 5000 端口,并指定了运行应用的命令。
我们还需要一个 requirements.txt
文件来声明 Flask 依赖。在 my-web-app
目录中创建一个名为 requirements.txt
的文件,内容如下:
Flask==2.2.2
最后,我们将创建一个 docker-compose.yml
文件来定义我们的服务。在 my-web-app
目录中创建一个名为 docker-compose.yml
的文件,内容如下:
version: "3.8"
services:
web:
build: .
ports:
- "5000:5000"
这个 docker-compose.yml
文件定义了一个名为 web
的服务。它告诉 Docker Compose 使用当前目录(.
)中的 Dockerfile
构建镜像,并将主机的 5000 端口映射到容器内的 5000 端口。
现在,让我们使用 Docker Compose 构建并运行服务。确保你位于 ~/project/my-web-app
目录中。
docker-compose up -d
这个命令会构建镜像(如果尚未构建),为 web
服务创建容器,并以分离模式(-d
)启动它。
你可以使用 docker ps
命令检查容器是否在运行。
docker ps
你应该能看到一个名为 my-web-app-web-1
的服务容器正在运行。
要验证应用是否正常工作,你可以使用 curl
访问它。
curl http://localhost:5000
你应该能看到输出 "Hello, Docker Compose!"。