简介

Compose是用于定义和运行多容器Docker应用程序的工具。通过Compose,您可以使用YAML文件来配置应用程序的服务。然后,使用一个命令,就可以从配置中创建并启动所有服务。
使用Compose基本上是一个三步过程:

  1. 使用定义您的应用环境,Dockerfile 以便可以在任何地方复制。
  2. 定义组成应用程序的服务,docker-compose.yml 以便它们可以在隔离的环境中一起运行。
  3. Run docker-compose up and Compose启动并运行您的整个应用程序。

一个docker-compose.yml看起来像这样:

  1. version: "3.8"
  2. services:
  3. web:
  4. build: .
  5. ports:
  6. - "5000:5000"
  7. volumes:
  8. - .:/code
  9. - logvolume01:/var/log
  10. links:
  11. - redis
  12. redis:
  13. image: redis
  14. volumes:
  15. logvolume01: {}

安装

https://github.com/docker/compose/releases
添加文件路径到系统环境变量中

上手体验

步骤1:设置

  1. 为项目创建目录:

    1. $ mkdir composetest
    2. $ cd composetest
  2. app.py在项目目录中创建一个名为的文件,并将其粘贴到:

    1. import time
    2. import redis
    3. from flask import Flask
    4. app = Flask(__name__)
    5. cache = redis.Redis(host='redis', port=6379)
    6. def get_hit_count():
    7. retries = 5
    8. while True:
    9. try:
    10. return cache.incr('hits')
    11. except redis.exceptions.ConnectionError as exc:
    12. if retries == 0:
    13. raise exc
    14. retries -= 1
    15. time.sleep(0.5)
    16. @app.route('/')
    17. def hello():
    18. count = get_hit_count()
    19. return 'Hello World! I have been seen {} times.\n'.format(count)
  3. requirements.txt在项目目录中创建另一个名为的文件,并将其粘贴到:

    1. flask
    2. redis

    步骤2:创建 Dockerfile

    1. FROM python:3.7-alpine
    2. WORKDIR /code
    3. ENV FLASK_APP=app.py
    4. ENV FLASK_RUN_HOST=0.0.0.0
    5. RUN apk add --no-cache gcc musl-dev linux-headers
    6. COPY requirements.txt requirements.txt
    7. RUN pip install -r requirements.txt
    8. EXPOSE 5000
    9. COPY . .
    10. CMD ["flask", "run"]

    步骤3:编写Docker-compose.yml

    docker-compose.yml在项目目录中创建一个名为的文件,然后粘贴以下内容:

    1. version: "3.8"
    2. services:
    3. web:
    4. build: .
    5. ports:
    6. - "5000:5000"
    7. redis:
    8. image: "redis:alpine"

    步骤4:生成运行项目

    docker-compose up 运行项目

    其他命令

    https://docs.docker.com/compose/gettingstarted/

    YML文件释义

    1. version: "3.8" # docker-compose 文件格式版本
    2. services: # 服务内容
    3. web: # web服务,自建
    4. build: .
    5. ports:
    6. - "5000:5000"
    7. redis: # redis服务
    8. image: "redis:alpine"
    9. volume: # 数据卷

    上述docker-compose.yml文件中释义,更多命令查看:https://docs.docker.com/compose/compose-file/

    Docker-compose CLI

    | 命令 | 释义 | | —- | —- | | docker-compose up | 启动并创建容器 | | docker-compose pause | 暂停容器 | | docker-compose unpause | 取消暂停容器 | | docker-compose down | 停止容器 | | docker-compose restart | 重启容器 | | docker-compose rm | 删除容器 | | docker-compose ps | 查看运行的容器列表 | | docker-compose logs | 查看容器日志 |

更多命令:https://docs.docker.com/compose/reference/overview/

  1. Define and run multi-container applications with Docker.
  2. Usage:
  3. docker-compose [-f <arg>...] [options] [--] [COMMAND] [ARGS...]
  4. docker-compose -h|--help
  5. Options:
  6. -f, --file FILE Specify an alternate compose file
  7. (default: docker-compose.yml)
  8. -p, --project-name NAME Specify an alternate project name
  9. (default: directory name)
  10. -c, --context NAME Specify a context name
  11. --verbose Show more output
  12. --log-level LEVEL Set log level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
  13. --no-ansi Do not print ANSI control characters
  14. -v, --version Print version and exit
  15. -H, --host HOST Daemon socket to connect to
  16. --tls Use TLS; implied by --tlsverify
  17. --tlscacert CA_PATH Trust certs signed only by this CA
  18. --tlscert CLIENT_CERT_PATH Path to TLS certificate file
  19. --tlskey TLS_KEY_PATH Path to TLS key file
  20. --tlsverify Use TLS and verify the remote
  21. --skip-hostname-check Don't check the daemon's hostname against the
  22. name specified in the client certificate
  23. --project-directory PATH Specify an alternate working directory
  24. (default: the path of the Compose file)
  25. --compatibility If set, Compose will attempt to convert keys
  26. in v3 files to their non-Swarm equivalent (DEPRECATED)
  27. --env-file PATH Specify an alternate environment file
  28. Commands:
  29. build Build or rebuild services
  30. config Validate and view the Compose file
  31. create Create services
  32. down Stop and remove containers, networks, images, and volumes
  33. events Receive real time events from containers
  34. exec Execute a command in a running container
  35. help Get help on a command
  36. images List images
  37. kill Kill containers
  38. logs View output from containers
  39. pause Pause services
  40. port Print the public port for a port binding
  41. ps List containers
  42. pull Pull service images
  43. push Push service images
  44. restart Restart services
  45. rm Remove stopped containers
  46. run Run a one-off command
  47. scale Set number of containers for a service
  48. start Start services
  49. stop Stop services
  50. top Display the running processes
  51. unpause Unpause services
  52. up Create and start containers
  53. version Show version information and quit

Wordpress应用

  1. version: '3.3'
  2. services:
  3. db:
  4. image: mysql:5.7
  5. volumes:
  6. - db_data:/var/lib/mysql
  7. restart: always
  8. environment:
  9. MYSQL_ROOT_PASSWORD: somewordpress
  10. MYSQL_DATABASE: wordpress
  11. MYSQL_USER: wordpress
  12. MYSQL_PASSWORD: wordpress
  13. wordpress:
  14. depends_on:
  15. - db
  16. image: wordpress:latest
  17. ports:
  18. - "8000:80"
  19. restart: always
  20. environment:
  21. WORDPRESS_DB_HOST: db:3306
  22. WORDPRESS_DB_USER: wordpress
  23. WORDPRESS_DB_PASSWORD: wordpress
  24. WORDPRESS_DB_NAME: wordpress
  25. volumes:
  26. db_data: {}

My_ENV

  1. version: '3.8'
  2. services:
  3. htppbin:
  4. restart: always
  5. image: kennethreitz/httpbin
  6. container_name: httbin
  7. ports:
  8. - 6001:80
  9. node-red:
  10. restart: always
  11. image: nodered/node-red:latest
  12. container_name: node-red
  13. ports:
  14. - 6002:1880
  15. depends_on:
  16. - htppbin
  17. drawio:
  18. restart: always
  19. image: jgraph/drawio:latest
  20. container_name: drawio
  21. ports:
  22. - 6003:8080
  23. depends_on:
  24. - node-red
  25. emqx:
  26. restart: always
  27. image: emqx/emqx:latest
  28. container_name: emqx
  29. ports:
  30. [
  31. '8081:8081',
  32. '8083:8083',
  33. '8084:8084',
  34. '1883:1883',
  35. '8883:8883',
  36. '18083:18083',
  37. ]
  38. environment:
  39. - 'EMQX_NAME=emqx'
  40. - 'EMQX_HOST=node1.emqx.io'
  41. depends_on:
  42. - drawio