简介
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/log
links:
- redis
redis:
image: redis
volumes:
logvolume01: {}
安装
https://github.com/docker/compose/releases
添加文件路径到系统环境变量中
上手体验
步骤1:设置
为项目创建目录:
$ mkdir composetest
$ cd composetest
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
步骤2:创建 Dockerfile
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
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"]
步骤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|--help
Options:
-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 the
name 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 keys
in v3 files to their non-Swarm equivalent (DEPRECATED)
--env-file PATH Specify an alternate environment file
Commands:
build Build or rebuild services
config Validate and view the Compose file
create Create services
down Stop and remove containers, networks, images, and volumes
events Receive real time events from containers
exec Execute a command in a running container
help Get help on a command
images List images
kill Kill containers
logs View output from containers
pause Pause services
port Print the public port for a port binding
ps List containers
pull Pull service images
push Push service images
restart Restart services
rm Remove stopped containers
run Run a one-off command
scale Set number of containers for a service
start Start services
stop Stop services
top Display the running processes
unpause Unpause services
up Create and start containers
version Show version information and quit
Wordpress应用
version: '3.3'
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes:
db_data: {}
My_ENV
version: '3.8'
services:
htppbin:
restart: always
image: kennethreitz/httpbin
container_name: httbin
ports:
- 6001:80
node-red:
restart: always
image: nodered/node-red:latest
container_name: node-red
ports:
- 6002:1880
depends_on:
- htppbin
drawio:
restart: always
image: jgraph/drawio:latest
container_name: drawio
ports:
- 6003:8080
depends_on:
- node-red
emqx:
restart: always
image: emqx/emqx:latest
container_name: emqx
ports:
[
'8081:8081',
'8083:8083',
'8084:8084',
'1883:1883',
'8883:8883',
'18083:18083',
]
environment:
- 'EMQX_NAME=emqx'
- 'EMQX_HOST=node1.emqx.io'
depends_on:
- drawio