docker(四、容器编排docker compose)
- 在实际的生产环境中,一个应用往往由多个组件构成,如果一个docker只运行一个进程,那运行多个组件则必须运行多个容器
- 在一个由容器构成的应用中,需要一个有效的工具来定义一个应用由哪些容器组成,容器之间如果关联,这就是容器编排。
- compose:
- 概念:一个用来定义和运行多容器应用的工具,可以通过一个yaml文件的配置管理所有服务。
- 原理:compose是使用yml文件定义多容器,本质上来讲,就是一个对docker命令的封装。
- 步骤:
- 用dockerfile定义应用的运行环境,以便应用在任何地方都可以复制
- 用docker-compose.yml文件定义应用的各个服务,以便这些服务可以作为应用的组件一起运行
- 执行docker-compose up命令,compose就会创建和运行整个应用
- compose安装:
- github发布页:https://github.com/docker/compose/releases
- centos下载compose:sudo curl -L “https://github.com/docker/compose/releases/download/v2.6.1/docker-compose-linux-x86_64” -o /usr/local/bin/docker_compose(-o 的作用相当于把docker-compose-linux-x86_64下载到bin目录下,并更名为docker_compose)
下载compose遇到问题:curl: (35) Encountered end of file
原因是没开启443端口(https网页浏览端口,类似http的80端口),解决办法:
# systemctl start firewalld # 开启防火墙
# firewall-cmd --zone=public --add-port=443/tcp --permanent # 添加 443 端口访问
# firewall-cmd --reload # 重新加载让配置生效
如果下载很慢,可以先下载安装包,通过xftp上传到centos
-
进入 /usr/local/bin/目录,执行命令:chmod 777 docker_compose;
-
查看compose版本号:./docker_compose -v
-
卸载docker_compose : rm /usr/local/bin/docker_compose
纠正,不要命名为docker_compose,而要命名为docker-compose
compose测试
三个主要步骤:参看官网
- 创建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
- 创建Dockerfile文件:
安装pyhton包管理工具# 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 sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories 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"]
- 创建compose文件,定义服务
version: "3.9" services: web: build: . ports: - "8000:5000" volumes: // 添加一个数据卷 - .:/code redis: // 公共镜像 image: "redis:alpine"