美文网首页
docker-compose记录

docker-compose记录

作者: leon_tly | 来源:发表于2022-07-11 17:17 被阅读0次

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

    相关文章

      网友评论

          本文标题:docker-compose记录

          本文链接:https://www.haomeiwen.com/subject/ivvnbrtx.html