用于管理一组容器的, 添加 删除 修改等等。
该工具 通过yml 文件定义多容器的docker应用。
https://docs.docker.com/compose/install/ linux 下载安装在这里
依然还是 flask-hello-word 这个文件夹
[miller@docker4 py-flask-redis]$ ls app.py docker-compose.yml Dockerfile [miller@docker4 py-flask-redis]$ cat app.py from flask import Flask import redis import os host = os.environ.get("REDIS_HOST", "redis") # REDIS_HOST 这个参数是 docker build 时 -e 参数传进来的系统环境变量。
redis_conn = redis.Redis(host=host, port="6379") app = Flask(__name__) @app.route("/") def web_test(): res = redis_conn.incr("range_key") return "这是我第 %s 次调用, incr 方法。" % res if __name__ == "__main__": app.run(host="0.0.0.0", port=5000)
[miller@docker4 py-flask-redis]$ cat docker-compose.yml # yml 的格式要求特别严格, 一定要加空格 version: '3' services: redis: # 创建容器 名字叫 redis 这个名字最后会被 docker-compose 组合到最终的名字中 image: 'redis:latest' # 使用的是这个image。 我下载下来了 web: # 创建容器 名字叫 web build: # 这个荣去需要 执行build命令构建! context: '.' # 这个就是路径, docker build xxxxxx . 最后的这个 . 就是要发送给 docker服务端要进行构建的文件目录。 . 就是当前目录 dockerfile: 'Dockerfile' # 构建时使用到的 Dockerfile 的名字。 默认都是Dockerfile ports: # 这个就是 docker build 时,使用到的 -p 参数 - '8800:5000' environment: # 这个是 -e 参数 REDIS_HOST: 'redis'
[miller@docker4 py-flask-redis]$ cat Dockerfile FROM python:3.7.7 LABEL maintainer="5913114@qq.com" COPY app.py /app/ RUN pip install flask redis WORKDIR /app EXPOSE 5000 CMD ["python3", "app.py"]
[miller@docker4 py-flask-redis]$ docker-compose -f docker-compose.yml up -d # -d 后台执行
Creating network "py-flask-redis_default" with the default driver
Creating py-flask-redis_redis_1 ... done
Creating py-flask-redis_web_1 ... done
我这虚拟主机的 ip是 192.168.42.22
访问 192.168.42.22:8800 就可以访问这个页面。
[miller@docker4 py-flask-redis]$ docker-compose ps Name Command State Ports ---------------------------------------------------------------------------------------- py-flask-redis_redis_1 docker-entrypoint.sh redis ... Up 6379/tcp py-flask-redis_web_1 python3 app.py Up 0.0.0.0:8800->5000/tcp
[miller@docker4 py-flask-redis]$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c7ca7919c352 py-flask-redis_web "python3 app.py" About a minute ago Up About a minute 0.0.0.0:8800->5000/tcp py-flask-redis_web_1 39edcde9b3b2 redis:latest "docker-entrypoint.s…" About a minute ago Up About a minute 6379/tcp py-flask-redis_redis_1
# docker-compose 起名字的时候, 会将 docker-compose up 时的 目录和一个数字 组合进去。
py-flask-redis _redis_ 1
目录名 在yml文件中自己设置的名字 这个数组应该是, 当前构建的第几次。 删除后又会从1开始
这就是 基于Compose 的简单的, 容器编排。 但是Compose只是 适用于单机的。 更多情况下时 集群的。
学习 k8s 吧。 时间宝贵。