走进docker-compose

>>强大,10k+点赞的 SpringBoot 后台管理系统竟然出了详细教程!

什么是Docker-Compose?

Docker-Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。比如我们发布一个系统可能包含多个服务,服务与服务之间网络需要互通,那此时我们需要一个容器一个容器去启动,如果使用Docker-Compose即可定义一个描述文件docker-compose.yaml完成所有服务的发布, 并且实现容器间互通(单台物理机)。

Docker-Compose安装

  1. 参考上篇文章安装Docker环境
  2. 安装Docker-Compose

    #下载二进制
    sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
    #修改执行权限
    sudo chmod +x /usr/local/bin/docker-compose
    • 命令安装
  • 下载可执行文件安装

    新建目录Compose可执行二进制文件下载

    #下载二进制
    mv docker-compose /usr/local/bin/docker-compose
    #修改执行权限
    sudo chmod +x /usr/local/bin/docker-compose

Docker-Compose命令

官网demo:


version: '3'
services:
  back:
    image: backService:1.0
    container_name: back
    environment:
      - name=tom
      - DB_PATH=jdbc:sqlite:/data/ns.db
    restart: always
    privileged: true
    ports:
      - "9000:9000"
    networks:
      - "net"
    volumes:
      - "/root/k3s.kube.config:/k3s.kube.config"
      - "/root/data:/data"
      - "/etc/network/interfaces:/etc/network/interfaces"
  front:
    image: front:1.0
    container_name: front
    restart: always
    ports:
      - "10087:80"
    networks:
      - "net"
    volumes:
      - "/root/nginx.conf:/etc/nginx/nginx.conf"
networks:
  net:

  • version
    1. v3 版本不支持 volume_from 和 extends 属性
    2. cpu 和 内存属性的设置移到了 deploy 中
    3. v3 版本直接支持 docker swarm,而 v2 版本不支持,这也是最主要的区别 如果是初学者,建议直接使用 v3。
  • services多个服务
    • driver 配置驱动
    • options 可选配置
    • image 镜像名称
    • build 不使用镜像时候采用主动build镜像
    • environment 环境变量
    • expose 标示端口号
    • ports 映射端口号到宿主机
    • volumes 挂在目录到宿主机
    • depend_on 规定service加载顺序,例如数据库服务需要在后台服务前运行
    • container_name 容器名称
    • networks 网络(自定义网络名称)
    • restart  always每次docker启动时候重启
    • links 连接目标容器(services下配置的名称)
    • privileged: true:容器可获得root权限
    • logging  日志选项
  • networks配置自定义网络

Docker-Compose实战

  1. 为项目创建目录:
mkdir composetest
cd composetest
  1. 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)

在此示例中,redis是应用程序网络上的redis容器的主机名。我们为Redis使用默认端口6379。3. requirements.txt在项目目录中创建另一个名为的文件,并将其粘贴到:

flask
redis
  1. 编写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的更多信息,请查看上篇文章

  1. 编写docker-compose.yml文件
version: "3"
services:
  web:
    build: .
    ports:
      - "5000:5000"
  redis:
    image: "redis:alpine"

该Compose文件定义了两个服务:web和redis。

  1. 运行服务
 docker-compose up

在浏览器中输入http://localhost:5000/以查看该应用程序正在运行。

下篇带大家详细介绍Docker-Machine,敬请期待!

欢迎关注公众号!

公众号回复:入群,扫码加入我们交流群!

走进docker-compose


原文始发于微信公众号(coding途中):走进docker-compose