Open AurorePaladin opened 2 years ago
通过 MAINTAINER 设置镜像文件的作者或维护者名称。在实际使用中,更加推荐使用 LABEL 标签,因为 LABEL 除了设置作者标签外还可以添加更多其他你需要添加的标签。
MAINTAINER 形式为:
形式 | 示例 |
---|---|
MAINTAINER <name> | MAINTAINER puxiao |
通过 LABEL 设置镜像文件的 label 标签。遵循以下原则:
若要查看镜像文件的 label 标签(同时也是容器的 label 标签),使用命令:docker inspect imagenamexxx
通过 EXPOSE 对外通知容器监听的网络端口和使用协议(TCP或UDP),默认使用TCP协议 。
特别强调:对于端口而言 EXPOSE 仅仅是告知,并不是真正设置端口,真正容器所使用的端口是在 docker run 中 -p 参数来设置端口的。
可以同时添加多条 EXPOSE 设置。
通过 ADD 添加(复制)文件到镜像文件中,被添加(复制)的文件来源是本机资源或远程文件文件或目录,被接收的远程文件拥有600权限(rw-,可读、可写、不可执行)。
ADD 形式有以下2种:
形式 | 示例 |
---|---|
ADD [--chown=<user>:<group>] <src>... <dest> | 添加文件到某位置,路径不需要双引号包裹 src为文件源URL、dest为镜像文件中的路径 |
ADD [--chown=<user>:<group>] ["<src>",... "<dest>"] | 路径被双引号包裹,如果路径中有空格只能用这种形式 |
补充说明:
ADD 添加文件遵循以下原则:
src路径类型 | 对应含义 |
---|---|
本地文件路径 | 复制该文件到镜像文件中 |
本地压缩文件路径(文件格式identidy、gzip、bzip2、xz) | 解压成一个目录,并将该目录复制到镜像文件中 |
本地目录路径 | |
URL文件地址(非 / 结尾) | 下载和复制该文件到镜像文件中 |
URL压缩文件地址 | 下载,但不会被解压,效果与其他URL文件相同 |
URL目录地址(以 / 结尾) | 在镜像文件中创建URL中最后的目录,并将URL目录中的文件下载和赋值到镜像文件中 URL目录地址必须包含一个目录,例如http://example.com 并没有包含目录,这是无效的URL路径 |
dest路径要求 | 补充 |
---|---|
dest 是文件路径还是目录,必须和 src 执行结果对应 | src 为本地压缩文件时,dest 对应解压后的文件内容 |
如果 src 为目录,则dest 也必须为目录 | |
若 dest 本身不存在,则会自动被创建 |
通过 COPY 从上下文目录(本地文件资源或远程URL)中复制文件或目录到容器指定路径里。
形式和 ADD 一样,但是 COPY 仅执行文件复制 即使需要拷贝文件的是压缩文件,也不会尝试进行解压
如果是本地文件,优先考虑使用 COPY 而不是 ADD
COPY 形式为:
形式 | 示例 |
---|---|
COPY [--chown=<user>:<group>] <src>... <dest> | COPY ./dist ./ 将项目中的 ./dist 目录下的内容拷贝到 虚拟镜像中的 ./ 中, 而 虚拟镜像中的 ./ 其实是指 WORKDIR 设置的项目主目录, 当然也可以不使用 ./ 而是 填写具体的目录,例如 /app |
COPY [--chown=<user>:<group>] ["<src>",... "<dest>"] | 路径被双引号包裹,如果路径中有空格只能用这种形式 |
同时拷贝多个文件的示例:
WORKDIR /app
#如果拷贝的目标路径是 WORKDIR ,则可以使用 ./ 代替
COPY ./dist ./package.json ./package-lock.json ./.npmrc ./
#为了阅读美观,可以使用 \ 作为换行连接符
COPY ./dist \
./package.json \
./package-lock.json \
./.npmrc \
./
通过 VOLUME 设置匿名数据卷,若启动容器时忘记挂载数据卷,则会自动挂载到匿名数据卷中。这样做的目的有:
VOLUME 形式为:
形式 | 示例 |
---|---|
VOLUME <path> | |
VOLUME ["<path1>", "<path2>"...] |
容器启动时,可通过 -v 参数来修改挂载数据点
通过 WORKDIR 来指定本镜像虚拟环境下的项目主目录。将来启动该镜像的容器,默认会从该目录下找执行文件。
注意:为避免冲突,请勿将 WORKDIR 的路径 设置为 常见 Linux 系统默认的目录
WORKDIR 形式:
形式 | 示例 |
---|---|
WORKDIR <path> |
- 指定的项目主目录无论是否最终使用,都会自动被创建
- 每一个 RUN 命令都新建一层,只有 WORKDIR 创建的目录会一直存在
- 一个 dockerfile 中允许出现多个 WORKDIR,若为相对路径,则每一个 WORKDIR 对应的路径 都将是上一个 WORKDIR 路径累加之后的绝对路径
通过 USER 指定执行后续命令的用户和用户组。
USER 形式为:
形式 | 示例 |
---|---|
USER |
确保用户和用户组本身已存在
如果不指定,则默认使用 root 用户
通过 ONBUILD 延迟构建命令的执行。简单来说就是本次构建时不会执行,但是当其他构建若使用到了本次镜像文件(其他 dockerfile 中 FROM 本镜像) ,则会执行。
ONBUILD 形式为:
形式 | 示例 |
---|---|
ONBUILD <其它指令> |
通过 STOPSIGNAL 来指定当 Docker 要关闭容器前,发送的关闭信号。
默认关闭信号为 “SIGTERM”,通过 STOPSIGNAL 可以修改该值。
STOPSIGNAL 形式为:
形式 | 示例 |
---|---|
STOPSIGNAL signal |
当 Docker 要关闭容器前 发送关闭信号给 容器,目的是让容器可以先做一些处理,平滑退出。如果容器不做任何处理,则容器将在 10秒 后强制关闭退出。
通过 SHELL 来执行 指定的 shell 命令。
SHELL 形式为:
形式 | 示例 |
---|---|
SHELL ["executable", "parameters", "parameters2"] |
.dockerignore 用来配置不构建到镜像文件中的内容,遵循以下原则:
Docker build . 构建镜像文件是通过 Docker daemon (守护进程) 运行的,而不是 Docker 客户端。
默认 应该把 dockerfile 存放在要构建的项目根目录,如果不在要构建的项目根目录,则需要在构建时,通过添加 -f /xx/xxx/dockerfile 参数,来指定 dockerfile 文件位置。
创建、构建镜像文件:docker build xxxxpath 这里的 xxxxpath 为项目根目录
dockerfile 文件通常都保存在 项目根目录 若是当前目录,则可以使用 . 代替,即:docker build .
可以添加的参数有:
参数 | 对应含义 |
---|---|
-t xxx/xx 或 --tag xxx/xx | 设置镜像文件保存到哪个镜像仓库和标签 可以同时设置多条 -t xxx/xx,即同时发布到多个镜像仓库中 |
-f xxx 或 --file xxx | 声明 dockerfile 所在的路径 如果不加该参数则从当前目录中查找 dockerfile |
--catch-from | 允许使用非父链上的构建缓存,以加快构建过程 默认只能使用父链上的构建缓存 |
--no-cache | 不使用上次构建的缓存 (个人不建议添加此参数) |
当本机第2次构建同一项目镜像时,默认会使用上次构建时的一些缓冲,仅仅把修改部分进行重新构建,这样会提高构建速度。
特别提醒:
假设第二次重新构建镜像时,若 -t 的值 和第一次构建时相同,那么本次构建的镜像名称将使用 -t 的值,而之前的镜像会依然保留,只是 tag 名字自动改为 none,若想删除之前镜像,只能靠 删除镜像ID 的方式。
特别提醒:在 Linux 下 文件是区分大小写的,因此只能将文件名设置为 dockerfile 或 Dockerfile
错误命名:例如 DOCKERFILE,则会报错,提示找不到文件
unable to prepare context: unable to evaluate symlinks in Dockerfile path: lstat /mykoa/test-git/Dockerfile: no such file or directory
搜索镜像:docker search xxx
一定要从返回列表中,认真看清楚镜像的描述信息,最终选定安装哪个镜像文件
下载镜像:docker pull xxx ,其中 xxx 为 docker search xxx 中选定的结果名称
下载腾讯云镜像:
查看已安装的镜像:docker images 或 docker image ls
查看某镜像的底层配置:docker inspect xxx
为本地某镜像添加一个新的别名,并使用新的 tag:docker tag xxx:oldtag xxx:newtag
注意并不是将原来镜像的 tag 进行修改,而是创建一个副本(镜像别名),副本(镜像别名)使用新的 tag,但是这两个镜像 Image ID 是一样的,也就意味着实际上本地只储存了一份镜像,所谓新创建的副本(镜像别名)只是新增的一个镜像引用而已。
导出镜像文件:docker save xxx > /xx/xxx.tar.gz
将镜像导出成压缩文件(相当于本地备份镜像),
/xx/xxx.tar.gz
为导出镜像文件的保存位置和文件名。 注意:导出命令执行完毕后并不会打印任何信息
导入镜像文件:docker load < /xx/xxx.tar.gz
注意:导出镜像文件使用 > ,导入镜像文件使用 <
删除镜像:docker image rm xxx 或者 docker rmi xxx
这里的 xxx 既可以是镜像名,也可以是镜像ID
若 xxx 是镜像别名,该镜像只有一个镜像名,那么删除 xxx 也就相当于同时删除了该镜像 若 xxx 是镜像别名,该镜像本地创建了多个镜像别名,那么删除 xxx 仅仅删除该镜像别名而已,并不会删除镜像 若 xxx 是镜像ID,那么删除 xxx 就会删除该镜像以及所有的镜像别名
删除镜像时若报错误:unable to remove repository reference... container xxxxxxx is using its referenced image xxxx,这表示该镜像正在被 某容器 占用,即使该容器已经停止。
解决办法:若容器正在运行,则先停止该容器(docker stop containerxxxxxx),然后删除该容器(docker rm containerxxxxxx),再进行删除镜像(docker image rm imagexxxxxx)
强制删除镜像:docker image rm -f xxx 或 docker rmi -f xxx
删除所有<none>的镜像:docker image prune
同一个项目,每次构建时,若 -t 值相同,之前构建的镜像文件并不会被删除,而是会被 修改为 <none> 但是有一个前提:当前并没有任何容器使用该镜像文件,只有满足这个条件下,该镜像才会被删除
登录镜像仓库:docker login [镜像仓库平台]
若不填写镜像仓库平台,那么默认登录的是 docker 官网镜像仓库(hub.docker.com)
登出镜像仓库:docker logout [镜像仓库平台]
若不填写镜像仓库平台,那么默认登出的是 docker 官网镜像仓库(hub.docker.com)
发布镜像:docker push username/xxx:xx.x
更新镜像:docker commit imagesxxx-id xxx-name:vx.x
上述更新镜像中代码中,imagesxxx-id 为镜像ID,xxx-name 为镜像名,vx.x 为镜像版本(TAG),若不填写vx.x则默认值为 latest
更新镜像中可以添加的参数:
参数 | 对应含义 |
---|---|
-m | 更新描述信息 |
-a | 更新作者 |
从容器中导出镜像:docker commit containerxxx xxx-name:vx.x
注意,这里 commit 后面紧跟着的参数是 容器ID
第1步:登录自己的腾讯云
docker login --username=[QQ号] ccr.ccs.tencentyun.com
或者是:
docker login -u [QQ号] ccr.ccs.tencentyun.com
注意,输入密码时,并不是自己QQ号的密码,而是自己在腾讯云容器服务中设置的容器账户密码
第2步:在自己的腾讯云 > 容器服务 > 我的镜像 > 创建 命名空间
第3步:在自己的腾讯云 > 容器服务 > 我的镜像 > 新建我的镜像
如果我的镜像仓库已存在则忽略 第2 和 第3 步骤。
第4步:在终端,先构建好本地项目对应的镜像
docker build -t mynode:0.1 .
第5步:在终端,执行:
#假设命名空间为 puxiao、镜像仓库为 mynode
docker tag mynode:0.1 ccr.ccs.tencentyun.com/puxiao/mynode:0.1
第6步:在终端,执行:
docker push ccr.ccs.tencentyun.com/puxiao/mynode:0.1
等待上传过程结束后,若看到打印类似以下信息,即表示发布镜像成功:
0.1: digest: sha256:01a8d2cd07a0661c4a47cbe3890563208b141c65bfc1456e442d7ae67987d125 size: 3050
镜像发布成功后,查看本地镜像列表 docker images,除了 mynode,还会新增一个 ccr.ccs.tencentyun.com/puxiao/mynode 的镜像别名,两者的镜像ID是相同的,两者是本地同一个镜像文件的不同引用。
查看容器:docker container ls -a
查看容器另外一种写法:docker ps -x “-x” 仅仅是示意,具体对应的参数请参加下表
上述命令中 -x 为参数:
-x的值 | 对应含义 |
---|---|
不使用参数 | docker ps 显示当前活动中的容器 |
-a | 显示所有容器,包括未运行的(已停止的) |
-f | 根据条件过滤显示的内容 |
--format | 指定返回值的模板文件 |
-l (小写的L) | 显示最近创建的容器 |
-n | 列出最近创建出的 n 个容器 |
--no-trunc | 不截断输出 |
-q | 静默模式,只显示容器编号 |
-s | 显示总的文件大小 |
暂停容器:docker pause xxx
恢复容器:docker unpause xxx
停止容器:docker stop xxx
会向进程发送 stop 信号,内容内程序处理后(停止后),再停止容器
杀死(停止)容器:docker kill xxx
不会像进程发送 stop 信号,直接停止
重新开启容器:docker start xxx
删除容器:docker rm xxx 需要先 stop 容器,否则会删除失败
强制删除容器:docker rm -f xxx 即使容器正在运行,也会先 stop 然后再删除掉
删除所有已停止的容器:docker container prune
在命令操作界面,询问是否删除所有 已停止 的容器时,输入 y ,即可全部删除
查看容器底层信息(配置):docker inspect xxx
查看容器运行状态:docker stats xxx
进入某容器:docker exec -it xxx bash
添加参数 -it 和 bash 后,可以通过 命令方式 针对容器内容进行交互操作
导出容器快照:docker export xxx > /xx/xxx.tar.gz
导入容器快照:docker import /xx/xxx.tar.gz (本地文件资源) 或 docker import https://xxx.com/xxx (网络资源)
查看容器端口:docker port xxx
查看容器内部运行程序(进程):docker top xxx
修改容器名字:docker container rename xxx newname
注意是容器名称不是容器ID
查看镜像的创建历史信息:docker history xxx
查看容器内部文件结构更改:docker diff xxx
容器与宿主机之间拷贝文件:docker cp from-path-xxx to-path-xxx
from-path-xxx 是需要拷贝的文件或目录路径、to-path-xxx 是复制到的路径 宿主机文件系统直接使用常规路径,但是容器路径需要添加容器ID, 举例:docker cp /root/xxx containidxxx:/root/xxx,将 宿主机中的 /root/xxx 拷贝到 容器ID 为 containidxxx 的/root/xxx中。
注意:源文件(或目录)路径 和 目标文件(或目录)路径 结尾处,是否包含 / 会直接影响拷贝结果 如果双方结尾处 都不包含 / ,则对应的含义是:直接对等拷贝 如果 一方结尾处有 /,而另外一方结尾处没有 /,则对应的含义是:拷贝到 xx/目录下面
阻塞运行直到容器停止:docker wait xxx
创建容器但不启动它:docker create imagexxx
语法同 docker run 相同,区别就在于只创建不启动 启动创建的容器:docker start imagexxx
创建容器:docker run imagexxx
注意这里的 imagexxx 为镜像,启动镜像会创建一个运行状态的容器 其他的 xxx 为容器
启动镜像时,可添加的参数:
参数 | 对应含义 |
---|---|
-it | 启动成功后,显示容器命令操作界面 若不添加该参数,容器启动成功后则停留在主机操作界面、若添加则进入容器命令界面 退出容器命令操作界面,执行:exit ,由于未使用参数 -d,因此退出命令操作界面会让容器停止 |
-itd | 启动成功后,不显示容器命令操作界面,以后台形式运行 若想进入容器操作界面,执行:docker exec -it xxx(容器名) bash 退出容器命令操作界面,执行:exit ,由于使用参数 -d,因此退出命令操作界面并不会让容器停止 |
--name xxx | 给该容器起一个名字(ID),若不添加该参数,则 docker 会随机产生一个字符串作为该容器名字(ID) |
-p 9000:8080/tcp | 指定映射端口,9000为宿主机端口,8080为容器内部端口, 默认(不填时)使用协议为tcp,可修改为udp 可以有多组 -p xxxx:xxxx,设置多组端口映射关系 也可以添加上宿主机IP,-p 127.0.0.1:9000:8080 |
-P | 随机映射到宿主机某个端口(不推荐) |
-v /aa/bb:/cc | 映射目录,/aa/bb为宿主机目录,/cc为容器内部目录 通常情况下数据库文件一定是存放在宿主机目录里的,同 -p 一样,也可以设置多组目录映射关系 |
--privileged | 允许容器拥有操作宿主机中映射的目录最高权限(读/写执行) |
--net=xxx | 其中 xxx 为网络模式 1、none:无网络 2、host:直接使用宿主机的网络配置 3、bridge:默认设置,会为每一个容器分配IP,通过虚拟网桥与宿主机通信 4、container:Name_or_ID,容器自己不配置网络,而是和指定容器共享同一个网络配置 |
-d 或 --detach | 在容器中,以后台模式运行 |
默认会先查找并启动本地资源中的镜像文件,如果本地找不到,则会尝试 从 DockerHub 下载该名称的镜像 若想直接从 仓库中下载,则使用 docker pull xxx:xx
启动容器的命令格式为:docker run 参数1 imagename 参数2
其中 参数1
的参数是给 docker 使用的、参数2
的参数是给 镜像文件中应用程序使用的
docker 有一个连接系统,可以将多个容器进项相互连接。
具体操作步骤如下:
第1步:新建一个 docker 网络
docker network create -d bridge test-net
上面代码中将新建的网络命名为 test-net
网络类型 -d 参数,可以设置值有:bridge、overlay
第2步:新建一个容器,并连接到 创建的网络中
docker run -itd --name test1 --network test-net image-name-xxx1
上面代码中,将容器名字命名为 test1,连接到 test-net 网络中,image-name-xxx1 为镜像文件名
第一个连接到该网络的容器,称为 父容器
第3步:再新建其他容器,并连接到 创建的网络中
docker run -itd --name test2 --network test-net image-name-xxx2
容器之间测试连接:可以在容器中使用 ping 命令 去连接另外一个容器,例如在 test1 中执行 ping test2。
如果容器过多,还是推荐使用 Docker Compose 来管理这些容器。
Docker常用命令
名词解释
镜像(image):包含项目运行程序和所需环境的全部文件,为只读文件。
容器(container):在只读的镜像文件之外添加一个写入层,让原本只读的镜像可以与宿主机之间进行数据交互,实现可读可写。
仓库(depository):储存镜像文件的仓库,有官方镜像仓库、腾讯云或阿里云镜像仓库、或自己搭建的仓库。
标签(tag):在 docker 语境下,tag 用来标记镜像文件的版本号或发行标记,tag 的值可以是纯版本号,也可以是其他字符串。
标签(label):在 docker 语境下,label 用来给镜像文件添加一些描述性信息,在构建 镜像文件时 通过 LABEL 来定义。
镜像ID:安装某镜像时,给该镜像添加的唯一标识符 ID,是一个 12 位的哈希码。
镜像名:镜像默认的名字
镜像别名:为某镜像文件添加一个新的引用名称,所以称为镜像别名。注意只是新增一个引用名,并不是真实复制拷贝一份。
基础命令
查看 docker 支持的命令:docker
查看 docker 信息:docker info
查看 docker 当前版本:docker version
启动 docker :systemctl start docker
docker 启动项目:docker run xxx
帮助相关
查看帮助:docker --help
查看 某操作 的帮助:docker xxx -help 例如查看 run 相关帮助 docker run --help、docker logs --help、docker ps --help
输出logs相关
查看 logs 帮助:docker logs --help
查看容器日志:docker logs containerxxx
Docker配置文件(daemon.json)
Linux系统,docker 配置文件路径为:/etc/docker/daemon.json
Windows10,docker 桌面版配置文件路径为:c:\users\your-username\.docker\daemon.json
也可以通过点击系统右下角 docker 图标,右键 > settings > docker engine > 右侧内容里修改
使用DockerHub加速器
使用腾讯云或阿里云的 DockerHub 加速器,可以快速拉取 DockerHub 平台上的容器镜像。
Linux系统内,配置步骤如下:
第1步:创建或修改 /etc/docker/daemon.json 文件,并写入以下内容:
第2步:重新加载 守护进程 配置文件
第3步:重启 docker 服务
第4步:验证是否配置生效
若在打印输出的信息中,找到以下信息即表明配置已生效。
Windows10 Docker 桌面版配置方式:
第1步:windows 系统右下角 docker 图标,点击右键,在出现的菜单中点击 Settings。
第2步:在设置面板左侧中,点击 Docker Engine,在右侧文本内容中,将加速地址 "https://e3je0x5v.mirror.aliyuncs.com" 填入到 registry-mirrors 中。
第3步:点击 Apply & Restart,应用并重启 Docker 服务。
第4步:验证是否配置生效
若在打印输出的信息中,找到以下信息即表明配置已生效。
全局DNS配置
创建或修改 /etc/docker/daemon.json 文件,并写入以下内容:
修改镜像文件存放目录
Linux系统内,配置方法
创建或修改 /etc/docker/daemon.json 文件,并写入以下内容:
Windows10 Docker 桌面版配置方式
特别提醒:以下操作仅仅是修改了 Window10 Docker 虚拟机(WSL 2 ) 里静态文件的存放位置,并不是真正 Win10 本地文件系统中的位置。
第1步:windows 系统右下角 docker 图标,点击右键,在出现的菜单中点击 Settings。
第2步:在设置面板左侧中,点击 Docker Engine,在右侧文本内容中,添加参数:
第3步:点击 Apply & Restart,应用并重启 Docker 服务。
以下才是真正 win10下 配置迁移虚拟目录的方法
补充说明:Win10 中虚拟机采用 WSL 2版本,虚拟机文件系统由 WSL 2 管理,因此想更换 docker 的默认镜像文件存放目录,应该通过 WSL 命令来操作。
假设现在我们希望将 docker 默认在 c盘 的虚拟文件存放目录修改到
d:\docker-data\
,操作步骤如下:第1步:在终端执行以下命令,查看并确认 本机 docker 使用的是 WSL 2
在终端会打印出:
第2步:关闭 docker 桌面版,或者通过 wsl 关闭
第3步:通过 wsl --export 将原有虚拟目录中的数据,压缩并导出到目标目录中
第4步:注销原有虚拟文件目录
第5步:创建新的虚拟文件目录,并导入原有虚拟目录中的数据(第3步中创建的那个压缩文件),并设定 WSL 的版本
至此,虚拟目录迁移完成,以后 docker 下载的镜像文件都将存放在这个目录中的 ext4.vhdx 中。 默认的虚拟目录对应的文件
C:\Users\your-user-name\AppData\Local\Docker\wsl\data\ext4.vhdx
将不存在。第6步:将之前创建的 d:\docker-data\docker-data.tar 文件删除 (直接用文件夹形式打开目录,找到 .tar 删除即可)
第7步:重启 docker
Dockerfile文件相关
Dockerfile 是一个文本文档,用来存放构建镜像文件过程的全部指令。
Dockerfile 中定义的 “上下文” 指:本地文件路径(file path) 或 Git仓库路径(git url)
基础知识和规范
dockerfile 是用来描述如何去构建镜像文件。
dockerfile 文件遵循以下原则:
(注释)设置
通过 # 来定义注释。dockerfile 内容中,使用 # 开头表示该行为注释,注释不允许换行,注释里的内容不会出现在构建过程中
解析器指令
通过 特殊注释形式,即 使用 # 来定义解析器指令。
解析器指令(可选项),用来告知 Docker 在使用(解析) dockerfile 文件时 一些解析规则。
以特殊注释形式出现,遵循以下原则:
解析器之转义符
在 dockerfile 中默认转义符为反斜杠 \,若想修改转义符为反引号 ` ,可通过解析器指令修改:
由于默认的 \ 表示可以转义,如果用在命令行尾部,表示 换行连接符,实际构建过程中,会将下一行内容合并到本行。
什么情况下需要将 默认的 转义符 \ 修改为 ` ?
由于 \ 会转义,那么如果在 windows 系统上写路径时需要格外小心,因为路径中的 \ 很可能与预期执行的不一致。如果把 转义符修改为 `,那么此时 \ 就被解释为普通的字符,\ 不在具有转义功能,更加利于 windows 系统路径上的使用。
ENV(环境变量)设置
通过 ENV 来设置环境变量,内容采用 键值对 形式,其他命令行中可以使用 $xxx 或 ${xxx}来使用该变量。不仅构建过程中其他命令行可以使用,在容器中变量也有效可用。
定义形式有2种:
因此后面的值可以有空格、反斜杠等其他字符
value1采用了双引号包裹字符串,value2没有使用双引号,
value2中可以使用 反斜杠来进行字符串转义
在 ${xxx} 形式中,还可以通过 :- 和 :+ 修改返回(使用)值,遵循以下方式:
ENV 定义环境变量遵循以下原则:
环境变量可以用于以下指令中:
STOPSIGNAL、USER、VOLUME、WORKDIR、ONBUILD
ARG(指令变量)设置
通过 ARG 来定义指令变量,内容采用 键值对 形式,仅在构建过程的 FROM 中可以调用。
与环境变量的区别在于:
FROM(基础镜像)设置
通过 FROM 来定义基础镜像,也就是运行程序所需要的基础环境,有以下几种形式:
RUN(执行命令)设置
通过 RUN 在构建过程中执行 shell 语句。形式有以下2种:
n下原则:
CMD(容器启动执行命令)设置
通过 CMD 提供运行容器的默认方法。可以是执行脚本,或者是 指令参数,若不设置 CMD,则必须指定一个 ENTRYPOINT 指令。
CMD 形式有以下3种:
/bin/sh -c "echo "hello world""
ENTRYPOINT(容器启动执行命令)设置
通过 ENTRYPOINT 设置容器运行启动时执行的命令,类似 CMD,CMD 还可以为 ENTRYPOINT 定义变量作为参数。
ENTRYPOINT 形式为: