目录
Docker 环境信息命令
docker info
docker version
系统日志信息常用命令
docker events
docker logs
docker history
容器的生命周期管理命令
docker create
docker run
常用选项
系统
网络
健康检查
命名空间选项
cgroup资源限制选项
CPU
CPUset
device
memory
ubuntu系统开启内核支持
docker start/stop/restart
docker kill
docker rm
docker pause/unpause
容器运维操作命令
docker exec
docker ps
docker inspect
docker top
docker attach
docker wait
docker export
docker port
docker cp
docker diff
docker rename
docker stats
docker update
镜像管理命令
docker build
docker images
docker rmi
docker tag
docker save
docker load
docker import
docker commit
镜像仓库命令
docker login/logout
docker pull
docker push
docker search
docker 命令官方文档Reference documentation | Docker Documentation
Docker 环境信息命令
docker info
docker info : 显示 Docker 系统信息,包括镜像和容器数。
docker info [OPTIONS]
docker version
docker version :显示 Docker 版本信息。
docker version [OPTIONS]
OPTIONS说明:
-f :指定返回值的模板文件。
系统日志信息常用命令
docker events
docker events : 从服务器获取实时事件
docker events [OPTIONS]
OPTIONS说明:
-f :根据条件过滤事件;
--since :从指定的时间戳后显示所有事件;
--until :流水时间显示到指定的时间为止;
//第一个终端执行 docker events
//第二个终端操作容器 docker start/stop/restart
//查看第一个终端输出
docker logs
docker logs : 获取容器的日志
docker logs [OPTIONS] CONTAINER
OPTIONS说明:
-f : 跟踪日志输出
--since :显示某个开始时间的所有日志
-t : 显示时间戳 --tail :仅列出最新N条容器日志
docker logs -f mynginx
docker history
docker history : 查看指定镜像的创建历史。
docker history [OPTIONS] IMAGE
OPTIONS说明:
-H :以可读的格式打印镜像大小和日期,默认为true;
--no-trunc :显示完整的提交记录;
-q :仅列出提交记录ID
docker history mynginx:v1
容器的生命周期管理命令
docker create
docker create :创建一个新的容器但不启动它
语法同docker run
docker run
docker run :创建一个新的容器并运行一个命令
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
常用选项
1. --add-host:容器中hosts文件添加 host:ip 映射记录
docker run --rm -it --add-host db-static:86.75.30.9 ubuntu cat /etc/hosts
2. -a, --attach:附加到 STDIN, STDOUT 或 STDERR
docker run --rm -a stdin -a stdout -i -t ubuntu /bin/bash
3. --cidfile:将容器id写入到指定文件
docker run --rm --cidfile /tmp/idfile ubuntu
4. -d, --detach:后台运行容器并打印容器id
5. --detach-keys:指定将容器切回后台的按键,默认:CTRL-p+CTRL-q
6. --disable-content-trust:跳过镜像验证,默认为TRUE
7. --domainname:设置容器网络服务域名 8. --entrypoint:覆盖镜像默认程序入口
docker run --rm -it --entrypoint /bin/bash nginx
9. -e, --env:设置环境变量
10. --env-file:从文件中读取环境变量
11. --expose:暴露一个或多个端口
12. --group-add:为容器用户添加更多用户组
docker run --rm --group-add audio --group-add nogroup --group-add 777 ubuntu id
13. -h, --hostname string:设置主机名
14. --init 在容器内运行init,转发信号并捕获进程
# ps 对比容器的元祖进程
docker run --rm -it ubuntu bash
docker run --rm -it --init ubuntu bash
15. -i, --interactive:保持标准输入设备处于打开状态
16. -l, --label list:设置容器元数据labels
17. --label-file list:从文件中读取以换行作为分隔符的label
18. --link:添加一个其他容器的链接,及修改当容器的/etc/hosts文件
19. --log-driver:容器日志驱动,none、local、json-file、syslog、journald、gelf、fluentd、 awslogs、splunk、etwlogs、gcplogs、logentries
20. --log-opt:日志驱动选项
21. --mount:将文件系统挂载到容器,与 -v 类似
# 挂载volume
docker run -t -i --rm --mount type=volume,target=/data ubuntu bash
# 创建目录
mkdir /tmp/data
# 修改目录所有权,仅当使用userns的情况下需要
sudo chown 165536:root /tmp/data
# bind 磁盘已存在目录
docker run -t -i --rm --mount type=bind,src=/tmp/data,dst=/data ubuntu bash
22. --name:指定容器名称
23. --privileged:授予容器超级权限
24. -p, --publish:发布容器端口都主机端口
25. -P, --publish-all:将所有暴露的端口发布到主机随机端口
26. --pull:运行前拉取图像,(always|missing|never),默认 missing
27. --pids-limit:限制容器中pid个数
28. --read-only :将容器跟文件系统装载为只读 29. --restart:当容器退出时的重启策略,默认为no
no:当容器退出时,不要自动重新启动
on-failure[:max-retries]:仅当容器以非零退出状态退出时才重新启动。
always:无论退出状态如何,始终重新启动容器。无论容器的当前状态如何,容器也将 始终在守护程序 启动时启动
unless-stopped:论退出状态如何,始终重新启动容器,包括守护程序启动时,除非容 器在Docker守护 程序停止之前处于停止状态。
27. --rm:当容器退出时,自动删除容器
28. --sig-proxy:将接收到的信号代理到进程(默认为true)
29. --stop-signal:停止容器的信号(默认为“SIGTERM”)
30. --stop-timeout:容器停止超时时长,单位s
31. --tmpfs:装载tmpfs目录
docker run -dit --rm --tmpfs /run1:rw,noexec,nosuid,size=65536k ubuntu bash
32. -t, --tty:分配一个伪终端设备
33. -u, --user: 用户名或用户ID (格式: [:])
34. -v, --volume :绑定数据卷
35. --volume-driver:容器的可选卷驱动程序
36. --volumes-from:从指定的容器装载数据卷
37. -w, --workdir:容器内的工作目录
系统
1. --cap-add:添加linux功能
2. --cap-drop:删除linux功能
docker run --cap-add=ALL --cap-drop=MKNOD ...
docker run --cap-add=SYS_ADMIN ...
docker run --cap-add=CAP_SYS_ADMIN ...
3. --isolation:指定容器的隔离技术
linux系统:只支持default,即linux命名空间隔离技术
windows系统:
default:表示使用docker守护进程配置的选项,否则默认使用process选项
process:命名空间隔离
hyperv:基于Hyper-V 管理程序基于分区的隔离
4. --platform:设置平台,如果服务器支持多个平台
5. --runtime:用于此容器使用的运行时
6. --security-opt:通过指定--security opt标志来覆盖每个容器的默认标签方案
7. --shm-size:设置/dev/shm设备的大小,/dev/shm是一个基于内存的临时文件系统
8. --storage-opt:容器的存储驱动程序选项
9. --sysctl:设置系统参数,默认 map[]
10. --ulimit:设置Ulimit选项,默认[]
网络
1. --ip:ip4地址
2. --ip6:ip6地址
3. --dns 设置自定义dns服务器,将修改容器中 /etc/resolv.conf 文件
4. --dns-option:设置DNS选项,将修改容器中 /etc/resolv.conf 文件
5. --dns-search:设置自定义DNS搜索域名,将修改容器中 /etc/resolv.conf 文件
6. --link-local-ip:设置一个或多个容器的以太网设备的链路本地IPv4/IPv6地址
7. --mac-address:容器Mac地址
8. --network:将容器加入到指定网络
9. --network-alias:为容器添加网络范围的别名
健康检查
1. --health-cmd:健康检查命令
2. --health-interval:健康检查频率(ms|s|m|h),默认0s
3. --health-retries:健康检查重试次数,连续失败指定次数则判断为不健康
4. --health-start-period:设置启动容器的初始化时间,在此期间的健康检查不作为参考依据, (ms|s|m|h),默认0s
5. --health-timeout:每一次检查超时时间(ms|s|m|h),默认0s
6. --no-healthcheck:禁用健康检查
docker run --rm --health-cmd "curl http://localhost" --health-interval 2s -- health-retries 5 --health-start-period 10s --health-timeout 1s nginx
命名空间选项
1. --cgroup-parent:容器的可选父cgroup
2. --cgroupns:要使用的Cgroup命名空间(host|private) host:在Docker主机的cgroup命名空间中运行容器 private:在容器的私有cgroup命名空间中运行容器 "":使用配置的cgroup命名空间
3. --pid:pid 命名空间使用,默认使用命名空间隔离,指定host则使用主机pid命名空间
4. --userns:用户与组命名空间,默认为主机模式,在daemon.json中配置后,默认隔离,可通过指 定host为主机模式
5. --uts:uts命名空间,默认隔离,可指定host为主机模式
cgroup资源限制选项
CPU
1. --cpu-period:限制(完全公平调度程序)CPU分配周期
2. --cpu-quota:限制(完全公平调度程序)CPU配额
docker run --rm -dit --cpu-period=50000 --cpu-quota=25000 ubuntu /bin/bash
3. --cpu-rt-period:限制CPU实时周期(微秒)
4. --cpu-rt-runtime:限制CPU实时运行时间(微秒)
docker run --rm -dit --cpu-rt-period=50000 --cpu-rt-runtime=25000 ubuntu /bin/bash
7. -c, --cpu-shares:CPU相对权重
8. --cpus:指定CPU配额,例如:--cpus=0.5,表示可以使用0.5个CPU的配额
CPUset
1. --cpuset-cpus:指定容器在哪个或哪几个CPU上运行
docker run --rm -dit --cpuset-cpus="1,3" ubuntu /bin/bash
docker run --rm -it --cpuset-cpus="0-2" ubuntu /bin/bash
2. --cpuset-mems:指定容器使用的内存节点
docker run --rm -dit --cpuset-mems="1,3" ubuntu /bin/bash
docker run --rm -dit --cpuset-mems="0-2" ubuntu /bin/bash
device
1. --device:添加主机设备到容器,默认权限:read, write, mknod,可通过:rwm 覆盖默认权限
docker run --rm -dit --device=/dev/sda:/dev/sda --device=/dev/snd:/dev/snd:r ubuntu /bin/bash
2. --device-cgroup-rule:将规则添加到cgroup允许的设备列表
3. --device-read-bps:限制设备的读取速率(字节/秒)
docker run --rm -dit --device-read-bps /dev/sda:1mb ubuntu
4. --device-read-iops:限制设备每秒读取次数(io/秒)
docker run --rm -dti --device-read-iops /dev/sda:1000 ubuntu
5. --device-write-bps:限制设备的写入速率(字节/秒)
docker run --rm -dit --device-write-bps /dev/sda:1mb ubuntu
6. --device-write-iops:限制设备每秒写入次数(io/秒)
docker run --rm -dti --device-write-iops /dev/sda:1000 ubuntu
7. --gpus:要添加到容器的GPU设备(“all”传递所有GPU)
memory
ubuntu系统开启内核支持
1. 修改系统文件/etc/default/grub
GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
2. 更新并重启机器 update-grub; reboot;
选项
1. -m, --memory:内存限制,硬限制
2. --memory-reservation:内存限制,软限制
docker run --rm -dit -m 500M --memory-reservation 200M ubuntu /bin/bash
3. --memory-swap:交换区限制,等于内存限制加swap限制,-1表示无限制
docker run --rm -dit -m 300M --memory-swap 1G ubuntu /bin/bash
4. --memory-swappiness:调整容器内存交换,取值 0 ~ 100 ,默认为-1。为0表示尽可能的使用物理内存,为100表示尽可能的使用交换区。产生交换的场景:1.系统需要的内存大于可用内存 2.应用启动之初需要大量内存,启动之后不再使用的内存将被交换。
docker run --rm -dit --memory-swappiness=0 ubuntu /bin/bash
5. --oom-kill-disable:禁用内存超限,杀死进程功能
docker run --rm -dit -m 100M --oom-kill-disable ubuntu /bin/bash
6. --oom-score-adj:调整容器进程超限被杀的优先级,分数越高被杀的优先级越高,取值范围-1000 ~ 1000
docker run --rm -dit -m 100M --oom-score-adj 100 ubuntu /bin/bash
docker start/stop/restart
docker start :启动一个或多个已经被停止的容器
docker stop :停止一个运行中的容器
docker restart :重启容器
docker start [OPTIONS] CONTAINER [CONTAINER...]
docker stop [OPTIONS] CONTAINER [CONTAINER...]
docker restart [OPTIONS] CONTAINER [CONTAINER...]
docker restart mynginx
docker stop mynginx
docker start mynginx
docker kill
docker kill :杀掉一个运行中的容器
docker kill [OPTIONS] CONTAINER [CONTAINER...]
OPTIONS说明:
-s :向容器发送一个信号
docker kill -s KILL mynginx
docker kill -s TERM mynginx
如果容器终止时的状态对用户而言很重要,用户可能会想要了解docker kill 和docker stop之间的区别。 docker kill 的行为和标准的kill 命令行程序并不相同。kill 程序的默认工作方式是向指定的进程发送 TERM信号(即信号值为15)。这个信号表示程序应该被终止,但是不要强迫程序终止。当这个信号被处理时,大多数程序将执行某种清理工作,但是该程序也可以执行其他操作,包括忽略该信号。 而docker kill 对正在运行的程序使用的是KILL信号,这使得该进程没办法处理终止过程。这就意味着一 些诸如包含运行进程ID之类的文件可能会残留在文件系统中。根据应该用程序管理状态的能力,如果再次启动容器,这可能会也可能不会造成问题。 docker stop 命令则像kill 命令那样工作,发送的是一个TERM型号。
docker rm
docker rm :删除一个或多个容器。
docker rm [OPTIONS] CONTAINER [CONTAINER...]
OPTIONS说明:
-f :通过 SIGKILL 信号强制删除一个运行中的容器。
-l :移除容器间的网络连接,而非容器本身。
-v :删除与容器关联的卷。
docker pause/unpause
docker pause :暂停容器中所有的进程。
docker unpause :恢复容器中所有的进程。
docker pause CONTAINER [CONTAINER...]
docker unpause CONTAINER [CONTAINER...]
容器运维操作命令
docker exec
docker exec :在运行的容器中执行命令
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
OPTIONS说明:
-d :分离模式: 在后台运行
-i :即使没有附加也保持STDIN 打开
-t :分配一个伪终端
docker exec -i -t mynginx /bin/bash
// 通过exec 执行命令
docker exec mynginx ls
docker ps
docker ps : 列出容器
docker ps [OPTIONS]
OPTIONS说明:
-a :显示所有的容器,包括未运行的。
-f :根据条件过滤显示的内容。
--format :指定返回值的模板文件。
-l :显示最近创建的容器。
-n :列出最近创建的n个容器。
--no-trunc :不截断输出。
-q :静默模式,只显示容器编号。
-s :显示总的文件大小。
docker ps
docker inspect
docker inspect : 获取容器/镜像的元数据。
docker inspect [OPTIONS] NAME|ID [NAME|ID...]
OPTIONS说明:
-f :指定返回值的模板文件。
-s :显示总的文件大小。
--type :为指定类型返回JSON
// 查看容器的示例id
docker inspect -f '{{.Id}}'
// 检查镜像或者容器的参数,默认返回 JSON 格式
docker inspect <id>
docker top
docker top :查看容器中运行的进程信息,支持 ps 命令参数
docker top [OPTIONS] CONTAINER [ps OPTIONS]
# 查看所有运行容器的进程信息。
for i in `docker ps |grep Up|awk '{print $1}'`;do echo \ &&docker top $i; done
docker attach
docker attach :连接到正在运行中的容器
docker attach [OPTIONS] CONTAINER
docker attach mynginx
docker exec 与 docker attach 的区别:
1. exec 在容器中执行命令,并且可以通过-i -t 创建虚拟终端的方式与容器交互
2. attach 进入容器某个正在执行的命令终端,不能交互操作。但是如果该容器的命令终端是一个可以 交互的终端,那么也可以交互
退出attach模式:
1. 运行容器时指定 -i -t 参数,那么attach容器后可通过Ctrl + P + Ctrl + Q 退出attach状态
docker run -d -it -P nginx
docker attach <containerID>
2. 仅指定-t参数,可以通过Ctrl + C 退出attach状态
docker run -d -t -P nginx
docker attach
3. 不指定-t参数,在attach的时候指定 --sig-proxy=false ,可以通过 Ctrl + C 退出attach状态。--sigproxy 仅在没有指定-t参数的情况下生效。于--sig-proxy 默认值为true,默认将所有接收信号代理 给了容器中的进程,所以Ctrl + C 的时候会将sigint (signal interrupt)终止信号发送到attach进程, 从而转发到被attach的进程,导致容器中进程中断,从而退出容器。
docker run -d -i -P nginx
docker run -d -P nginx
docker attach --sig-proxy=false
docker wait
docker wait : 阻塞运行直到容器停止,然后打印出它的退出代码。
docker wait [OPTIONS] CONTAINER [CONTAINER...]
docker export
docker export :将文件系统作为一个tar归档文件导出到STDOUT。
docker export [OPTIONS] CONTAINER
OPTIONS说明:
-o :将输入内容写到文件。
docker export mynginx -o mynginx.tar
# 解压归档文件,查看内容 tar vxf mynginx.tar -c mynginx
docker port
docker port :列出指定的容器的端口映射,或者查找将PRIVATE_PORT NAT到面向公众的端口。
docker port [OPTIONS] CONTAINER [PRIVATE_PORT[/PROTO]]
docker port mynginx
docker cp
docker cp :用于容器与主机之间的数据拷贝
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
OPTIONS说明:
-L :保持源目标中的链接
# 主机/www/html目录拷贝到容器1881f0cba5bc的/www目录下
docker cp /www/html 1881f0cba5bc:/www/
# 将主机/www/html目录拷贝到容器1881f0cba5bc中,目录重命名为www。
docker cp /www/html 1881f0cba5bc:/www
# 将容器1881f0cba5bc的/www目录拷贝到主机的/tmp目录中
docker cp 1881f0cba5bc:/www /tmp/
docker diff
docker diff : 检查容器里文件结构的更改。
docker diff命令会列出 3 种容器内文件状态变化(A - Add, D - Delete, C - Change )的列表清单
docker diff [OPTIONS] CONTAINER
docker diff mynginx
docker rename
docker rename CONTAINER NEW_NAME
docker stats
docker stats [容器]
docker update
# 查看帮助,可以看出docker update 是用来修改docker run 指定的运行参数
docker update -h
docker update --restart always myubuntu3
docker update --restart no myubuntu3
镜像管理命令
docker build
docker build 命令用于使用 Dockerfile 创建镜像。
docker build [OPTIONS] PATH | URL | -
OPTIONS说明:
--add-host :向hosts文件中添加自定义 host:ip 映射
--build-arg=[] :设置镜像创建时的变量;
--cache-from :指定镜像用作当前构建的缓存镜像
--cgroup-parent :容器的可选父cgroup
--compress : 使用gzip压缩构建上下文
--cpu-period :限制 CPU CFS周期;
--cpu-quota :限制 CPU CFS配额;
-c,--cpu-shares :设置 cpu 使用权重;
--cpuset-cpus :指定使用的CPU id;
--cpuset-mems :指定使用的内存 id;
--disable-content-trust :跳过镜像校验,默认为true;
-f,--file :指定要使用的Dockerfile路径;
--force-rm :不论构建是否成功,总是删除中间容器,默认false。注意:中间容器;
--iidfile :将镜像ID写入到文件
--isolation :使用容器隔离技术;
linux系统:只支持default,即linux命名空间隔离技术
windows系统:
default:表示使用docker守护进程配置的选项,否则默认使用process选项
process:命名空间隔离
hyperv:基于Hyper-V 管理程序基于分区的隔离
--label=[] :设置镜像使用的元数据;
-m :设置内存最大值;
--memory-swap :设置Swap的最大值为内存+swap,"-1"表示不限swap;
--network: 在构建期间为RUN指令设置网络模式(默认“default”)与docker run指令无关 --no-cache :创建镜像的过程不使用缓存;
--pull :总是尝试去更新镜像的新版本;
--quiet, -q :安静模式,成功后只输出镜像 ID;
--rm :构建成功后,删除中间容器,默认true。注意:中间容器,不是镜像;
--security-opt :安全选项
--shm-size :设置/dev/shm的大小,默认值是64M;/dev/shm 是基于内存的tmpfs文件系统。
--ulimit :Ulimit配置。
--tag, -t : 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置 多个标签。
--target : 设置要生成的目标生成阶段
--ulimit : Ulimit 选项
docker build -t nodetodo:v1.0.0 -f Dockerfile .
docker images
docker images : 列出本地镜像。
docker images [OPTIONS] [REPOSITORY[:TAG]]
OPTIONS说明:
-a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
--digests :显示镜像的摘要信息;
-f :显示满足条件的镜像;
--format :指定返回值的模板文件;
--no-trunc :显示完整的镜像信息;
-q :只显示镜像ID
# 查看所有悬空镜像
docker images --filter dangling=true
# 清除所有悬空镜像
docker image prune
docker rmi
docker rmi : 删除本地一个或多个镜像。
docker rmi [OPTIONS] IMAGE [IMAGE...]
OPTIONS说明:
-f :强制删除;
--no-prune :不移除该镜像的过程镜像,默认移除;
docker tag
docker tag : 标记本地镜像,将其归入某一仓库
docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
docker tag mynginx:v1 mynginx:1.0
docker save
docker save : 将指定镜像保存成 tar 归档文件。
docker save [OPTIONS] IMAGE [IMAGE...]
OPTIONS 说明:
-o :输出到的文件。
docker save -o mynginx.tar mynginx:v1
# 解压文件,查看内容
tar vxf mynginx.tar -C mynginx
docker load
docker load : 导入使用 docker save 命令导出的镜像
docker load [OPTIONS]
OPTIONS 说明:
--input , -i : 指定导入的文件,代替 STDIN。
--quiet , -q : 精简输出信息。
docker load -i mynginx.tar
docker import
docker import : 从归档文件中创建镜像。
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
OPTIONS说明:
-c :应用docker 指令创建镜像;
-m :提交时的说明文字
docker import mynginx.tar mynginx:v3
docker commit
docker commit :从容器创建一个新的镜像。
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
OPTIONS说明:
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停
docker commit -a "nick" -m "mynginx commit" mynginx mynginxtest:1.0
镜像仓库命令
docker login/logout
docker login : 登陆到一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
docker logout : 登出一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
docker login [OPTIONS] [SERVER]
docker logout [OPTIONS] [SERVER]
OPTIONS说明:
-u :登陆的用户名
-p :登陆的密码
docker login -u 用户名 -p 密码
docker logout
docker pull
docker pull : 从镜像仓库中拉取或者更新指定镜像
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
OPTIONS说明:
-a :拉取所有 tagged 镜像
--disable-content-trust :忽略镜像的校验,默认开启
docker pull nginx
docker push
docker push : 将本地的镜像上传到镜像仓库,要先登陆到镜像仓库
docker push [OPTIONS] NAME[:TAG]
OPTIONS说明:
--disable-content-trust :忽略镜像的校验,默认开启
docker search
docker search : 从Docker Hub查找镜像
docker search [OPTIONS] TERM
OPTIONS说明:
--automated :只列出 automated build类型的镜像;
--no-trunc :显示完整的镜像描述;
-f :列出收藏数不小于指定值的镜像
//从 Docker Hub 查找所有镜像名包含 nginx,并且收藏数大于 10 的镜像
docker search -f stars=10 nginx
参数说明:
NAME: 镜像仓库源的名称
DESCRIPTION: 镜像的描述
OFFICIAL: 是否 docker 官方发布
stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。
AUTOMATED: 自动构建。