docker-compose记录

2022-07-11  本文已影响0人  leon0514

一、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]

上一篇 下一篇

猜你喜欢

热点阅读