云服务器内容精选
-
命令结构 health get job ID [flags] 表1 参数说明 参数 简写 是否必选 说明 ID 无 否 不选此参数时,列出当前所在项目的所有作业信息。 指定job-id时,列出具体作业的信息。可以同时指定多个job-id。 不带--detail参数,以yaml格式展示作业基本信息。 带--detail参数,以json格式展示作业基本信息。 --detail -d 否 配合ID使用,返回作业的详细信息。 --sample -s 否 获取作业模板,模板为yaml格式。 --limit -l 否 代表当次请求获取的最大查询条数(默认为10)。 --offset -o 否 偏移量,从第几条数据开始查询,默认为0。 --event -e 否 获取作业事件或者作业某一task事件,单独使用表示获取作业事件;与--task一起使用表示获取某一个task事件,并同时输出task实例列表。 --log -g 否 本地存放task日志的路径,必须与--task一起使用以获取作业某一task的日志。 --task -a 否 task名称。如果是并发的task,那么默认获取索引号为0的task实例,如果要查看别的实例,格式: --task task名称;实例索引,如--task task-1;1。 --finish-from-time -x 否 查询任务完成起始时间。例如,2006-01-02 15:04:05。 --finish-to-time -y 否 查询任务完成结束时间。例如,2006-01-02 15:04:05。 --create-from-time -c 否 询任务创建起始时间,例子:--create-from-time="2006-01-02 15:04:05"。 --create-to-time -m 否 询任务创建结束时间,例子:--create-to-time="2006-01-02 15:04:05"。 --labels -k 否 作业标签列表。以","分隔,如:"a,b"。 --status -q 否 作业状态(用于获取作业列表),取值:Succeeded、Running、Pending、Failed、Cancelling、Cancelled、Unknown。 --workflow-name -t 否 流程名。 --user-name -u 否 用户名。 --job-name -j 否 任务名。
-
命令示例 本节以Windows为例介绍eihealth-toolkit的使用过程,Linux和macOS环境使用方法基本相同,可参考。 使用health get job -s命令获取模板,详细的模板介绍和使用请参见获取作业模板。 获取作业详情,以模板方式展示。 health get job 000c6057-cc6c-11ed-bbec-fa163ef30f89 job: id: 000c6057-cc6c-11ed-bbec-fa163ef30f89 name: job-7402 description: "" priority: 0 timeout: 1440 output_dir: /job-7402-de91a3e0-076c-4327-a41c-8e88c7aec6ae workflow_id: f1af14bb-cc69-11ed-bbec-fa163ef30f89 io_acc_id: "" node_labels: [] tasks: - task_name: task-1-test-echo inputs: [] resources: cpu: 0.1C memory: 0.1G gpu: "0" tool_type: workflow tool_id: f1af14bb-cc69-11ed-bbec-fa163ef30f89 labels: [] 获取作业详情,以json方式展示。 health get job f17a3542-3f7c-11eb-868a-fa163e3ddba1 --detail { "jobs": [{ "id": "2", "name": "zx-1030-mkdir", "description": "测试文件创建", "priority": 0, "timeout": 1440, "output_dir": "", "status": "SUCCEEDED", "create_time": "2021-01-20T03:38:14Z", "finish_time": "2021-01-20T03:43:23Z", "tool_info": { "tool_id": "", "tool_name": "", "tool_version": "", "tool_type": "" }, "tasks": [{ "task_name": "task0", "display_name": "", "output_dir": "", "whole_output_dir": "", "resources": { "cpu": "0.1C", "memory": "0.1G", "gpu_type": "", "gpu": "0" }, "inputs": [{ "name": "in-dir", "values": [ "ei_eihealth_x00356764_02:/zx-1030/" ] }, { "name": "in-str", "values": [ "mkdir1030" ] } ], "app_info": { "app_id": "2", "app_name": "zx-1030-mkdir", "app_version": "1.0.0", "app_src_project_name": "", "app_labels": [], "app_summary": "", "app_description": "", "app_image": "ei_eihealth_x00356764_02/modelarts-base-cpu-py3:custom-2.0.2", "app_commands": [ "mkdir ${in-dir}${in-str}" ], "app_input_parameters": [{ "name": "in-dir", "pattern": "", "type": "DIRECTORY", "required": true, "description": "" }, { "name": "in-str", "pattern": "", "type": "STRING", "required": true, "description": "" } ], "app_output_parameters": [] } }], "task_runtime_info": [{ "task_name": "task0", "status": "SUCCEEDED", "create_time": "2021-01-20 11:38:22", "finish_time": "2021-01-20 11:43:22", "run_time": "5m0s" }], "dag": { "task0": {} }, "io_acc_expected_usage": 10, "io_acc_info": { "id": "35673038-d57b-4dab-942a-72cf3e11e7df", "type": "IO_PERFORMANCE_BANDW IDT H", "space": 500, "free_space": 500.0 } }], "count": 1 } 获取作业列表。 health get job #不带任何参数默认获取100条 job_id job_name tool_name tool_version tool_type status user_name create_time finish_time labels 4b682e15-ab92-11ee-a057-fa163ef319da cli-demo-job cp-test 2.0.0 workflow PENDING wwx-test-admin 2024-01-05 14:18:51 -- e7e55c6e-aaf6-11ee-a057-fa163ef319da cli-demo-job-import cli-demo-workflow 4.0.0 workflow FAILED wwx-test-admin 2024-01-04 19:46:32 2024-01-04 19:47:50 aee9e91a-aaf6-11ee-a057-fa163ef319da job-6685 cli-demo-workflow 4.0.0 workflow FAILED wwx-test-admin 2024-01-04 19:44:56 2024-01-04 19:45:50 58a8f13b-aaf3-11ee-a057-fa163ef319da job cp-test 2.0.0 workflow FAILED wwx-test-admin 2024-01-04 19:21:03 2024-01-04 19:23:54 35ff73b3-aaf3-11ee-a057-fa163ef319da job cp-test 2.0.0 workflow SUCCEEDED wwx-test-admin 2024-01-04 19:20:05 2024-01-04 19:24:52 24b72eee-aaf3-11ee-a057-fa163ef319da job cp-test 2.0.0 workflow SUCCEEDED wwx-test-admin 2024-01-04 19:19:36 2024-01-04 19:25:10 4ccef1fb-aaf2-11ee-a057-fa163ef319da job cp-test 2.0.0 workflow SUCCEEDED wwx-test-admin 2024-01-04 19:13:34 2024-01-04 19:17:34 health get job -j cli-demo-job job_id job_name tool_name tool_version tool_type status user_name create_time finish_time labels 70f1baa8-ab96-11ee-a057-fa163ef319da cli-demo-job cp-test 2.0.0 workflow SUCCEEDED wwx-test-admin 2024-01-05 14:48:32 2024-01-05 14:55:13 6c6098f0-ab96-11ee-a057-fa163ef319da cli-demo-job cp-test 2.0.0 workflow SUCCEEDED wwx-test-admin 2024-01-05 14:48:24 2024-01-05 14:54:25 health get job -l 3 同 health get job -l 3 -o 0 #列出当前project的job的基本信息 #表示取3条数据,也就是取1-3 条数据 health get job -o 10 同 health get job -l 100 -o 10 #列出当前project的job的基本信息 #表示取100条数据,也就是取11-110 100 条数据 health get job -l 10 -o 3 #列出当前project的job的基本信息 #表示跳过3条数据,从第4条数据开始取,取10条数据,也就是取4-13 10条数据 获取作业事件。 health get job 550e8400-e29b-41d4-a716-446655440000 --event ------------------------------------------------------------------------------------------------------------------------ 成功关联执行器 2024-01-05 14:18:51 ------------------------------------------------------------------------------------------------------------------------ 执行 create, 共计 1 个子任务 2024-01-05 14:18:51 ------------------------------------------------------------------------------------------------------------------------ 执行 create, 共计 1 个子任务 2024-01-05 14:18:51 ------------------------------------------------------------------------------------------------------------------------ 创建k8s Job对象 task-3-two-cp-0-bd5e1f7dac10005f 成功. 2024-01-05 14:18:51 ------------------------------------------------------------------------------------------------------------------------ 等待任务 task-3-two-cp-0-bd5e1f7dac10005f 执行完成 2024-01-05 14:18:56 ------------------------------------------------------------------------------------------------------------------------ 元素(task-3-two-cp-0)第1次重试执行(create),当前异常:Failed to wait the Job(task-3-two-cp-0-bd5e1f7dac10005f) has desiredReplicas: the pod list of job:task-3-two-cp-0-bd5e1f7dac10005f is empty . 2024-01-05 14:18:51 ------------------------------------------------------------------------------------------------------------------------ 创建k8s Job对象 task-2-cp-dir-0-bd5e1f7dac10005f 成功. 2024-01-05 14:18:56 ------------------------------------------------------------------------------------------------------------------------ 获取作业某一task事件。 health get job 550e8400-e29b-41d4-a716-446655440000 --event --task task-lmx-job-1 Task event list: Status Times Type Details First Report Time Last Report Time SuccessfulCreate 1 Normal Created pod: task-1-rename-0-1b840133ac100049-hkppv 2022-05-24 18:04:55 2022-05-24 18:04:55 JobIsComplete 1 Normal Pod exits with success, the job is complete 2022-05-24 18:07:09 2022-05-24 18:07:09 Task instances list: Name Status PodIP Node RestartCount Request/Limit(CPU) Request/Limit(Memory) CreateTime task-1-rename-0-1b840133ac100049-hkppv Succeeded 172.16.1.20 192.168.125.40 0 / / 2022-05-24T10:04:55Z 获取并发task的实例事件。 health get job c5b3d272-f398-11ec-845a-fa163ef3fac0 --task task-1-test-bingfasmial;1 --event Task event list: Status Times Type Details First Report Time Last Report Time SuccessfulCreate 1 Normal Created pod: task-1-test-bingfasmial-1-59620029ac100038-jkdpt 2022-06-24 16:37:20 2022-06-24 16:37:20 JobIsComplete 1 Normal Pod exits with success, the job is complete 2022-06-24 16:37:23 2022-06-24 16:37:23 Task instances list: Name PodIP Node RestartCount Request/Limit(CPU) Request/Limit(Memory) CreateTime task-1-test-bingfasmial-1-59620029ac100038-jkdpt 172.16.3.37 192.168.54.255 0 1/1 1G/1G 2022-06-24 16:37:20 获取作业某一task日志。 health get job 550e8400-e29b-41d4-a716-446655440000 --log ./test/demo.log --task task-xxx-job-1 download the log of task task-lmx-job-1 successfully! 获取作业列表。 health get job --status Failed --user-name ei_eihealth --create-from-time "2022-12-15 00:40:11" --create-to-time "2022-12-17 00:40:11" --finish-from-time "2022-12-14 17:05:09" --finish-to-time "2022-12-19 23:04:07" --labels "label1,lab_el-A" --job-name h-err-1 --workflow-name herr --limit 1 --offset 1 job_id job_name tool_name tool_version tool_type status user_name create_time finish_time labels 8a6078d9-c307-11ed-a824-fa163e504fdd job-4127-01 new-01 wewe workflow FAILED ei_eihealth_h00541446_01 2023-03-15 16:01:07 2023-03-15 16:02:51 label1,lab_el-A
-
命令示例 本节以Windows为例介绍eihealth-toolkit的使用过程,Linux和macOS环境使用方法基本相同,可参考。 使用本地已填写好的流程模板workflow.yaml创建流程。 health create workflow D:\workflow.yaml 或 health create workflow -y D:\workflow.yaml # 返回结果如下 create workflow succeed! workflow id : 65b7a404-3f4f-11eb-868a-fa163e3ddba1
-
设置项目存储容量 平台支持项目管理员以上角色,配置项目的最大存储量。 单击项目名称,在项目页面选择“设置”。 在项目详情页面,单击“已用存储量”后面的。 图6 设置存储容量 开启容量限制开关后,设置最大存储量。 图7 容量限制 设置成功后,单击“确定”。 项目存储量15分钟刷新一次,如果设置了项目最大存储量,项目数据达到最大存储量后,数据上传、复制、导入、执行的作业、notebook的使用会失败。
-
镜像用途 用于创建分析应用 应用是生物信息学软件的镜像封装。例如,您可将Cell Ranger软件封装为镜像,并上传至 EIHealth 平台。通过应用把镜像引入,利用应用搭建分析流程,执行分析作业。 用于创建Notebook Notebook是一个交互式应用程序,用于代码的编写、调试、运行。创建Notebook时,您可以选择系统镜像。当系统镜像无法满足您的开发需求时,您可以基于EIHealth提供的基础镜像包制作自定义镜像,并上传至平台。您可以在EIHealth平台“开发环境”中使用此自定义镜像创建Notebook。 创建Notebook时,如果使用自定义镜像。该自定义镜像,需要基于EIHealth平台提供的基础镜像进行制作。
-
导入流程 导入流程是将隶属于其他项目中流程导入至本项目中,流程所依托的应用和镜像会同步导入。 使用“导入流程”功能,用户需是其他项目中的成员,且为其他项目的“所有者”或“管理员”。 单击“导入流程”,进入导入流程页面。 图1 导入流程 选择需要引用的项目以及项目中的流程,选择流程的版本。“导入流程名称”是选填项,可以使用原有名称,或自定义。 图2 导入流程 单击“确定”,导入流程。 父主题: 工具管理
-
流程设计器界面 流程设计器界面由工具栏、资源栏和画布三部分构成。 图1 流程设计器界面 表1 界面说明 区域 说明 工具栏 上方的工具栏显示设计器的快捷控制操作。 由设置、新建作业、保存、另存为、删除、自动保存构成。 资源栏 左侧的资源栏显示项目中可以使用的应用和流程。 画布 中间区域为搭建流程的操作界面。 可以将应用拖拽至画布中,并进行编排创建。 可以将流程放置到画布中进行编排修改。 可通过“概览”展示流程的结构图。 可通过界面右下角快速定位按钮使流程显示在画布中央。 可通过界面右下角规整排列按钮使流程连线排布整齐。
-
上传数据方式 在开始执行分析作业前,请先上传待分析的原始数据。不同的上传方法对数据大小要求不同,您可以参考表 上传数据方式选择相应的数据上传方式。 表1 上传数据方式 上传数据方式 说明 “数据”页面上传 通过“数据”页面上传数据,支持上传最大为1GB的单个文件。 数据上传方法请参见“数据”页面上传。 使用命令行工具上传 命令行工具(eihealth-toolkit)配套EIHealth平台,提供数据、应用、流程和作业资源的管理和使用,支持上传最大为48.8TB的单个文件。 数据上传方法请参见命令行工具概述。
-
新建应用 详细的创建应用过程、镜像填写方法、参数填写方法,请参考创建应用样例章节。 单击“新建应用”,进入新建应用页面。 图1 新建应用 填写应用的基本信息,包括“名称”、“版本”、“图标”、“标签”、“短描述”和“描述”。 图2 基本信息 选择镜像和镜像版本。 详细的镜像介绍和制作方法请参见镜像管理。 填写镜像启动命令。 镜像启动命令需要引用输入、输出参数中的变量,并以大括号扩起,以$符号进行引用。 镜像启动命令支持多行输入,每行最多256字符,最多支持300行。 例如,bamqc软件输入参数填写为genomedir、thread和input,输出参数为outputdir,则镜像启动命令如下所示。 bamqc -t ${thread} -g ${genomedir} --noextract -o ${outputdir} ${input} 图3 镜像信息 选择CPU、GPU类型和大小,选择内存大小,内存单位为GB。 CPU架构依赖于制作镜像过程中选择的系统类型,以及制作镜像时所需的生物信息学软件支持在X86还是ARM上运行。例如,GATK是基于X86指令集开发的生信软件,使用CentOS的X86系统创建GATK镜像,则在创建应用时选择“X86”。 CPU需求:请按实际需求填写,取值范围为“0.1-128”,单位C,支持一位小数,不填默认1C。 Memory需求:请按实际需求填写,取值范围为“0.1-3072”,单位GB,支持一位小数,不填默认1GB。 GPU类型:请按实际需求填写,取值范围为“无、GPU、D310、Snt9”,如果选择Snt9,GPU需求需要是0、1、2、4、8。 GPU需求:请按实际需求填写,只能输入0到16的正整数。 计算节点标签:请选择标签名称,不支持多选。应用将会调度到有相应节点标签的计算节点。计算节点标签设置方法请参见计算资源标签管理。 填写输入参数、输出参数。 参数填写时,输入参数及输出参数有字符串(String),文件(File),文件夹(Directory),枚举(Enum)四种类型。 图4 参数信息 对于输入参数,打开“并发”开关,在启动作业时,每个参数可以设置多个参数值,自动生成多个作业并发执行。并发执行的作业数为设置的参数值个数的乘积。 例如,存在输入参数a和输入参数b,在启动作业时,分别给参数a设置了2个参数值,给参数b设置了2个参数值。那么,系统将自动生成4个作业并发执行。 对于输出参数,如果镜像启动命令中指定了输出参数,则在设置输出参数时,需要勾选“必传”,并填写“默认值”。 如果输出参数为Directory、File类型,默认值必须以/开头,且不能以/结尾,开头的'/'代表本项目的桶路径。 如果输出参数为String,默认值最大长度不超过256,仅支持字母、数字、中划线、下划线、小数点和斜线。 如果输出参数为Enum类型,需填写有效值,并在有效值中选择默认值。 单击“立即创建”,创建应用。 父主题: 工具管理
-
分析作业管理简介 分析作业依托于流程运行,需要您先创建流程,再基于流程创建分析作业。 在“项目管理”页面“作业”页签中,以列表形式展示了项目中运行的分析作业和运行状态。您可以查看分析作业名称、标签、所使用的流程名称、版本、运行状态、创建者、创建时间、完成时间和总耗时。并可对作业执行重试、取消、删除、克隆、导出操作。对于列表中的作业,支持通过作业名称、流程名称、标签、创建者、状态、创建时间和完成时间进行快速搜索。 如果需要批量创建分析作业,您可以创建自动作业。 当作业执行超时,作业状态显示失败,task状态为运行中。后续task运行成功或失败,作业状态都显示失败。可参考作业投递后处于运行中,运行过程正常,但是最后超时失败进行处理。 如果性能加速节点不可用或作业配额不足,重试作业时,超过配额的作业会重试失败。 图1 分析作业 图2 作业搜索 父主题: 作业管理
-
编写文件 新建文件后,自动进入文件编写页面,您也可以单击文件名称进入。 图3 编写文件 表1 编写文件页面介绍 区域 区 域名 称 详细说明 1 文件名称 您可以在此区域填写自定义的文件名称,修改保存后,对应的File列表也将发生变化。 2 菜单栏 菜单栏中有File、Edit、View、Insert、Cell、Kernel、Help等丰富功能。详细说明建议参考Jupyter Notebook使用文档,下方工具栏提供了常用的功能,能够满足常见的Python运行文件编写。 3 工具栏 工具栏罗列了支持的常用快捷操作,从左到右分别为:保存文件、添加新Cell、剪切选中的Cell、复制选中的Cell、粘贴选中的Cell、将选中Cell上移、将选中Cell下移、运行选中的Cell、终止kernel、重启kernel、重启kernel并重新运行所有Cell。 Code下拉框中有四个选项: Code:写Python代码 MarkDown:写MarkDown代码,通常用于注释 Raw NBConvert:转换工具 Heading:快捷添加MarkDown标题 4 代码Cell 代码单元格。每一个Cell有两种模式:命令模式和编辑模式。 最左侧为蓝色条时,是命令模式,绿色条表示编辑模式(此时Cell中有光标,可以进行代码编写)。在命令模式下,按下“Enter”键或者鼠标单击代码框可以进入编辑模式。在编辑模式下,按下“ESC”键或者鼠标单击代码框左侧区域即可进入命令模式。
-
步骤2:获取Notebook基础镜像 创建Notebook时所需的自定义镜像,依赖于 医疗智能体 平台自研的基础镜像,您需要基于获取的基础镜像制作自定义镜像。 先连接 容器镜像服务 ,参考步骤1.连接容器 镜像服务 操作,然后使用如下的镜像地址拉取基础镜像。 # 基础镜像docker pull swr.${region}.myhuaweicloud.com/eihealth-notebook/eihealth-notebook:${image_version} ${region}:需根据用户实际购买reigon填写。例如,${region}为cn-north-4。 ${image_version}:需根据实际版本填写。例如,${image_version}为cuda11.0-custom-v1.0.8。 在基础镜像中,为您内置了CUDA11.0环境。使用CUDA11.0环境前,需要执行以下命令导入环境变量。 export PATH=$PATH:/usr/local/nvidia/binexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/nvidia/lib64
-
步骤3:制作并上传镜像 制作镜像。 【可选】根据网络情况,配置基础镜像中的PyPi Mirror,对下载进行加速。基础镜像中的PyPi Mirror,默认配置为华为云软件开发云的PyPi mirror。您可以在容器中执行如下命令,查看PyPi Mirror。如果您想用其他PyPi Mirror,可将命令中的index-url参数修改为您需要的PyPi mirror。 cat /root/.pip/pip.conf.product[global]index-url = http://repo.myhuaweicloud.com/repository/pypi/simpleformat = columns[install]trusted-host=repo.myhuaweicloud.com 安装所需软件。本例中使用cpu基础镜像,并安装化学分子格式转换工具Open Babel。 # 创建并进入Dockerfile文件vi Dockerfile# 编写Dockerfile文件,安装Open BabelFROM swr.cn-north-4.myhuaweicloud.com/eihealth-notebook/eihealth-notebook:cuda11.0-custom-v1.0.8RUN sudo apt-get updateRUN sudo apt-get install -y openbabel Dockerfile中不可以指定CMD以及ENTRYPOINT,否则会覆盖基础镜像启动脚本,引起异常。 按键盘Esc键,并执行:wq保存退出Dockerfile。 执行docker build -t image:tag .命令,自动完成镜像制作。 命令中image为镜像名称,tag为镜像标签,名称可自定义。 详细镜像制作过程请参见制作Docker镜像和Dockerfile参考。 上传镜像。 上传镜像。 在“项目管理”页面“镜像”页签中,可查看已上传的镜像。 在平台镜像管理列表中,将已上传的镜像分类为“NOTEBOOK”。
-
操作步骤 登录华为云管理控制台,鼠标指向页面右上角的用户名,在下拉列表中单击“我的凭证”。 图1 我的凭证入口 在“我的凭证”页面中选择“访问密钥”页签。单击“新增访问密钥”,按操作指引获取认证账号的AK/SK,请妥善保管AK/SK信息。 图2 访问密钥 每个用户仅允许新增两个访问密钥。 为保证访问密钥的安全,访问密钥仅在初次生成时自动下载,后续不可再次通过管理控制台页面获取。请在生成后妥善保管。
-
Dockerfile基本语法 FROM 指定待扩展的父级镜像(基础镜像)。除了注释以外,在文件的开头必须是一个FROM指令,后面的指令便在这个父级镜像的环境中运行,直到遇到下一个FROM指令。通过添加多个FROM命令,可以在同一个Dockerefile文件中创建多个镜像。 MAINTAINER 声明创建镜像的作者信息:用户名、邮箱,非必须参数。 RUN 用来修改镜像的命令,常用来安装库、程序以及配置程序。一条RUN指令执行完毕后,会在当前镜像上创建一个新的镜像层,接下来的指令会在新的镜像上继续执行。 RUN 语句具有以下形式。 RUN yum update:在/bin/sh路径中执行的指令命令。 RUN ["yum", "update"]:直接使用系统调用exec来执行。 RUN yum update && yum install nginx:使用&&符号将多条命令连接在同一条RUN语句中。 EXPOSE 用来指明容器内进程对外开放的端口,多个端口之间使用空格隔开。运行容器时,通过参数-P(大写)即可将EXPOSE里所指定的端口映射到主机上另外的随机端口,其他容器或主机就可以通过映射后的端口与此容器通信。您也可以通过-p(小写)参数将Dockerfile中EXPOSE中没有列出的端口设置成公开的。 COPY 将本地的文件或目录复制到镜像中。 ADD 向新镜像中添加文件,这个文件可以是主机文件、网络文件或文件夹。 第一个参数:源文件(夹)。 如果是相对路径,必须是相对于Dockerfile所在目录的相对路径。 如果是URL,会将文件先下载下来,然后再添加到镜像里。 第二个参数:目标路径。 如果源文件是主机上的zip或者tar形式的压缩文件,Docker会先解压缩,然后将文件添加到镜像的指定位置。 如果源文件是一个通过URL指定的网络压缩文件,则不会解压。 VOLUME 在镜像里创建一个指定路径(文件或文件夹)的挂载点,这个容器可以来自主机或者其它容器。多个容器可以通过同一个挂载点共享数据,即便其中一个容器已经停止,挂载点也仍然可以访问。 WORKDIR 为接下来执行的指令指定一个新的工作目录,这个目录可以是绝对目录,也可以是相对目录。根据需要,WORKDIR可以被多次指定。当启动一个容器时,最后一条WORKDIR指令所指的目录将作为容器运行的当前工作目录。 ENV 设置容器运行的环境变量。在运行容器的时候,通过设置-e参数可以修改这个环境变量值,也可以添加新的环境变量。 例如: docker run -e WEBAPP_PORT=8000 -e WEBAPP_HOST=www.example.com ... CMD 用来设置启动容器时默认运行的命令。 ENTRYPOINT 用来指定容器启动时的默认运行的命令,与CMD类似。区别在于:运行容器时添加在镜像之后的参数,对ENTRYPOINT是拼接,CMD是覆盖。 若在DockerFile中指定了容器启动时的默认运行命令为ls -l,则运行容器时默认启动命令为ls -l。 ENTRYPOINT [ "ls", "-l"]:指定容器启动时的程序及参数为ls -l。 docker run centos:当运行centos容器时,默认执行的命令是docker run centos ls -l。 docker run centos -a:当运行centos容器时拼接了-a参数,则默认运行的命令是docker run centos ls -l -a。 若在DockerFile中指定了容器启动时的默认运行命令为--entrypoint,则在运行容器时若需要替换默认运行命令,可以通过添加--entrypoint参数来替换Dockerfile中的指定。 docker run gutianlangyu/test --entrypoint echo "hello world" USER 为容器的运行及RUN、CMD、ENTRYPOINT等指令的运行指定用户或UID。 ONBUILD 触发器指令。构建镜像时,Docker的镜像构建器会将所有的ONBUILD指令指定的命令保存到镜像的元数据中,这些命令在当前镜像的构建过程中并不会执行。只有新的镜像使用FROM指令指定父镜像为当前镜像时,才会触发执行。 使用FROM以这个Dockerfile构建出的镜像为父镜像,构建子镜像时: ONBUILD ADD . /app/src:自动执行ADD . /app/src