command

本篇摘要

详细解说核心概念以及用法, 包含服务或者项目定义, 还有yml文件参数,像image等等, 以及常用命令, 例如up、down、run这些, 借助图文来演示环境搭建以及配置技巧, 帮助迅速掌握多容器应用编排。

一. (容器编排) 概念介绍

要是官方所拥有的开源项目, 借助编写进而形成, 用来界定并且编排也就是管理多个容器这件事, 最终达成运行繁杂应用这项任务。

关键概念:

它借助一个起名为 -.yml 的配置文件用以定义项目以及内里的全部服务, 其默认的管理对象是整个项目, 可便捷地针对项目内所有容器的生命周期, 像启动、停止、重建等予以统一管理, 还能够轻松地定义与管理由多个相互存在依赖关系的服务, 诸如 Web 应用、数据库、缓存等共同构成的应用。

为啥会有需求, 是针对功能, 是为了使用场景, 二是关于文件即-.yml, 且要进行解析。

关于不同参数选项用法可以查阅对应文档:

点我查看对应

yml文件基本使用格式:

顶级资源的定义是: 除了服务之外, 还能够在顶层去定义, 以及等独立资源, 以供各服务去使用。服务发现方面: 服务名称()能够作为容器间网络通信的内部 DNS 名称直接予以使用。

注意:

被设定为以yml所处的目录作为项目的目录, 接着呢, 与之对应的yml的缩进呈现的是空格的格式而非Tab, 缩进体现着层级的关系, 一定要采用空格(一般是2个空格)而且要做到严格地对齐。

1·image选项

使用方法:

仅镜像名: 采用官方镜像仓库当中的镜像名称, 就像 image: redis 这样的。镜像名加标签: 于名称的后面来指定版本标签, 例如 image: redis:5 这般情况。镜像摘要: 借助唯一的哈希值()去精确锁定镜像版本, 好比 image: redis@:0ed5... 这样。仓库路径: 明确镜像在仓库里的命名空间路径, 像 image: /redis 这种。完整仓库地址: 涵盖注册服务器地址的完整路径, 比如 image: .io//redis 这样子。私有仓库镜像, 要运用私有仓库地址以及端口去拉取镜像, 比如说像这样, image 这个镜像, 它对应的是.:5000/redis。

下面演示下:

首先创建对应项目目录:

2·选项

用来达到覆盖这个目的, 针对容器镜像里所设定的那个默认启动命令;处于文件或者那种状况之中运用指定那条指令之时, 进而能够去定义全新的启动命令。

两种写法:

应用场景呈现为, 常常出现在有着需要自行定义服务启动参数的状况之中, 举例来说, 像是为 Web服务器去指定运行时的端口, 又或者是为应用传递特异性的环境变量等情形。

演示下:

3.选项

覆盖容器镜像内默认启动入口点, 即主命令, 所使用的是指令。

使用格式:

存在适合于那种需要对容器初始化流程进行自定义, 或者有着复杂命令参数的场景, 比如说在设置特定扩展, 配置运行参数之后, 才去启动主程序的情况中适用。

演示下:

注意:

若属于后台进程, 便会默认其启动完毕且已执行完毕, 随即让其进入相应状态, 然而要是为前台进程, 那就相当于占用控制台, 始终在前台运行, 也就不会认定容器主进程已执行完毕, 故而不会让它直接退出;所以当中的nginx默认启动时属于前台进程, 不会直接终止。

4.选项

用来在配置里给服务设定环境变量, 它支持运用映射以及数组这两种语法格式去定义变量, 要是值属于布尔类型, 像 true 或者 false 这样, 那就得用引号把它括起来, 以此避免 YAML 解析器把它转变成 True 或者 False。

格式:

以缩进的键值对形式来使用, 比如说: 数组语法示例方面, 采用短横线列表形式, 变量借助等号来赋值, 就像这样:

演示下:

works选项

为容器设立分组, 对和谁通信进行配置, 将容器通信权限予以隔离, 达成分组管控的目的。

用法 (在 -.yml 里):

yaml 复制代码
services:
  web:                # 服务1
    image: nginx
    networks:
      - frontend       # 加入前端网络组
      - backend        # 同时加入后端网络组
  db:                  # 服务2
    image: mysql
    networks:
      - backend        # 仅加入后端网络组
networks:
  frontend:            # 网络组1(前端专用)
    driver: bridge     # 使用桥接模式(默认)
  backend:             # 网络组2(后端专用)
    driver: bridge

演示下:

6.选项

将电脑之中那些文件夹, 或者是诸多文件, 都映射于容器里边, 以此来能够达成数据的同步, 以及实现持久化效果。

简单写法

yaml 复制代码
volumes:
  - "电脑路径:容器路径"  # 冒号左边是电脑上的位置,右边是容器里的位置

复杂写法

yaml 复制代码
    volumes:
      - type: volume      # 类型:volume (docker管理的卷) | bind (你电脑的路径)
        source: 来源名     # 卷名 或 电脑上的具体路径
        target: 容器路径   # 容器里出现的路径
volumes: # 表明主机的目录位置(比如命名卷)
  name:

核心就一点:电脑(源):容器(目标)

演示下:

7.ports选项

  1. 精细控制:
yaml 复制代码
ports:
  - target: 80                # 容器内端口
    host_ip: 127.0.0.1        # 宿主机绑定IP(默认所有IP)
    published: 8080           # 宿主机映射端口
    protocol: tcp             # 协议类型(tcp/udp)
    mode: host                # 模式(host/ingress)

2.短语法格式:

yaml 复制代码
ports:
  - "8000:8000"               # 主机端口:容器端口
  - "3000"                    # 随机主机端口→容器3000端口
  - "127.0.0.1:5000:5000"     # 指定IP映射
  - "6060:6060/udp"           # UDP协议映射
  - "9090-9091:8080-8081"     # 端口段批量映射

演示下:

8.选项

用以声明容器内部进行监听的端口, 只准许处于同一网络之下的其他容器去访问, 并不会映射至宿主机, 在服务配置的情形下以列表的形式去声明内部端口号, 此端口号支持字符串或者数字格式。

用法:

yaml 复制代码
services:
  app:
    image: your-app
    expose:
      - "3000"    # 暴露3000端口(推荐字符串格式)
      - 8000      # 暴露8000端口(数字格式也可)

被暴露的端口, 仅仅能够被处于同一网络范围之内的其他服务去进行访问, 外部的主机以及宿主机都没办法直接去访问该端口;这样的情况啊, 一般被应用于微服务之间的内部通信场景当中, 就好比后端服务把API端口给暴露出来, 从而供前端服务在其内部进行调用。

演示下:

9.build 选项

用于指定为构建镜像上下文路径。

yaml 复制代码
services:
  服务名:
    build:
      context: .            # 必填:Dockerfile所在目录(`.`表示当前目录)
      dockerfile: Dockerfile # 可选:自定义Dockerfile文件名
      args:                 # 可选:构建时传递变量
        KEY: value

使用如:

yaml 复制代码
services:
  webapp:
    build: .               # 最短写法:直接指定上下文目录
  api:
    build:
      context: ./backend   # 指定子目录
      dockerfile: dev.Dockerfile  # 使用非标准文件名
      args:
        NODE_ENV: production

这里用法后面的会用到。

  1. 选项

指令被用来定义服务之间的启动依赖顺序, 为了能够让依赖控制变得更加精确, 能够配合健康检查, 确保不但依赖服务已经启动, 并且其内部应用已经准备好就绪了。

  1. 基础依赖(仅控制启动顺序)
yaml 复制代码
services:
  web:
    depends_on:
      - db     # 先启动db,再启动web
      - redis  # 先启动redis,再启动web
  1. 高级依赖(等待服务就绪)

凭借 : 明确规定一定要等待依赖的服务经由健康检查合格之后, 方可起始当前的服务。这必然得伴随着 配置一同运用。

yaml 复制代码
services:
  web:
    depends_on:
      db:
        condition: service_healthy  # 必须等待db服务健康
  db:
    image: mysql
    healthcheck:                    # 定义健康检查
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] # 检查命令
      interval: 10s                # 每10秒检查一次
      timeout: 5s                  # 检查超时时间
      retries: 10                  # 失败重试次数
  1. 健康检查 () 参数说明

演示下:

  1. 单一文件格式所采用的方式为, 借助关键字直接去指定一个环境变量文件的路径, 举例来说就是像 : .env 这样。列表格式的做法是, 运用列表形式去指定多个环境变量文件, 依照顺序进行加载, 比如 - ./.env。路径类型涵盖了, 支持相对路径, 像 ./.env 这样 , 以及绝对路径, 例如 /opt/.env。文件所起到的作用是, 把指定文件当中的环境变量成批地注入到容器里, 以此来防止在配置文件里进行硬编码。

演示下:

三. 命令 命令清单 命令功能备注

build

构建服务

规范的格式来显示服务配置

cp

在本地系统和服务容器直接拷贝文件

创建服务的容器

down

停止所有容器,并删除容器

从服务器获取实时事件

exec

在容器中执行命令

列出所有容器使用的镜像

kill

强制停止服务的容器

logs

显示日志

ls

显示所有项目

pause

暂停服务

port

列出所有的端口映射

该命令可以列出项目中目前的所有容器

pull

拉取服务镜像

push

推送服务镜像

重启或者重启某个服务

rm

删除服务停止的容器

run

在指定服务容器上执行相关的命令

start

启动当前停止的某个容器

stop

停止当前运行的某个容器

top

显示运行的进程

恢复服务

up

up命令会对一个与服务相关的容器进行构建, (重新)创建, 启动以及链接操作。倘若容器已然存在, 在默认情形下, 它将会被停止, 并且尝试重新创建它们, 同时会运用之前挂载的卷。-no-参数能够使容器不被停止或者重新创建, -d则指明是在后台运行。

查看版本

相关推荐
TP微客2 天前
Anydoc一款很快速且好用的文件转换markdown工具
环境搭建·anydoc
寺中人3 天前
MySQL 8.0 Windows 完整安装教程:环境配置、密码重置与常见报错排查
数据库·windows·mysql·环境搭建·mysql 安装
梁辰兴4 天前
软件工程:软件测试的基本步骤
软件测试·软件工程·环境搭建·测试设计·测试计划·梁辰兴·测试执行
Albart57525 天前
Docker Desktop最新版安装踩坑全记录(Windows_Mac_Linux)【2026 4.74.0 终版】
linux·windows·macos·docker·环境搭建·踩坑记录
BIBI20491 个月前
Windows 下 Maven 安装与 VSCode 配置
java·windows·vscode·maven·环境搭建·安装教程
特立独行的猫a1 个月前
Windows安装Rust环境 Clang替代GCC MinGW环境LLVM工具链(详细教程)
开发语言·windows·rust·mingw·环境搭建·llvm
周航宇JoeZhou1 个月前
JP3-2-1-MyItem项目简介
java·ai·springboot·环境搭建·项目·管理·springai
至乐活着3 个月前
Docker Compose多服务编排实战:从零搭建Node.js+MySQL+Redis全栈应用
docker·微服务·devops·容器编排·compose
2601_950526433 个月前
第1节:初识C语言
开发工具·环境搭建·初识c语言·c语言特点·c语言应用