Docker Compose

2. Docker Compose

https://docs.docker.com/compose/

Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。使用 Compose,您可以使用 YAML 文件来配置应用程序的服务。然后,使用一个命令,您可以从您的配置中创建并启动所有服务。

将多个docker容器组成一个启动

1.安装

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.0/dockercompose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose

# or
# ubuntu
sudo apt install docker-compose

2. Yaml语法

Yaml语法教程

name: wangweibin
url: http://www.baidu.com
page: 88
address:
  street: 宏福科技园
  city: 北京市昌平区
  country: 中国
links:
- name: Google
  url: http://www.google.com
- name: Baidu
  url: http://www.baidu.com

{
    "name": "wangweibin",
    "url": "http://www.baidu.com",
    "page": 88,
    "address": {
        "street": "宏福科技园",
        "city": "北京市昌平区",
        "country": "中国"
    },
    "links": [
        {
            "name": "Google",
            "url": "http://www.google.com"
        },
        {
            "name": "Baidu",
            "url": "http://www.baidu.com"
        }
    ]
}

3.一个小Demo

3.1 定义依赖

mkdir composetest
cd composetest

编写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)

创建一个requirements.txt文件

flask
redis

3.2 创建Dockerfile

Dockerfile 用于构建 Docker 映像。该映像包含 Python 应用程序所需的所有依赖项,包括 Python 本身。

# syntax=docker/dockerfile:1
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"]

这告诉 Docker:

  • 从 Python 3.7 映像开始构建映像。
  • 将工作目录设置为/code.
  • 设置命令使用的环境变量flask
  • 安装 gcc 和其他依赖
  • 复制requirements.txt并安装 Python 依赖项。
  • 在镜像中添加元数据来描述容器正在监听 5000 端口
  • 将项目中的当前目录复制.到镜像中的workdir .
  • 将容器的默认命令设置为flask run.

3.3 编写compose.yml

version: "3.9" # 指定版本号  查看官方文档:https://docs.docker.com/compose/compose-file/compose-versioning/
services: # 所有需要启动的服务
  web: # 第一个服务名称
    build: . # docker build -t xx -f Dokcerfile .
    ports: # 指定暴漏的端口
      - "8000:5000"
  redis: # 第二个服务名称
    image: "redis:alpine"
  # 可以编写第三个服务名称

启动

docker-compose up -d -d分离运行

使用pip安装有可能遇到time out的情况,使用替换当前Dockerfile种的命令

pip --default-timeout=100 install 模块名称 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

pip --default-timeout=100 install -r requestments.txt -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

停止

docker-compose stop 关闭compose

docker-compose down 删除compose

posted @ 2023-02-15 14:26  松间明月447  阅读(28)  评论(0编辑  收藏  举报