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
Nice to see you all!