简介
Compose是用于定义和运行多容器Docker应用程序的工具。通过Compose,您可以使用YAML文件来配置应用程序的服务。然后,使用一个命令,就可以从配置中创建并启动所有服务。
使用Compose基本上是一个三步过程:
- 使用定义您的应用环境,Dockerfile 以便可以在任何地方复制。
- 定义组成应用程序的服务,docker-compose.yml 以便它们可以在隔离的环境中一起运行。
- Run docker-compose up and Compose启动并运行您的整个应用程序。
一个docker-compose.yml看起来像这样:
version: "3.8"services:web:build: .ports:- "5000:5000"volumes:- .:/code- logvolume01:/var/loglinks:- redisredis:image: redisvolumes:logvolume01: {}
安装
https://github.com/docker/compose/releases
添加文件路径到系统环境变量中
上手体验
步骤1:设置
为项目创建目录:
$ mkdir composetest$ cd composetest
app.py在项目目录中创建一个名为的文件,并将其粘贴到:import 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)
requirements.txt在项目目录中创建另一个名为的文件,并将其粘贴到:flaskredis
步骤2:创建 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.txtEXPOSE 5000COPY . .CMD ["flask", "run"]
步骤3:编写Docker-compose.yml
docker-compose.yml在项目目录中创建一个名为的文件,然后粘贴以下内容:version: "3.8"services:web:build: .ports:- "5000:5000"redis:image: "redis:alpine"
步骤4:生成运行项目
其他命令
https://docs.docker.com/compose/gettingstarted/
YML文件释义
version: "3.8" # docker-compose 文件格式版本services: # 服务内容web: # web服务,自建build: .ports:- "5000:5000"redis: # redis服务image: "redis:alpine"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/
Define and run multi-container applications with Docker.Usage:docker-compose [-f <arg>...] [options] [--] [COMMAND] [ARGS...]docker-compose -h|--helpOptions:-f, --file FILE Specify an alternate compose file(default: docker-compose.yml)-p, --project-name NAME Specify an alternate project name(default: directory name)-c, --context NAME Specify a context name--verbose Show more output--log-level LEVEL Set log level (DEBUG, INFO, WARNING, ERROR, CRITICAL)--no-ansi Do not print ANSI control characters-v, --version Print version and exit-H, --host HOST Daemon socket to connect to--tls Use TLS; implied by --tlsverify--tlscacert CA_PATH Trust certs signed only by this CA--tlscert CLIENT_CERT_PATH Path to TLS certificate file--tlskey TLS_KEY_PATH Path to TLS key file--tlsverify Use TLS and verify the remote--skip-hostname-check Don't check the daemon's hostname against thename specified in the client certificate--project-directory PATH Specify an alternate working directory(default: the path of the Compose file)--compatibility If set, Compose will attempt to convert keysin v3 files to their non-Swarm equivalent (DEPRECATED)--env-file PATH Specify an alternate environment fileCommands:build Build or rebuild servicesconfig Validate and view the Compose filecreate Create servicesdown Stop and remove containers, networks, images, and volumesevents Receive real time events from containersexec Execute a command in a running containerhelp Get help on a commandimages List imageskill Kill containerslogs View output from containerspause Pause servicesport Print the public port for a port bindingps List containerspull Pull service imagespush Push service imagesrestart Restart servicesrm Remove stopped containersrun Run a one-off commandscale Set number of containers for a servicestart Start servicesstop Stop servicestop Display the running processesunpause Unpause servicesup Create and start containersversion Show version information and quit
Wordpress应用
version: '3.3'services:db:image: mysql:5.7volumes:- db_data:/var/lib/mysqlrestart: alwaysenvironment:MYSQL_ROOT_PASSWORD: somewordpressMYSQL_DATABASE: wordpressMYSQL_USER: wordpressMYSQL_PASSWORD: wordpresswordpress:depends_on:- dbimage: wordpress:latestports:- "8000:80"restart: alwaysenvironment:WORDPRESS_DB_HOST: db:3306WORDPRESS_DB_USER: wordpressWORDPRESS_DB_PASSWORD: wordpressWORDPRESS_DB_NAME: wordpressvolumes:db_data: {}
My_ENV
version: '3.8'services:htppbin:restart: alwaysimage: kennethreitz/httpbincontainer_name: httbinports:- 6001:80node-red:restart: alwaysimage: nodered/node-red:latestcontainer_name: node-redports:- 6002:1880depends_on:- htppbindrawio:restart: alwaysimage: jgraph/drawio:latestcontainer_name: drawioports:- 6003:8080depends_on:- node-redemqx:restart: alwaysimage: emqx/emqx:latestcontainer_name: emqxports:['8081:8081','8083:8083','8084:8084','1883:1883','8883:8883','18083:18083',]environment:- 'EMQX_NAME=emqx'- 'EMQX_HOST=node1.emqx.io'depends_on:- drawio
