美文网首页
docker-compose 的使用及参数

docker-compose 的使用及参数

作者: 谁有羊毛 | 来源:发表于2020-04-14 10:22 被阅读0次

    一、docker-compose 介绍

    1. docker-compose是一个容器编排工具,单机版

    2. 有时候有一组服务他们有一些依赖关系,或者需要通信,需要同时部署(eg:web服务器与数据库),此时docker-compose可以简单的实现

    3. 且docker-compose会创建一个网络,从而在一个services中的容器,他们是在同一个子网的

    4. 指定一个yml文件作为docker-compose的配置文件来启动

     docker-compose -f docker-compose-dev.yml up
    

    二、docker-compose 使用

    1. 模板文件 docker-compose.yml
    version: "3"
    # 服务 里面包含了多个容器
    services:
    # 单个service(容器的配置)
      webapp:
    # 镜像名
        image: imageName
        # 共享内存的大小
        shm_size: 1gb
        #卷挂载
        volumes:
          - /var/www/project:/cached
        # 最大文件限制数,主要是程序崩溃后会生成可调试文件core.2131 会占用内存,不启用即可
        ulimits:
          core: 0
          nofile:
            soft: 1024
            hard: 1024
        # 环境变量文件
        env_file:
          - .env
        # 环境变量设置
        environment:
          RACK_ENV: development
          SHOW: 'true'
    
    1. 指定yml配置文件名
    docker-compose -f docker-compose-dev.yml up
    

    二、 docker-compose 参数详解:

    1. 所使用的镜像名
    image: image_name
    
    1. 文件挂载文件、目录映射 —— 注意:linux下vim修改文件wq后是一个新文件,也就是使用文件挂载,vim修改文件无法更新docker容器内的文件,所以这种(平时测试代码)可以选择目录挂载
    volumes:
      - /var/www/project:/cached # 目录挂载
      - /var/www/u2.txt:/home/u2.txt # 文件挂载
    

    挂载点 :

    1. 如果:挂载了父目录 /app 。里面有个子目录 /app/caches,然后又对子目录/app/caches挂载映射了其他目录,那么原来父目录的/app/caches会被覆盖为新的挂载的目录
    2. 比如先挂载了一个目录/root/atom-node1(atom-node1下面有个caches子目录)作为/app目录
    3. 然后又挂载了/app/caches 目录。这时候/tmp就覆盖了原来的/root/atom-node1/caches目录了
    # 比如先挂载了一个目录/root/atom-node1(atom-node1下面有个caches子目录)作为/app目录,
    # 然后又挂载了/app/caches 目录。这时候/tmp就覆盖了原来的/root/atom-node1/caches目录了
    docker run -v /root/atom-node1:/app -it  -v /tmp:/app/caches  oc-runner bash
    

    1. 端口映射,把docker内部的端口暴露出来
    ports: 
      - 8088:8088
    
    1. 重启操作
    restart: "no"
    restart: always
    restart: on-failure
    restart: unless-stopped
    
    1. 容器名称
    container_name: "test2"
    
    1. 环境变量文件
    env_file:
      - .env
    
    • .env的内容可以如下, 格式是name=value的形式,#表示注释
    # Set Rails/Rack environment
    RACK_ENV=development
    
    1. 环境变量 —— 有时候需要自定义一些环境变量
    environment:
      RACK_ENV: development
      SHOW: 'true'
      SESSION_SECRET:
    
    1. external_links,链接其他的容器服务 (CONTAINER:ALIAS).
    external_links:
      - redis_1
      - project_db_1:mysql
      - project_db_1:postgresql
    
    1. ulimit 限制,限制生成可调试文件
     # 最大文件限制数,主要是程序崩溃后会生成可调试文件core.2131 会占用内存,不启用即可
      ulimits:
          core: 0
          nofile:
            soft: 1024
            hard: 1024
    
    1. shm_size 共享内存,这个会限制某些应用(eg. 谷歌浏览器)的使用内存,从而可能导致崩溃
    shm_size: 1gb
    
    1. command 启动后的命令,这个会直接覆盖掉默认的 dockerfile定义的command
    command: bundle exec thin -p 3000
    
    1. depends_on 由于启动顺序是随机的,所以如果有依赖关系的话,需要使用这个
    version: "3.7"
    services:
      web:
        build: .
        depends_on:
          - db
          - redis
      redis:
        image: redis
      db:
        image: postgres
    
    1. entrypoint 容器启动的入口点:docker-compose这里定义的话。会覆盖原本docker的image的默认的entrypoint
    # 覆盖Dockerfile文件里面的:ENTRYPOINT command param1 param2
    entrypoint : /code/entrypoint.sh
    
    1. command 容器的启动命令:docker-compose 这里定义的话,会覆盖docker image里面的CMD 命令
    # 覆盖Dockerfile里面的:CMD ./entrypoint.py start
    command: bundle exec thin -p 3000
    
    • 执行多行命令的方式:使用 bash -c "command1 && command2"
    command: bash -c  "ls && pwd && ./start.sh"
    

    三、docker-compose 坑 之 不支持 shell command 扩展

    1. 本来想在docker-compose.yml中 使用shell动态来映射目录【实际并不支持】:
    volumes: 
      - /var/lib/docker/containers/$(docker inspect --format="{{.Id}}" atom-node1_oc-runner_1):/var/log/atom-node1
    
    1. issue:https://github.com/docker/compose/issues/4081

    1. docker-compose 参数 官方文档

    相关文章

      网友评论

          本文标题:docker-compose 的使用及参数

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