docker-compose记录
一、docker compose
运行和定义多容器的docker工具,借助它可以使用yaml配置程序和服务一条命令启动所有服务
1. 安装docker-compose
在Ubuntu中安装docker-compose
sudo apt install docker-compose
2. 模板文件
build
指定 Dockerfile 所在文件夹的路径(可以是绝对路径,或者相对 docker-compose.yml 文件的路径)。 Compose 将会利用它自动构建这个镜像,然后使用这个镜像
version: "3"
services:
webapp:
build: ./dir
你也可以使用 context 指令指定 Dockerfile 所在文件夹的路径。
使用 dockerfile 指令指定 Dockerfile 文件名。
使用 arg 指令指定构建镜像时的变量。
version: '3'
services:
webapp:
build:
context: ./dir
dockerfile: Dockerfile-alternate
args:
buildno: 1
使用 cache_from
指定构建镜像的缓存
build:
context: .
cache_from:
- alpine:latest
- corp/web_app:3.14
command
覆盖容器启动后默认执行的命令。
command: echo "hello world"
depends_on
解决容器的依赖,启动先后问题。以下例子会先启动 redis db 再启动 web
version: '3'
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
db:
image: postgres
注意: web服务不会等待 redis db「完全启动」之后才启动。
environment
设置环境变量。可以使用数组或者字典两种格式
只给定名称的变量会自动获取运行 Compose 主机上对应变量的值,可以用来防止泄露不必要的数据。
environment:
RACK_ENV: development
SESSION_SECRET:
environment:
- RACK_ENV=development
- SESSION_SECRET
ports
暴漏端口信息
使用宿主端口:容器端口 (HOST:CONTAINER)
格式,或者仅仅指定容器的端口(宿主将会随机选择端口)都可以。
ports:
- "3000"
- "8000:8000"
- "49100:22"
- "127.0.0.1:8001:8001"
注意:当使用 HOST:CONTAINER 格式来映射端口时,如果你使用的容器端口小于 60 并且没放到引号里,可能会得到错误结果,因为 YAML 会自动解析 xx:yy 这种数字格式为 60 进制。为避免出现这种问题,建议数字串都采用引号包括起来的字符串格式。
volumes
数据卷所挂载路径设置。可以设置为宿主机路径(HOST:CONTAINER)或者数据卷名称(VOLUME:CONTAINER),并且可以设置访问模式 (HOST:CONTAINER:ro)。
该指令中路径支持相对路径。
volumes:
- /var/lib/mysql
- cache/:/tmp/cache
- ~/configs:/etc/configs/:ro
如果路径为数据卷名称,必须在文件中配置数据卷。
version: "3"
services:
my_src:
image: mysql:8.0
volumes:
- mysql_data:/var/lib/mysql
volumes:
mysql_data:
networks
配置容器连接的网络
version: "3"
services:
some-service:
networks:
- some-network
- other-network
networks:
some-network:
other-network:
设置网络
networks:
default:
aliases:
- mysql_server
在同一个网络下的容器可以使用aliases设置的名字当作ip进行该容器的访问
详细可见(人脸识别docker-compose例子 - 简书 (jianshu.com)
)
设置gpu
deploy:
resources:
reservations:
devices:
- driver: nvidia
# device_ids: ["0", "3"]
capabilities: [gpu]