Docker-compose

什么是Docker Compose?

  • Docker Compose是一个工具
  • 这个工具可以通过yml文件来定义多容器的应用
  • 通过一条命令就可以根据yml文件的定义去创建、管理多个容器
sudo curl -L "https://github.com/docker/compose/releases/download/1.25.3/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.yml文件

Docker Compose中很重要的就是docker-compose.yml文件,这个文件包含了三个很重要的概念,分别是services、networks以及volumes。

  • services

  一个service就是一个container,这个container可以从dockerhub的image来,也可以从本地的Dockerfile创建的image来;service的启动类似于docker run,当我们在使用docker run 是可以给其指定参数network和volume,同理也可以给service指定network和volume。

 

compose命令详解

 

build(构建yml中某个服务的镜像)
ps(查看已经启动的服务状态)
kill(停止某个服务)
logs(可以查看某个服务的log)
port(打印绑定的public port)
pull(pull服务镜像)
up(启动yml定义的所有服务)
down(停止yml定义的所有服务,并删除创建的容器)
stop(停止yml中定义的所有服务)
start(启动被停止的yml中的所有服务)
kill(强行停止yml中定义的所有服务)
rm(删除yml中定义的所有服务)
restart(重启yml中定义的所有服务)
scale(扩展某个服务的个数,可以向上或向下)
migrate-to-labels(这个没有实际尝试。根据介绍是将服务从1.2迁移到1.3带labels的版本。docker之前不支持label)
version(查看compose的版本)
exec *** bash (登录到某个容器)

 

 

示例:

app.py

from flask import Flask
from redis import Redis
import os
import socket

app = Flask(__name__)
redis = Redis(host=os.environ.get('REDIS_HOST','127.0.0.1'),port=6379)

@app.route('/')
def hello():
    redis.incr('hits')
    return 'Hello Container World! I have been seen %s times and my hostname is %s.\n' % (redis.get('hits'),socket.gethostname())

if __name__ == "__main__":
   app.run(host="0.0.0.0",port=80,debug=True)

 

Dockerfile

FROM python:2.7
COPY . /app/
WORKDIR /app/
RUN pip install flask redis
EXPOSE 80
CMD ["python","app.py"]

 

docker-compose.yml

version: "3"
  
services:

  redis:
    image: redis

  web:
    build:
      context: .
      dockerfile: Dockerfile
    environment:
      REDIS_HOST: redis

  lb:
    image: dockercloud/haproxy
    links:
      - web
    ports:
      - 8080:80
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

 

posted @ 2021-09-25 11:40  year12  阅读(54)  评论(0编辑  收藏  举报