注意细节

“#”号开头是注释 ,指令不区分大小写,顺序执行

FROM   指定基础镜像;注意必须是文件里第一个非注释行
ENV name 值 设置变量,注意没有=号
变量引用
${name:-chenxi} 假如变量为空chenxi就是变量的默认值
[root@master ~]# echo ${name:-chenxi}
chenxi

  FROM 语法介绍

FROM <指定docker镜像名>[:<tag>]  标签不加默认是latest

FROM <指定docker镜像名>@哈希码

  MAINTANIER

MAINTANIER #作者的信息

  LABEL语法

LABEL 指定元数据信息 key=值  key=值

  COPY 用于从docker 主机复制文件至创建的新镜像文件语法

COPY   源文件或目录   目标目录
COPY ["源文件" "目标目录"]
注意 路径中有空白符通常使用第二个方法
文件复制准则
源文件必须是build上下文中的路径,不能是其父目录的文件
如果源是目录,则其内部文件或者子目录会被递归复制,但源目录自身不会被复制
如果指定多个源文件,或者在指定源文件使用了通配符,则目标必须是个目录,且以/结尾
如果目标不存在,它则会被自动创建,这包括其父目录路径

  示例

[root@master docker]# cat Dockerfile
FROM busybox
COPY index.html /data/index.html
[root@master docker]# echo "chwxxi" > index.html
[root@master docker]# docker build -t chenxi:v01 ./
Sending build context to Docker daemon 3.072kB
Step 1/2 : FROM busybox
---> 020584afccce
Step 2/2 : COPY index.html /data/index.html
---> a39f70f77f61
Successfully built a39f70f77f61
Successfully tagged chenxi:v01
[root@master docker]# docker run --name cx --rm chenxi:v01 cat /data/index.html
chwxxi

  ADD 指令类似于COPY指令,支持使用tar文件和URL路径语法

ADD   源文件 目标
ADD ["源文件" "目标文件"]
操作准则
如果源文件为ULR切目标文件不以/结尾,则源文件指定的文件将被下载并直接创建为目标文件 ;如果目标文件以/结尾,则文件名直接下载到目标/文件
如果源文件是本地文件系统上的压缩格式的tar文件,它将被展开为一个目录,其行为类似于tar -x 命令,然而通过ULR获取的tar文件将不会被展开
如果<源文件>有多个,或其间接直接使用通配符,则目标文件必须是一个以/结尾的目录路径,如果目标文件不以/结尾的,则其是普通文件。源文件的内容将被直接写入目标文件里

  示例

[root@master docker]# cat Dockerfile
FROM busybox
COPY index.html /data/index.html
ADD http://download.redis.io/releases/redis-5.0.7.tar.gz /data/
[root@master docker]# docker build -t redis:v01 ./
Sending build context to Docker daemon 1.988MB
Step 1/3 : FROM busybox
---> 020584afccce
Step 2/3 : COPY index.html /data/index.html
---> Using cache
---> a39f70f77f61
Step 3/3 : ADD http://download.redis.io/releases/redis-5.0.7.tar.gz /data/
Downloading [==================================================>] 1.984MB/1.984MB
---> 50adfdcc6117
Successfully built 50adfdcc6117
Successfully tagged redis:v01
[root@master docker]# docker run --name cx --rm redis:v01 ls /data/
index.html
redis-5.0.7.tar.gz

  示例-2

[root@master docker]# cat Dockerfile
FROM busybox
COPY index.html /data/index.html
ADD redis-5.0.7.tar.gz /data/redis/ [root@master docker]# ls
Dockerfile index.html redis-5.0.7.tar.gz
[root@master docker]# docker build -t redis:v02 ./
Sending build context to Docker daemon 1.988MB
Step 1/3 : FROM busybox
---> 020584afccce
Step 2/3 : COPY index.html /data/index.html
---> Using cache
---> a39f70f77f61
Step 3/3 : ADD redis-5.0.7.tar.gz /data/redis/
---> cbbee8a281ad
Successfully built cbbee8a281ad
Successfully tagged redis:v02
[root@master docker]# docker run --name cx --rm redis:v02 ls /data/redis
redis-5.0.7

  WORKDIR指定工作目录

用于设定Dockerfil中所有的RUN、CMD、ENTRYPOINT、COPY和ADD设定工作目录
WORKDIR 路径

  示例

[root@master docker]# cat Dockerfile
FROM busybox
COPY index.html /data/index.html
WORKDIR /usr/local/src/
ADD redis-5.0.7.tar.gz ./
[root@master docker]# ls
Dockerfile index.html redis-5.0.7.tar.gz
[root@master docker]# docker build -t redis:v03 ./
Sending build context to Docker daemon 1.988MB
Step 1/4 : FROM busybox
---> 020584afccce
Step 2/4 : COPY index.html /data/index.html
---> Using cache
---> a39f70f77f61
Step 3/4 : WORKDIR /usr/local/src/
---> Running in d2fca8af31a5
Removing intermediate container d2fca8af31a5
---> 91323c9b4a85
Step 4/4 : ADD redis-5.0.7.tar.gz ./
---> b2a20e26e004
Successfully built b2a20e26e004
Successfully tagged redis:v03
[root@master docker]# docker run --name cx --rm redis:v03 ls /usr/local/src/
redis-5.0.7

  VOLUME 创建挂载点目录

用于在镜像里创建一个挂载点目录,用于挂着Dockre主机上的卷或其他容器上的卷
VOLUME 目录
如果挂载点目录路径下此文件存在,docker run 会在卷挂载完成后将此前文件复制到新卷里

  示例

[root@master docker]# cat Dockerfile
FROM busybox
COPY index.html /data/index.html
WORKDIR /usr/local/src/
ADD redis-5.0.7.tar.gz ./
VOLUME /data/mysql/
[root@master docker]# docker build -t mysql:v01 ./
Sending build context to Docker daemon 1.988MB
Step 1/5 : FROM busybox
---> 020584afccce
Step 2/5 : COPY index.html /data/index.html
---> Using cache
---> a39f70f77f61
Step 3/5 : WORKDIR /usr/local/src/
---> Using cache
---> 91323c9b4a85
Step 4/5 : ADD redis-5.0.7.tar.gz ./
---> Using cache
---> b2a20e26e004
Step 5/5 : VOLUME /data/mysql/
---> Running in 8e97168b8a38
Removing intermediate container 8e97168b8a38
---> 36ae8d2ba3b7
Successfully built 36ae8d2ba3b7
Successfully tagged mysql:v01
[root@master docker]# docker run --name cx --rm mysql:v01 mount | grep /data/mysql
/dev/mapper/centos-root on /data/mysql type xfs (rw,relatime,attr2,inode64,noquota)
 EXPOSE 指令 用于为容器打开指定要监听端口已实现与外部通信一次可以暴露多个端口
语法
EXPOSE 11211/tcp 11211/udp
 示例 [root@master docker]# cat Dockerfile
FROM busybox
COPY index.html /data/index.html
WORKDIR /usr/local/src/
ADD redis-5.0.7.tar.gz ./
VOLUME /data/mysql/
EXPOSE 80/tcp
[root@master docker]# docker build -t http:v.01 ./
Sending build context to Docker daemon 1.988MB
Step 1/6 : FROM busybox
---> 020584afccce
Step 2/6 : COPY index.html /data/index.html
---> Using cache
---> a39f70f77f61
Step 3/6 : WORKDIR /usr/local/src/
---> Using cache
---> 91323c9b4a85
Step 4/6 : ADD redis-5.0.7.tar.gz ./
---> Using cache
---> b2a20e26e004
Step 5/6 : VOLUME /data/mysql/
---> Using cache
---> 36ae8d2ba3b7
Step 6/6 : EXPOSE 80/tcp
---> Running in be421f20d0e8
Removing intermediate container be421f20d0e8
---> 578864a06f74
Successfully built 578864a06f74
Successfully tagged http:v.01
[root@master docker]# docker run --name web --rm http:v.01 /bin/httpd -h /data -f -f是前台运行 [root@master ~]# docker inspect web
[
{
"Id": "c6d225297b350edc4a58102d61fcdaa823b3e08892b52f397b64acf02acb1be0",
"Created": "2019-11-23T02:33:08.788432916Z",
"Path": "/bin/httpd",
"Args": [
"-h",
"/data",
"-f"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 10800,
"ExitCode": 0,
"Error": "",
"StartedAt": "2019-11-23T02:33:09.391066632Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:578864a06f740fe342194424148a0ec1b77f942c254b6442bc7a5c8af4ae4546"
, "ResolvConfPath": "/var/lib/docker/containers/c6d225297b350edc4a58102d61fcdaa823b3
e08892b52f397b64acf02acb1be0/resolv.conf", "HostnamePath": "/var/lib/docker/containers/c6d225297b350edc4a58102d61fcdaa823b3e0
8892b52f397b64acf02acb1be0/hostname", "HostsPath": "/var/lib/docker/containers/c6d225297b350edc4a58102d61fcdaa823b3e0889
2b52f397b64acf02acb1be0/hosts", "LogPath": "/var/lib/docker/containers/c6d225297b350edc4a58102d61fcdaa823b3e08892b
52f397b64acf02acb1be0/c6d225297b350edc4a58102d61fcdaa823b3e08892b52f397b64acf02acb1be0-json.log", "Name": "/web",
"RestartCount": 0,
"Driver": "overlay2",
"Platform": "linux",
"MountLabel": "",
"ProcessLabel": "",
"AppArmorProfile": "",
"ExecIDs": null,
"HostConfig": {
"Binds": null,
"ContainerIDFile": "",
"LogConfig": {
"Type": "json-file",
"Config": {}
},
"NetworkMode": "default",
"PortBindings": {},
"RestartPolicy": {
"Name": "no",
"MaximumRetryCount": 0
},
"AutoRemove": true,
"VolumeDriver": "",
"VolumesFrom": null,
"CapAdd": null,
"CapDrop": null,
"Capabilities": null,
"Dns": [],
"DnsOptions": [],
"DnsSearch": [],
"ExtraHosts": null,
"GroupAdd": null,
"IpcMode": "private",
"Cgroup": "",
"Links": null,
"OomScoreAdj": 0,
"PidMode": "",
"Privileged": false,
"PublishAllPorts": false,
"ReadonlyRootfs": false,
"SecurityOpt": null,
"UTSMode": "",
"UsernsMode": "",
"ShmSize": 67108864,
"Runtime": "runc",
"ConsoleSize": [
0,
0
],
"Isolation": "",
"CpuShares": 0,
"Memory": 0,
"NanoCpus": 0,
"CgroupParent": "",
"BlkioWeight": 0,
"BlkioWeightDevice": [],
"BlkioDeviceReadBps": null,
"BlkioDeviceWriteBps": null,
"BlkioDeviceReadIOps": null,
"BlkioDeviceWriteIOps": null,
"CpuPeriod": 0,
"CpuQuota": 0,
"CpuRealtimePeriod": 0,
"CpuRealtimeRuntime": 0,
"CpusetCpus": "",
"CpusetMems": "",
"Devices": [],
"DeviceCgroupRules": null,
"DeviceRequests": null,
"KernelMemory": 0,
"KernelMemoryTCP": 0,
"MemoryReservation": 0,
"MemorySwap": 0,
"MemorySwappiness": null,
"OomKillDisable": false,
"PidsLimit": null,
"Ulimits": null,
"CpuCount": 0,
"CpuPercent": 0,
"IOMaximumIOps": 0,
"IOMaximumBandwidth": 0,
"MaskedPaths": [
"/proc/asound",
"/proc/acpi",
"/proc/kcore",
"/proc/keys",
"/proc/latency_stats",
"/proc/timer_list",
"/proc/timer_stats",
"/proc/sched_debug",
"/proc/scsi",
"/sys/firmware"
],
"ReadonlyPaths": [
"/proc/bus",
"/proc/fs",
"/proc/irq",
"/proc/sys",
"/proc/sysrq-trigger"
]
},
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/7bf24b175acfc5ffff3ddd52aaf9b715ecd2
715da94798e3f0de3cccaf1cef2d-init/diff:/var/lib/docker/overlay2/cd4704ddb683f96a444128da1b375308e61739968544717bc0fb4cc25df3408f/diff:/var/lib/docker/overlay2/98dd3838dda54c72e44f932f27b3e6b838fe11093083391d265042c840adceed/diff:/var/lib/docker/overlay2/56bd207136154521127d96aabbd7823be2334cc15e3ed271396aca6e6ad58de0/diff:/var/lib/docker/overlay2/5cad835aa43c37ba0d434e3775feeb06fe1759f8749d4e8081f186d805b0ad8e/diff", "MergedDir": "/var/lib/docker/overlay2/7bf24b175acfc5ffff3ddd52aaf9b715ecd
2715da94798e3f0de3cccaf1cef2d/merged", "UpperDir": "/var/lib/docker/overlay2/7bf24b175acfc5ffff3ddd52aaf9b715ecd2
715da94798e3f0de3cccaf1cef2d/diff", "WorkDir": "/var/lib/docker/overlay2/7bf24b175acfc5ffff3ddd52aaf9b715ecd27
15da94798e3f0de3cccaf1cef2d/work" },
"Name": "overlay2"
},
"Mounts": [
{
"Type": "volume",
"Name": "b855f89205224a970e2a02c5e6404aba57c1774c363256a33c88b14d8304dd35"
, "Source": "/var/lib/docker/volumes/b855f89205224a970e2a02c5e6404aba57c1774
c363256a33c88b14d8304dd35/_data", "Destination": "/data/mysql",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
"Config": {
"Hostname": "c6d225297b35",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": true,
"AttachStderr": true,
"ExposedPorts": {
"80/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": [
"/bin/httpd",
"-h",
"/data",
"-f"
],
"Image": "http:v.01",
"Volumes": {
"/data/mysql/": {}
},
"WorkingDir": "/usr/local/src",
"Entrypoint": null,
"OnBuild": null,
"Labels": {}
},
"NetworkSettings": {
"Bridge": "",
"SandboxID": "32d53eb902a2b797942ad31bf990220c0c63dc62c6397ac87beb5c1d6dae503f
", "HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {
"80/tcp": null
},
"SandboxKey": "/var/run/docker/netns/32d53eb902a2",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "0bf9b2b05bc76b526798b2334957c4a9fb2a279c449e25a8bfef974d578fa3c
7", "Gateway": "172.17.0.1",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"MacAddress": "02:42:ac:11:00:02",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "20670e48b3f87b53f0426998127e8fd0658e61e8e01ace3bf7cb041a
ad5bd427", "EndpointID": "0bf9b2b05bc76b526798b2334957c4a9fb2a279c449e25a8bfef974
d578fa3c7", "Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2", IP
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:02",
"DriverOpts": null
}
}
}
}
] [root@master ~]# curl 172.17.0.2
chwxxi [root@master docker]# docker run --name web -P --rm http:v.01 /bin/httpd -h /data -f -P 随机在docker主机上暴露一个端口
[root@master docker]# docker port web
80/tcp -> 0.0.0.0:32768
[root@slave1 ~]# curl 192.168.10.5:32768
chwxxi

  ENV 设置环境变量

用于为镜像定义所需的环境变量,并被Dockerfile文件中位于其后指令所调用
调用格式 $name
定义格式 ENV name 值 或者 name = 值
第一个只能设置一个变量,第二个可以同时设置多个变量

  示例

[root@master docker]# cat Dockerfile
FROM busybox
ENV DOCKER_ROOT=/data/index.html
COPY index.html $DOCKER_ROOT
WORKDIR /usr/local/src/
ADD redis-5.0.7.tar.gz ./
VOLUME /data/mysql/
EXPOSE 80/tcp
[root@master docker]# docker build -t http:v.02 ./
Sending build context to Docker daemon 1.988MB
Step 1/7 : FROM busybox
---> 020584afccce
Step 2/7 : ENV DOCKER_ROOT=/data/index.html
---> Running in c36156ec361f
Removing intermediate container c36156ec361f
---> b9a06f515829
Step 3/7 : COPY index.html $DOCKER_ROOT
---> d9ddba9390da
Step 4/7 : WORKDIR /usr/local/src/
---> Running in 7c7c7843262e
Removing intermediate container 7c7c7843262e
---> 5bcade248353
Step 5/7 : ADD redis-5.0.7.tar.gz ./
---> 53d3ffc442eb
Step 6/7 : VOLUME /data/mysql/
---> Running in a0fefc923333
Removing intermediate container a0fefc923333
---> cae7c094e37d
Step 7/7 : EXPOSE 80/tcp
---> Running in 5f1721b1e675
Removing intermediate container 5f1721b1e675
---> d15cd197fe0a
Successfully built d15cd197fe0a
Successfully tagged http:v.02
[root@master docker]# docker run --name web --rm http:v.02 cat /data/index.html
chwxxi
[root@master docker]# docker run --name web --rm http:v.02 printenv
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=0f82ee34454c
DOCKER_ROOT=/data/index.html
HOME=/root

 RUN 是构建镜像过程是运行的命令

RUN 指令介绍
用于指定docker build过程中运行的程序,可以任何命令
RUN 命令 或
RUN [命令,参数]
第一种格式中,是shll 的命令。且以"/bash/sh -c"来运行它,这就意味着词进程在容器里PID不能为1,不能接受Unix信号,当使用docker stop 命令停止时此进程不会接受SIGTERM信号的
第二种格式中的参数是一个JSON格式的数组,命令后面跟的参数,不能使用通配符

  CMD指定容器默认启动时的命令程序;

ENTRYPOINT

类似CMD指令的功能,用于为容器指定默认的运行程序,从而使容器像是一个单独的可执行的程序
与CMD不同的是,有ENTRYPOINT启动的程序不会被docker run 命令指定的参数覆盖,而且这些命令行参数会被当做参数传递给ENTRYPOINT指定的程序的;不过docker run 有--entrypoint选项参数可以覆盖ENTRYPOINT指定的程序的
格式
ENTRYPOINT 命令
docker run 命令传入的参数会覆盖CMD指令的内容并且附加到ENIRYPOINT命令最后作为参数使用 使用““””

  HEALTHCHECK检查容器是否健康

HEALTHCHECK 语法
--interval=数字m 默认30秒 每隔多久检测一次
--timeout=数字m 默认30秒 检测时超时时间
--start-period=数字m 默认0秒 容器启动会多久检测
--retries=数字 检测几次失败后定为失败
CMD 检测命令 HEALTHECK --interval=数字m --timeout=数字m --retries=数字 CMD curl -f http://IP||exit 1

dockerfile的编写参数的更多相关文章

  1. Docker的基本使用及DockerFile的编写

    前言: 最近在准备面试,在复习到Docker相关内容时,想写一些东西分享给大家然后加深一下自己的印象,有了这篇随笔. Docker的简介: docker从文件系统.网络互连到进程隔离等等,极大的简化了 ...

  2. Docker 与 K8S学习笔记(四)—— Dockerfile的编写

    在上一篇中我们简单介绍了Docker镜像的获取与使用,其中在镜像制作中提到在实际使用中一定要用Dockerfile方式去创建镜像而不要用docker commit方式,那么我们该如何编写Dockerf ...

  3. 简明教程 | Docker篇 · 其二:Dockerfile的编写

    Dockerfile是什么 一个包含用于组合 image 的命令的文本文件,docker 通过 dockerfile 和构建环境的上下文来构建 image . 编写Dockerfile FROM 首先 ...

  4. DockerFile的编写和注意的一些知识点

    CMD,RUN,ENTRYPOINT之类的差别. VOLUMN和-V之间的差别. EXPOSE和-P的对应等. 今天上午写了一个脚本,可以传参数进IMAGE,让启动的CONTAINER具有不同的行为. ...

  5. Dockerfile的编写(主观汇聚篇)

    目录 一.什么是dockerfile 二.Dockerfile的基本结构 Dockerfile文件说明 三.总结 一.什么是dockerfile dockerfile是使用者用来自定义构建一个dock ...

  6. Dockerfile 的常用参数注解和范例

    一. docker hello world 1.1 Dockerfile FROM centos:7.5.1804 MAINTAINER 11@qq.com CMD echo "hello ...

  7. Docker | dockerfile 文件编写

    dockerfile 的作用 dockerfile 作用就是制作镜像,保持开发,测试,生产环境的一致性. 直接将容器制作为镜像 制作新的镜像 # 把容器按照自己的需求个性完之后,就可以创建自己的镜像的 ...

  8. docker18.09.5 Dockerfile文件编写

    Dockerfile命令详解(超全版本)  https://www.cnblogs.com/dazhoushuoceshi/p/7066041.html 案例1 dockerfile文件内容: FRO ...

  9. docker 应用-2(Dockerfile 编写以及镜像保存提交)

    我们可以从docker hub上pull别人的镜像,也可以将容器进行修改,然后commit镜像,并把镜像push到docker hub上被被人使用.但是,直接pull或者push镜像的方式太过笨重,尤 ...

随机推荐

  1. 并查集路径压缩优化 UnionFind PathCompression(C++)

    /* * UnionFind.h * 有两种实现方式,QuickFind和QuickUnion * QuickFind: * 查找O(1) * 合并O(n) * QuickUnion:(建议使用) * ...

  2. 面向对象的封装、继承和多态特性_python

    一.面向对象的几个特点 面向对象也称为类,拥有下面几个特点 1.封装特性:利用类的__init__(self)构造方法封装对象 构造方法:__init__(self):在生成对象的时候会自动调用 例子 ...

  3. 在已部署好的docker环境下配置nginx项目路径

    第一步:申请一个docker连接账号,可以借用putty工具,如果使用sublime,可以下载sftp插件,上传.下载来同步你线上线下的文件: 第二步:修改nginx区域配置文件,在conf文件夹里放 ...

  4. css+div上下左右自适应居中

    主要记录自己日常积累的布局相关的东西,持续更新中. 1.登录框上下左右自适应居中 以前想要把登录表单始终放置在页面的中间,花了不少心思,一直以来用的解决方法都是用js,感觉有点麻烦不是很好,于是在网上 ...

  5. Educational Codeforces Round 81 (Rated for Div. 2) A-E简要题解

    链接:https://codeforces.com/contest/1295 A. Display The Number 贪心思路,尽可能放置更多位,如果n为奇数,消耗3去放置一个7,剩下的放1 AC ...

  6. POJ3258 River Hopscotch(二分最大化最小值)

    题目链接:http://poj.org/problem?id=3258 题意:给n个石头,起点和终点也是两个石头,去掉这石头中的m个,使得石头间距的最小值最大. 思路:二分石头间的最短距离,每次贪心地 ...

  7. layui之弹出层关闭和刷新问题

    本篇文章是根据本人实际开发的例子来讲的,不一定适用各位看官的情况 描述: 主页面,弹出第一个弹框,第一个弹框中在弹出第二个弹框,如图: 1是主页面,2是子弹窗,3是孙弹窗 功能一:好了,第一个我要实现 ...

  8. 小议WebRTC拥塞控制算法:GCC介绍

    网络拥塞是基于IP协议的数据报交换网络中常见的一种网络传输问题,它对网络传输的质量有严重的影响,网络拥塞是导致网络吞吐降低,网络丢包等的主要原因之一,这些问题使得上层应用无法有效的利用网络带宽获得高质 ...

  9. 前端框架vue.js系列(9):Vue.extend、Vue.component与new Vue

    前端框架vue.js系列(9):Vue.extend.Vue.component与new Vue 本文链接:https://blog.csdn.net/zeping891103/article/det ...

  10. 项目中的process.bpmn的读-过程

    1.这次项目中遇到了process.bpmn类的封装好的类.怎么读呢?不知道,一周过去了,总算明白点. 2.首先也是从Controller开始,走进service层,比如mybatis,调用的就不是m ...