Docker学习12 使用Compose管理容器集群


Docker学习12 使用Compose管理容器集群

文章插图
 
一、功能说明容器在当今的云计算中极为重要 , 是构建微服务的重要组成部分 。而一个微服务如果由多个容器 , 比如Nginx+php+MySQL , 单个容器分开管理会非常麻烦。目前华为云、阿里云等厂商都提供了很多Docker容器的管理工具 。Docker Compose 可以轻松、高效的管理容器 , 它是一个用于定义和运行多容器 Docker 的应用程序工具 。
Docker学习12 使用Compose管理容器集群

文章插图
 
一个使用docker-compose的架构示例
二、安装linux下的安装命令:
sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-composesudo chmod +x /usr/local/bin/docker-composedocker-compose -vmac环境在使用安装文件安装Docker时会自带Compose
三、常用命令# 列出所有容器docker-compose ps# 看服务日志docker-compose logs# 打印绑定的公共端口 , 下面是个示例docker-compose port eureka 8761# 构建服务docker-compose build# 启动指定服务已存在的容器docker-compose start eureka# 停止已运行的服务的容器docker-compose stop eureka# 删除指定服务的容器docker-compose rm eureka# 构建启动容器 , 更新容器docker-compose up# kill:通过发送 SIGKILL 信号来停止指定服务的容器docker-compose kill eureka# pull:下载服务镜像# scale:设置指定服务运气容器的个数 , 以 service=num 形式指定docker-compose scale user=3 movie=3# run:在一个服务上执行一个命令docker-compose run web bash四、使用步骤
  1. 使用 Dockerfile 定义应用程序的环境 。
  2. 使用 docker-compose.yml 定义构成应用程序的服务 , 这样它们可以在隔离环境中一起运行 。
  3. docker-compose up 启动 。
五、测试步骤1. 准备文件mkdir composetestcd composetestvim App.pyimport timeimport redisfrom flask import Flaskapp = Flask(__name__)cache = redis.Redis(host='redis', port=6379)def get_hit_count():retries = 5while True:try:return cache.incr('hits')except redis.exceptions.ConnectionError as exc:if retries == 0:raise excretries -= 1time.sleep(0.5)@app.route('/')def hello():count = get_hit_count()return 'Hello World! I have been seen {} times.n'.format(count)这个示例Python去访问redis服务 , 端口6379 。
在 composetest 目录中创建另一个名为 requirements.txt 的文件 , 内容如下:
flaskredis2. 编辑vim Dockerfile文件FROM python:3.7-alpineWORKDIR /codeENV FLASK_APP app.pyENV FLASK_RUN_HOST 0.0.0.0RUN apk add --no-cache gcc musl-dev linux-headersCOPY requirements.txt requirements.txtRUN pip install -r requirements.txtCOPY . .CMD ["flask", "run"]这个Dockerfile是构建Python容器使用 。字段解释如下:
  • FROM python:3.7-alpine: 从 Python 3.7 映像开始构建镜像 。
  • WORKDIR /code: 将工作目录设置为 /code 。
  • ENV FLASK_APP app.py flask主文件设置
  • ENV FLASK_RUN_HOST 0.0.0.0 设置 flask 命令使用的环境变量 。
  • RUN apk add --no-cache gcc musl-dev linux-headers: 安装 gcc , 以便诸如 MarkupSafe 和 SQLAlchemy 之类的 Python 包可以编译加速 。
  • COPY requirements.txt requirements.txt
  • RUN pip install -r requirements.txt 复制 requirements.txt 并安装 Python 依赖项 。
  • COPY . .: 将 . 项目中的当前目录复制到 . 镜像中的工作目录 。
  • CMD ["flask", "run"]: 容器提供默认的执行命令为:flask run 。
3. 创建 docker-compose.yml在测试目录中创建一个名为 docker-compose.yml 的文件:
# yaml 配置version: '3'services:web:build: .ports:- "5000:5000"redis:image: "redis:alpine"该 Compose 文件定义了两个服务:web 和 redis 。
  • version: 指定 docker-compose.yml 文件的写法格式
  • services: 多个容器的集合
  • web:该 web 服务使用从 Dockerfile 当前目录中构建的镜像 。然后 , 它将容器和主机绑定到暴露的端口 5000 。此示例服务使用 Flask Web 服务器的默认端口 5000。
  • redis:该 redis 服务使用 Docker Hub 的公共 Redis 映像 。
  • links: 服务之间可以使用服务名称相互访问 , links 允许定义一个别名 , 从而使用该别名访问其它服务 , 如:
version: '2'services:web:build: .links:- "db:database"db:image: postgresWeb 服务就可以使用 db 或 database 作为 hostname 访问 db 服务了 。


推荐阅读