• docker-compose模板文件、命令的使用


    docker-compose官网

    一、docker-compose的命令

    在这里插入图片描述

    1、up(启动)

    格式为 docker-compose up [options] [SERVICE…]

    • 该命令十分强大,它将尝试自动完成包括构建镜像,(重新)创建服务,启动服务,并关联服务相关容器的一系列操作。
    • 链接的服务都将会被自动启动,除非已经处于运行状态。
    • 可以说,大部分时候都可以直接通过该命令来启动一个项目。
    • 默认情况,docker-compose up 启动的容器都在前台,控制台将会同时打印所有容器的输出信息,可以很方便进行调试。
    • 当通过 Ctrl-C 停止命令时,所有容器将会停止。
    • 如果使用 docker-compose up -d,将会在后台启动并运行所有的容器。一般推荐生产环境下使用该选项。
    • 默认情况,如果服务容器已经存在,docker-compose up 将会尝试停止容器,然后重新创建(保持使用 volumes-from 挂载的卷),以保证新启动的服务匹配 docker-compose.yml 文件的最新内容
    docker-compose up -d # -d是后台启动
    
    • 1

    在这里插入图片描述

    2、down(停止)

    此命令将会停止 up 命令所启动的容器,并移除网络

    #必须执行该命令的相同路径下有docker-compose.yml文件
    docker-compose down
    
    • 1
    • 2

    在这里插入图片描述

    3、exec(进入容器)

    进入指定的容器。

    docker-compose exec rabbitmq bash
    
    • 1

    在这里插入图片描述

    4、ps(列出项目中目前的所有容器)

    格式为 docker-compose ps [options] [SERVICE…]。
    列出项目中目前的所有容器。
    选项:
    -q: 只打印容器的 ID 信息。

    docker-compose ps
    
    • 1

    在这里插入图片描述

    5、restart(重启项目中的服务)

    格式为 docker-compose restart [options] [SERVICE…]。
    选项:
    -t: --timeout TIMEOUT 指定重启前停止容器的超时(默认为 10 秒)。

    docker-compose restart 
    
    • 1

    在这里插入图片描述

    6、rm(删除所有(停止状态的)服务容器)

    格式为 docker-compose rm [options] [SERVICE…]。
    推荐先执行 docker-compose stop 命令来停止容器。
    选项:
    -f: --force 强制直接删除,包括非停止状态的容器。一般尽量不要使用该选项。
    -v: 删除容器所挂载的数据卷。

    docker-compose rm -f
    
    • 1

    在这里插入图片描述

    7、start(启动已经存在的服务容器)

    格式为 docker-compose start [SERVICE…]。

    docker-compose start 
    
    • 1

    在这里插入图片描述

    8、stop(停止已经处于运行状态的容器,但不删除它)

    格式为 docker-compose stop [options] [SERVICE…]。
    选项:
    -t: --timeout TIMEOUT 停止容器时候的超时(默认为 10 秒)。

    docker-compose stop -t1000
    
    • 1

    在这里插入图片描述

    9、top(查看各个服务容器内运行的进程)

    docker-compose top
    
    • 1

    在这里插入图片描述

    10、images(所有镜像)

    docker-compose images
    
    • 1

    在这里插入图片描述

    二、docker-compose模板文件

    官网详细模板文件介绍

    1、模板文件是使用 Compose 的核心,这里面大部分指令跟 docker run 相关参数的含义都是类似的。
    2、默认的模板文件名称为docker-compose.yml格式为yml格式
    3、每个指令都必须通过image指令指定镜像或者build(需要Dockerfile)指令来自动构建生成镜像

    1、build(指定镜像、并构建)

    • 指定 Dockerfile 所在文件夹的路径(可以是绝对路径,或者相对 docker-compose.yml 文件的路径)。 Compose 将会利用它自动构建这个镜像,然后使用这个镜像。
    version: "3.0"
    services:
      demo: #项目id
        build: #启动服务时,先将build中指定的dockerfile打包成镜像,再运行该镜像
          context: jenkins-demo #指定上下文目录dockerfile所在目录[相对、绝对路径都可以]
          dockerfile:  Dockerfile #文件名称
          args: #指定构建镜像时候的变量
            buildno: 1 
        container_name: jenkins-demo
        ports:
          - "8881:8881"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    2、command(覆盖容器启动后命令)

    • 覆盖容器启动后的默认执行命令
    version: "3.0"
    services:
      redis:
        container_name: redis
        image: redis:7.0.5-alpine
        ports:
          - "6379:6379"
        command: "redis-server --appendonly yes" #run镜像之后,appendonly覆盖容器内的默认命令
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    3、container_name(指定容器名称)

    • 指定容器名称。默认将会使用 项目名称_服务名称_序号 这样的格式。
    version: "3.0"
    services:
      redis:
        #container_name: redis
        container_name: docker-web-container
    
    • 1
    • 2
    • 3
    • 4
    • 5

    注意: 指定容器名称后,该服务将无法进行扩展(scale),因为 Docker 不允许多个容器具有相同的名称。

    4、depends_on(容器的依赖、启动先后的问题)

    • 解决容器的依赖、启动先后的问题。以下例子中会先启动 redis db 再启动 web
    version: '3'
    services:
      web:
        image:  ruoyi
        depends_on:
          - db
          - redis
      redis:
        image: redis
      db:
        image: postgres
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    注意:web 服务不会等待 redis db 「完全启动」之后才启动。

    5、env_file(文件中获取环境变量)

    • 从文件中获取环境变量,可以为单独的文件路径或列表
    version: "3.0"
    services:
      mysql:
        container_name: mysql8
        image: mysql:8.0.29
        ports:
          - "3306:3306"
        #- MYSQL_ROOT_PASSWORD=root #指定值
        env_file: #替换environment的配置[直接给该文件、不会泄露密码等信息]
          - mysql.env #此处为相对路径,也可以写绝对路径[里面的格式key=value,并且支持#的注释]
          - ./common.env
          - ./apps/web.env
          - /opt/secrets.env
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • mysql.env文件[支持#开头的注释行]
    #root的密码
    MYSQL_ROOT_PASSWORD=root
    
    • 1
    • 2

    6、environment(设置环境变量)

    • 设置环境变量。你可以使用数组或字典两种格式。
    version: "3.0"
    services:
      mysql:
        container_name: mysql8
        image: mysql:8.0.29
        ports:
          - "3306:3306"
        environment: #环境变量[此处写得太过敏感,给文件容易被别人知道]
          - MYSQL_ROOT_PASSWORD=root #指定值
          - MYSQL_ROOT_PASSWORD: password
          - TZ: Asia/Shanghai
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    如果变量名称或者值中用到 true|false,yes|no 等表达 布尔 含义的词汇,最好放到引号里,避免 YAML 自动解析某些内容为对应的布尔语义。这些特定词汇,包括

    y|Y|yes|Yes|YES|n|N|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF
    
    • 1

    7、healthcheck(检查容器是否健康运行)

    • 通过命令检查容器是否健康运行。
    version: "3.0"
    services:
      tomcat8082:
        container_name: tomcat02
        image: tomcat:8.0.15-jre7 #镜像版本
        ports:
          - "8082:8080"
        healthcheck:
          test: [ "CMD", "curl", "-f", "http://localhost" ]
          interval: 1m30s
          timeout: 10s
          retries: 3
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    8、image(指定镜像名称或镜像 ID)

    • 指定为镜像名称或镜像 ID。如果镜像在本地不存在,Compose 将会尝试拉取这个镜像。
    version: "3.0"
    services:
      tomcat8082:
        container_name: tomcat02
        image: ubuntu 
        #image: orchardup/postgresql
        #image: a4bc65fd
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    9、networks(配置容器连接的网络)

    • 配置容器连接的网络。
    version: "3.0"
    services:
      tomcat8082:
        container_name: tomcat02
        image: tomcat:8.0.15-jre7 #镜像版本
        ports:
          - "8082:8080"
        networks: #代表当前服务使用那个网络桥
          - hello
    networks: #定义服务使用到的网桥
      hello: #定义上面的服务用到的网桥名称, 默认创建的就是bridge
        external:
          true #使用外部指定网桥,注意,网桥必须存在[docker network create -d bridge hello]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    10、ports(暴露端口信息)

    • 暴露端口信息。使用宿主端口:容器端口 (HOST:CONTAINER) 格式,或者仅仅指定容器的端口(宿主将会随机选择端口)都可以。
    version: "3.0"
    services:
      tomcat8082:
        container_name: tomcat02
        image: tomcat:8.0.15-jre7 #镜像版本
        ports:
          - "8082:8080"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    注意:当使用 HOST:CONTAINER 格式来映射端口时,如果你使用的容器端口小于 60 并且没放到引号里,可能会得到错误结果,因为 YAML 会自动解析 xx:yy 这种数字格式为 60 进制。为避免出现这种问题,建议数字串都采用引号包括起来的字符串格式。

    11、sysctls(配置容器内核参数)

    • 配置容器内核参数
    version: "3.0"
    services:
      tomcat8080: #服务id
        container_name: tomcat01 #相当于run  --name
        image: tomcat:8.0.15-jre7 #镜像版本(没有的话会自动拉取) 相当于run image
        ports: #完成host与容器的端口映射 相当于run p
          - "8080:8080" #(防止出错,官方建议用""包起来)
        volumes: #完成宿主机与容器中目录数据卷的映射(可以挂在多个) 相当于run -v
          #- /usr/local/software/tomcat/webapps:/usr/local/tomcat/webapps #使用自定义路径映射
          - tomcatWebapps:/usr/local/tomcat/webapps
        networks: #代表当前服务使用那个网络桥 相当于run network
          - hello
        sysctls:
          net.core.somaxconn: 1024
          net.ipv4.tcp_syncookies: 0
        #sysctls:
          #- net.core.somaxconn=1024
          #- net.ipv4.tcp_syncookies=0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    12、ulimits(指定容器的 ulimits 限制值)

    • 指定容器的 ulimits 限制值。

    例如,指定最大进程数为 65535,指定文件句柄数为 20000(软限制,应用可以随时修改,不能超过硬限制) 和 40000(系统硬限制,只能 root 用户提高)。

    version: "3.0"
    services:
      tomcat8080: #服务id
        container_name: tomcat01 #相当于run  --name
        image: tomcat:8.0.15-jre7 #镜像版本(没有的话会自动拉取) 相当于run image
        ports: #完成host与容器的端口映射 相当于run p
          - "8080:8080" #(防止出错,官方建议用""包起来)
        ulimits:
          nproc: 65535
          nofile:
            soft: 20000
            hard: 40000
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    13、volumes(数据卷所挂载路径设置)

    • 数据卷所挂载路径设置。可以设置为宿主机路径(HOST:CONTAINER)或者数据卷名称(VOLUME:CONTAINER),并且可以设置访问模式 (HOST:CONTAINER:ro)。
    version: "3.0"
    services:
      tomcat8080: #服务id
        container_name: tomcat01 #相当于run  --name
        image: tomcat:8.0.15-jre7 #镜像版本(没有的话会自动拉取) 相当于run image
        ports: #完成host与容器的端口映射 相当于run p
          - "8080:8080" #(防止出错,官方建议用""包起来)
        volumes: #完成宿主机与容器中目录数据卷的映射(可以挂在多个) 相当于run -v
          #- /usr/local/software/tomcat/webapps:/usr/local/tomcat/webapps #使用自定义路径映射
          - tomcatWebapps:/usr/local/tomcat/webapps #使用声明数据卷的方式
    #声明数据卷
    volumes: #声明上面服务所使用的自动的卷名
      tomcatWebapps: #声明指定的卷名 compose会自动创建改卷明,但是会在之前加入项目名
        external: #使用自定义的卷名
          false #true确定使用自定义卷名 注意,一旦使用外部自定义卷名,启动服务之前必须手动创建      
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
  • 相关阅读:
    高衍射效率的偏振无关透射光栅的分析与设计
    Linux中间件之redis的淘汰策略和持久化
    【Linux】git
    Gradle系列——常用指令,修改gradle源,Wrapper包装器(源于文档7.5版本,SpringBoot使用)day1-2
    前端精度问题 (id 返回的和传给后端的不一致问题)
    mehtods、computed、watch有什么区别
    SQL优化
    前大厂员工谈中美企业区别,中企不用单元测试,仅靠QA检查代码?
    python实现adb辅助点击屏幕工具
    淘宝代购系统需要电商API接口
  • 原文地址:https://blog.csdn.net/www1056481167/article/details/127915269