docker compose 在单机环境下一键打包运行

本文介绍了如何使用docker-compose替代单条docker-run命令,更高效地启动和管理多服务项目。通过一个包含web服务和redis服务的示例,详细阐述了创建Dockerfile、编写docker-compose.yml配置文件以及运行docker-compose up的步骤,展示了docker-compose在微服务部署中的便捷性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. docker run 启动服务

之前我学习docker启动服务是, 都是docker run 命令一条到底, 单机运行, 如果我一个项目有多个微服务, 那么一个一个docker run 是很费时间的

比如这样一个例子 :
我有一个项目, 他需要依赖于redis环境 以及我们自身的web环境
那么就需要写2条命令, 前提是我们有这两个镜像才能运行
当然webapp的镜像需要我们自己构建, 自己去写Dockerfile(卷挂载已写入其中), 通过docker build 命令来构造

    1. docker run -d -P --name myRedis redis:latest
    1. docker run -d -p 8080:80 --name mywebapp webapp
      那么我们使用docker-compose的话, 是如何快速高效的解决这个问题呢?

2. docker-compose启动服务

先来看看官网对于docker compose的描述 :
Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。使用 Compose,您可以使用 YAML 文件来配置应用程序的服务。然后,使用一个命令,您可以从您的配置中创建并启动所有服务。
简单来说, 就是使用一个yaml配置文件, 将我们一个项目所需要的依赖全部写入, 这样当微服务很多时就不用我们一个一个的docker run
下面来说说简单的步骤

  1. Define your app’s environment with a Dockerfile so it can be reproduced anywhere.
  2. Define the services that make up your app in docker-compose.yml so they can be run together in an isolated environment.
  3. Run docker compose up and the Docker compose command starts and runs your entire app. You can alternatively run docker-compose up using the docker-compose binary.
    简单来说就是我们要写一个Dockerfile 来定义我们的app所需要的环境, 然后写一个docker-compose.yml的配置文件, 来定义构成我们的应用程序的服务, 最后就是使用docker compose up 的命令启动即可啦

下面是一个docker-compose.yml配置文件的模样

version: "3.9"  # optional since v1.27.0
services:       # services服务
  web:
    build: . # 通过Dockerfile来构建
    ports:
      - "8000:5000" # 暴露的端口号
    volumes:
      - .:/code     # 将全部文件挂载到/code目录下
      - logvolume01:/var/log # 
    links:
      - redis       # 依赖的镜像redis
  redis:
    image: redis
volumes:
  logvolume01: {}

3. docker-compose 小demo

在此页面上,您将构建一个在 Docker Compose 上运行的简单 Python Web 应用程序。该应用程序使用 Flask 框架并在 Redis 中维护一个命中计数器。虽然示例使用 Python,但即使您不熟悉此处演示的概念,也应该可以理解。

3. 1 step1 : Setup

  1. 为项目创建目录
mkdir composetest
cd composetest

在这里插入图片描述
2. 在我们的项目目录里面创建一个app.py, 然后把下面的内容粘贴到app.py中, 看不懂python代码没有关系

vim app.py
import time

import redis
from flask import Flask

app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)

def get_hit_count():
    retries = 5
    while True:
        try:
            return cache.incr('hits')
        except redis.exceptions.ConnectionError as exc:
            if retries == 0:
                raise exc
            retries -= 1
            time.sleep(0.5)

@app.route('/')
def hello():
    count = get_hit_count()
    return 'Hello World! I have been seen {} times.\n'.format(count)
  1. 然后再创建一个依赖文件
vim requirements.txt
# 并且写上
flask
redis

3.2 step2 : Create a Dockerfile

在此步骤中,您将编写一个构建 Docker 映像的 Dockerfile。该映像包含 Python 应用程序所需的所有依赖项,包括 Python 本身。

在您的项目目录中,创建一个名为Dockerfile并粘贴以下内容的文件:

FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]

这个Dockerfile告诉了docker下面的操作 :

  • 从 Python 3.7 映像开始构建映像。
  • 将工作目录设置为/code
  • 设置flask的环境变量
  • 安装我们所需要的一些依赖比如 gcc, musl-dev
  • 将我们容器外部写的requirements.txt文件搞到容器内部, 然后pip运行安装里面的依赖
  • 暴露5000端口
  • copy当前目录到容器的工作目录下
  • 运行命令 flask run
    如果想要了解更多的dockerfile命令请查看这个官网链接

3. 3 step3 : Create a docker-compose 文件

在您的项目目录中创建一个名为的文件docker-compose.yml并粘贴以下内容:

version: "3.9"
services:
  web:
    build: .
    ports:
      - "8000:5000"
  redis:
    image: "redis:alpine"

这个yaml文件定义了两个服务一个是我们的web通过dockerfile来构建, 一个是redis

3.4 step4 启动

最后我们在当前目前运行命令即可

docker-compose up

这样就算运行成功了, 我们访问一下这个地址
在这里插入图片描述
在这里插入图片描述
nice, 我们就成功的发布一个项目啦, 而且是很快速的发布
在这里插入图片描述

4. 以上内容都可以在docker Docs 官网找到

传送门

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gopher333

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值