当前位置:   article > 正文

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

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
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/74172
推荐阅读
相关标签
  

闽ICP备14008679号