Compose 简介
Compose 是一个用于定义和运行多容器Docker 应用程序的工具。 Compose 允许您使用YML 文件配置应用程序所需的所有服务。然后,您可以使用单个命令从YML 文件配置创建并启动所有服务。
如果您还不了解YML 文件组织,请首先阅读我们的YAML 入门教程。
使用Compose 的三个步骤:
使用Dockerfile 定义应用程序的环境。
使用docker-compose.yml 定义组成应用程序的服务,以便它们可以在隔离的环境中一起运行。
最后,运行docker-compose up 命令来启动并运行整个应用程序。
以下是docker-compose.yml 的示例配置(请参阅下面的配置参数):
实例
#yaml设置示例
版本:\’3\’
服务:
网络:
构建:
端口:
-\’5000:5000\’
第:卷
– ./代码
-logvolume01:/var/log
链接:
-redis
redis:
图片:redis
第:卷
日志量01:{}
Compose 安装
在Linux上,您可以从最新发布的版本地址:Releases·docker/compose·GitHub下载并使用二进制包。
通过运行以下命令下载当前稳定版本的Docker Compose:
$ sudo curl -L \’https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)\’ -o /usr/local/bin/docker -作曲家
要安装其他版本的Compose,请替换v2.2.2。
Docker Compose 存储在GitHub 上,并不稳定。
您还可以通过运行以下命令快速安装Docker Compose:
curl -L https://get.daocloud.io/docker/compose/releases/download/v2.4.1/docker-compose-`uname -s`-`uname -m` /usr/local/bin/docker-compose
对二进制文件应用可执行权限。
$ sudo chmod +x /usr/local/bin/docker-compose
创建软链接。
$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
测试是否安装成功。
$ docker-compose 版本
cker-compose 版本1.24.1,内部版本4667896b
注意:对于alpine,需要以下依赖项:py-pip、python-dev、libffi-dev、openssl-dev、gcc、libc-dev 和make。
macOS
Docker Desktop 和Docker Toolbox for Mac 已经包含Compose 和其他Docker 应用程序,因此Mac 用户无需单独安装Compose。有关Docker 安装说明,请参阅安装MacOS Docker。
windows PC
Docker Desktop 和Docker Toolbox for Windows 已经包含Compose 和其他Docker 应用程序,因此Windows 用户无需单独安装Compose。有关Docker 安装说明,请参阅安装Windows Docker。
使用
1、准备
创建一个测试目录。
$ mkdir 配置测试
$ cd 综合测试
在测试目录中创建一个名为app.py 的文件,然后复制并粘贴以下内容。
composetest/app.py 文件代码
导入时间
进口女士
fromflask导入烧瓶
应用程序=烧瓶(__名称__)
缓存=redis.Redis(主机=\’redis\’,端口=6379)
defget_hit_count():
重试=5
whileTrue:
尝试:
returncache.incr(\’命中\’)
异常redis.Exception.ConnectionErrorasexc:
ifretries==0:
射线前
重试-=1
睡眠时间(0.5)
@app.route(\’/\’)
德夫耙():
计数=get_hit_count()
return\’Hello World! 我已被查看{} 次。 \\n\’.格式(计数)
在此示例中,redis 是使用端口6379 的应用程序网络上的Redis 容器的主机名。
在composetest 目录中创建另一个名为requirements.txt的文件,其中包含以下内容:
烧瓶
女士们
2、创建 Dockerfile 文件
在composetest 目录中创建一个名为Dockerfile 的文件,其中包含以下内容:
来自python:3.7-alpine
工作目录/代码
ENV FLASK_APP app.py
环境FLASK_RUN_HOST 0.0.0.0
RUN apk add –no-cache gcc musl-dev linux-headers
要求.txt 复制要求.txt
运行pip install -r required.txt。
复制。
CMD [\’烧瓶\’, \’运行\’]
Dockerfile内容说明:
FROM python:3.7-alpine: 从Python 3.7 映像开始构建映像。 WORKDIR /code: 将工作目录设置为/code。 ENV FLASK_APP app.py
ENV FLASK_RUN_HOST 0.0.0.0 设置flask命令使用的环境变量。
RUN apk add –no-cache gcc musl-dev linux-headers: 安装gcc 以帮助更快地编译MarkupSafe 和SQLAlchemy 等Python 包。要求.txt 复制要求.txt
运行pip install -rrequirements.txt 会复制requests.txt 并安装Python 依赖项。
COPY .将项目的当前目录复制到. 图像工作目录。 CMD [\’flask\’, \’run\’]: 容器提供的默认运行命令是flask run。
3、创建 docker-compose.yml
在测试目录中创建一个名为docker-compose.yml 的文件并粘贴以下内容:
docker-compose.yml 配置文件
# yaml 设置
版本:\’3\’
服务:
网络:
构建:
端口:
-\’5000:5000\’
redis:
image:\’redis:alpine\’
该Compose 文件定义了两种服务:Web 和Redis。
web:Web 服务使用从Dockerfile 的当前目录构建的映像。接下来,将容器和主机绑定到公共端口5000。此示例服务使用Flask Web 服务器默认端口5000。 redis:此redis 服务使用Docker Hub 中的公共Redis 镜像。
4、使用 Compose 命令构建和运行您的应用
通过在测试目录中运行以下命令来启动应用程序:
docker-configuration up
如果想让服务在后台运行,可以添加-d参数。
docker-compose up -d
yml 配置指令参考
version
指定此yml 符合的compose 版本。
build
将其指定为构建映像的上下文路径。
例如,webapp 服务被指定为从上下文路径./dir/Dockerfile 构建的镜像。
版本:“3.7”
服务:
网络应用:
build:/dir
或者作为具有上下文中指定的路径以及可选Dockerfile 和参数的对象:
版本:“3.7”
服务:
网络应用:
内部版本:
context:/dir
dockerfile: Dockerfile-备用
参数:
内部版本号: 1
标签:
– \’com.example.description=会计Web 应用程序\’
– \’com.example.Department=Finance\’
– \’com.example.label-with-empty-value\’
目标:个产品
上下文:上下文路径。 dockerfile:指定构建镜像的Dockerfile文件名。 args:添加构建参数。这是一个只能在构建过程中访问的环境变量。标签:设置构建图像的标签。目标:多层结构。您可以指定要构建哪些层。
cap_add,cap_drop
添加或删除容器拥有的主机内核功能。
cap_add:
-ALL #启用所有权限
上限下降:
-SYS_PTRACE #关闭ptrace权限
cgroup_parent
如果为容器指定父cgroup,它将继承该组的资源限制。
cgroup_parent: m-执行器-abcd
command
覆盖启动容器的默认命令。
command: [\’捆绑\’、\’运行\’、\’瘦\’、\’-p\’、\’3000\’]
container_name
指定自定义容器名称而不是生成的默认名称。
容器名称: 我的网络容器
depends_on
设置依赖关系。
docker-compose up:按依赖顺序启动服务。在以下示例中,首先启动db 和redis,然后启动web。 docker-compose up SERVICE:自动包含SERVICE 依赖项。在以下示例中,docker-compose up web 还创建并启动db 和redis。 docker-compose stop:按依赖顺序停止服务。在以下示例中,web 先于db 和redis 停止。
版本:“3.7”
服务:
网络:
构建:
依赖_on:
-D b
-redis
redis:
图片: 女士
db:
image: 后灰色
注意:Web服务不会等待redis数据库完全启动后再启动。
deploy
指定与服务部署和运行相关的配置。仅在Swarm 模式下有用。
版本:“3.7”
服务:
redis:
图像: redis: 高山
部署:
模式:重复
复制品: 6
端点模式: dnsrr
标签:
description: \’此Redis 服务标签\’
资源:
限额:
cpus:“0.50”
内存: 50M
预订:
cpus:“0.25”
内存: 20M
重新启动_策略:
条件: 失败时
延迟: 5秒
最大尝试次数: 3
窗口: 120 秒
可选参数:
endpoint_mode:如何访问集群服务。
端点_mode: VIP
# Docker集群提供外部虚拟IP。所有请求都会通过这个虚拟IP到达集群服务中的机器。
端点模式: dnsrr
# DNS 轮询(DNSRR)。所有请求都会自动轮询以检索集群IP 列表中的IP 地址。
标签:为您的服务设置标签。您可以使用容器上的标签(与部署处于同一配置级别)来覆盖部署下的标签。
mode:指定服务提供的模式。
克隆:克隆一个服务,将指定的服务复制到集群机器上。
全球:全球服务。该服务部署到集群中的所有节点。
图:下图中,黄色方块为复制模式的运行条件,灰色方块为全局模式的运行条件。
Replica:如果是复制模式,则必须使用该参数配置一定数量的运行节点。
资源:配置服务器资源的使用限制。例如,上面的示例配置了运行Redis 集群所需的CPU 和内存使用量。避免过度的资源使用和异常。
restart_policy:配置容器终止时如何重新启动。
条件:可选“无”、“失败”或“任何”(默认值:“任何”)。延迟:设置重启前的等待时间(默认值:0)。 max_attempts:尝试重新启动容器的次数。经过此次数的尝试后,将不再进行尝试(默认值:始终重试)。 Windows:设置容器重启超时(默认值:0)。
rollback_config:配置更新失败时服务如何回滚。
并行度:一次回滚的容器数量。如果设置为0,所有容器将同时回滚。延迟:回滚每个容器组之间等待的时间量(默认0 秒)。 Failure_action:如果回滚失败该怎么办。继续或暂停(默认为暂停)。监控:每个容器更新后持续监控容器是否失败的时间量(ns|us|ms|s|m|h)(默认0秒)。 max_failure_ratio:回滚期间可接受的失败率(默认0)。 order:回滚时的操作顺序。先停止(串行回滚)或先启动(并行回滚)(默认为先停止)。
update_config:配置服务的更新方式。帮助配置滚动更新。
并行度:一次更新的容器数量。延迟:更新一组容器之前等待的时间。 Failure_action:如果更新失败该怎么办。继续、回滚或暂停(默认:暂停)。监控:每个容器更新后持续监控容器是否失败的时间量(ns|us|ms|s|m|h)(默认0秒)。 max_failure_ratio:更新过程中可接受的失败率。 order:回滚时的操作顺序。先停止(串行回滚)或先启动(并行回滚)(默认为先停止)。
注意:仅支持V3.4及以上版本。
devices
指定设备映射列表。
设备:
– \’/dev/ttyUSB0:/dev/ttyUSB0\’
dns
自定义DNS 服务器。您可以指定单个值或多个值的列表。
域名解析: 8.8.8.8
域名解析:
-8.8.8.8
-9.9.9.9
dns_search
自定义DNS 搜索域。可以是单个值或列表。
dns_search: example.com
dns_search:
– dc1.example.com
– dc2.example.com
entrypoint
覆盖容器的默认入口点。
入口点: /code/entrypoint.sh
也可以采用以下格式:
切入点:
-php
– -d
– zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so
– -d
-内存限制=-1
– 供应商/bin/phpunit
env_file
从文件添加环境变量。您可以指定单个值或多个值的列表。
env_file:env
也可以是列表格式。
环境文件:
– ./common.env
– ./apps/web.env
– /opt/secrets.env
environment
添加环境变量。可以是数组或字典,任何布尔值。布尔值必须用引号引起来,以防止YML 解析器将它们转换为True 或False。
环境:
RACK_ENV:开发
SHOW:“真实”
expose
虽然端口是公开的,但它没有映射到主机,只能由连接的服务访问。
只能将内部端口指定为参数。
公众:
– “3000”
– “8000”
extra_hosts
添加主机名映射。类似于docker client –add-host。
extra_hosts:
-“somehost:162.242.195.82”
– \’其他主机:50.31.209.229\’
上面的内容在此服务的内部容器内的/etc/hosts 中创建了IP 地址和主机名的映射。
162.242.195.82 萨姆主机
50.31.209.229 其他主机
healthcheck
用于检查Docker服务是否正常运行。
健康检查:
test: [\’CMD\’, \’curl\’, \’-f\’, \’http://localhost\’] # 设置检测程序
Interval: 1m30s # 设置检测间隔
timeout: 10s #设置检测超时时间
retries: 3 #设置重试次数
start_period: 40s # 启动后检测程序需要多少秒才能启动?
image
指定容器运行的镜像。接受以下格式:
图片: 女士
图像: ubuntu:14.04
image: 塔图姆/influxdb
image: example-registry.com:4000/postgresql
image: a4bc65fd #图像ID
logging
服务日志设置。
driver:指定服务容器的日志驱动程序。默认值为json 文件。有3个选择
driver: \’json 文件\’
driver:“系统日志”
driver:“无”
仅对于json 文件驱动程序,您可以使用以下参数限制日志的数量和大小:
记录:
driver: json 文件
选项:
max-size: \’200k\’ # 一个文件的大小为200k
max-file: \’10\’ # 最多10 个文件
当达到文件限制时,旧文件将被自动删除。
syslog驱动程序允许您使用syslog-address指定日志接收地址。
记录:
driver: 系统日志
选项:
系统日志地址:\’tcp: //192.168.0.42:123\’
network_mode
设置网络模式。
network_mode: \’桥\’
network_mode: \’主机\’
network_mode: \’无\’
network_mode: \’service:[服务名称]\’
network_mode: \’container:[容器名称/ID]\’
网络
参考顶级网络下的条目配置容器连接的网络。
服务:
一些服务:
网络:
一些网络:
别名:
-别名1
其他-网络:
别名:
-别名2
网络:
一些网络:
#使用自定义驱动
driver: 自定义驱动程序-1
其他-网络:
# 使用带有特殊选项的自定义驱动程序
driver: 自定义驱动程序-2
别名:同一网络上的其他容器可以使用服务名称或此别名连接到相应容器的服务。
restart
no:这是默认的重启策略,任何情况下容器都不会重启。总是:容器将始终重新启动。 on-failure:仅当容器异常终止(退出状态非零)时,容器才会重新启动。 Until-stopped:容器退出时始终重新启动,但启动Docker 守护进程时不考虑已停止的容器。
重新启动:“否”
重新启动: 等
ways
restart: on-failure
restart: unless-stopped
注:swarm 集群模式,请改用 restart_policy。
secrets
存储敏感数据,例如密码:
version: \”3.1\”
services:
mysql:
image: mysql
environment:
MYSQL_ROOT_PASSWORD_FILE: /run/secrets/my_secret
secrets:
– my_secret
secrets:
my_secret:
file: ./my_secret.txt
security_opt
修改容器默认的 schema 标签。
security-opt:
– label:user:USER # 设置容器的用户标签
– label:role:ROLE # 设置容器的角色标签
– label:type:TYPE # 设置容器的安全策略标签
– label:level:LEVEL # 设置容器的安全等级标签
stop_grace_period
指定在容器无法处理 SIGTERM (或者任何 stop_signal 的信号),等待多久后发送 SIGKILL 信号关闭容器。
stop_grace_period: 1s # 等待 1 秒
stop_grace_period: 1m30s # 等待 1 分 30 秒
默认的等待时间是 10 秒。
stop_signal
设置停止容器的替代信号。默认情况下使用 SIGTERM 。
以下示例,使用 SIGUSR1 替代信号 SIGTERM 来停止容器。
stop_signal: SIGUSR1
sysctls
设置容器中的内核参数,可以使用数组或字典格式。
sysctls:
net.core.somaxconn: 1024
net.ipv4.tcp_syncookies: 0
sysctls:
– net.core.somaxconn=1024
– net.ipv4.tcp_syncookies=0
tmpfs
在容器内安装一个临时文件系统。可以是单个值或列表的多个值。
tmpfs: /run
tmpfs:
– /run
– /tmp
ulimits
覆盖容器默认的 ulimit。
ulimits:
nproc: 65535
nofile:
soft: 20000
hard: 40000
volumes
将主机的数据卷或者文件挂载到容器里。
version: \”3.7\”
services:
db:
image: postgres:latest
volumes:
– \”/localhost/postgres.sock:/var/run/postgres/postgres.sock\”
– \”/localhost/data:/var/lib/postgresql/data\”
#以上关于[docker]Docker Compose的相关内容来源网络仅供参考,相关信息请以官方公告为准!
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92212.html