dockerfile指令

yaml规则
三层:
version: '' 版本
service: #服务
web1:
image
build
web2:
#其他

dockerfile
注:指令前可以有空格,编译时空格可以忽略
指令不区分大小,但约定是大写
docker build -f . # -f 可以指定任何位置的dockerfile
e: docker build -f /path/to/a/Dockerfile .
docker build -t . # -t 为构建的镜像打标签,可以打多个标签
e: docker build -t shykes/myapp:1.0.2 -t shykes/myapp:latest .
docker build --no-cache 在下一次构建期间,RUN 指令的缓存不会自动失效。
像 RUN apt-get dist-upgrade -y 这样的指令的缓存将在下一次构建期间重用。
可以使用 --no-cache 标志使 RUN 指令的缓存失效
变量声明:
ENV abc=hello
ENV abc=bye def=$abc
ENV ghi=$abc
abc最后为bye def为hello ghi为bye
.dockeringnore文件:
注释: # comment
/temp 排除根目录下一级以temp开头的文件和目录
//temp* 排除根目录下两级以temp开头的文件和目录
temp? 排除根目录中名称为 temp 的一个字符扩展名的文件和目录。
例如,排除 /tempa 和 /tempb
dockerfile中的指令:
ARG:ARG是FROM之前唯一的一个指令,
e:ARG CODE_VERSION=latest
FROM base:${CODE_VERSION}
FROM:用于指定基础镜像
RUN:RUN有两种形式:shell和exec,shell形式可以使用变量,也可以用/来换行。
shell用法:RUN /bin/bash -c 'source $HOME/.bashrc; echo $HOME'
exec用法:RUN ["/bin/bash", "-c", "echo hello"]
注:因为exec是json格式,因此需要用双引号,而非单引号
CMD:CMD有三种形式
CMD ["executable","param1","param2"] (exec 形式,这是首选形式)
CMD ["param1","param2"] (作为ENTRYPOINT的默认参数)
CMD 命令 param1 param2 (shell 形式)
注:在一个dockerfile中仅能有一个CMD,如有多个cmd那么只有最后一个cmd会生效
ENTRYPOINT:有shell和exec两种形式
e:ENTRYPOINT command param1 param2
ENTRYPOINT ["executable", "param1", "param2"]
注:cmd是覆盖指令,entrypoint是追加指令,且不能修改了
LABEL:为构建的镜像设置label,可以设置多个label
MAINTAINER:作者名
EXPOSE:暴露的端口号,默认暴露的是tcp,
无论 EXPOSE 设置如何,都可以在运行时使用 -p 标志覆盖它们。
e:EXPOSE 80/tcp
EXPOSE 80/udp
ENV:在Dockerfile中使用,在build docker imag的过程中有效,
在image被创建和container启动后作为环境变量依旧也有效,并且可以重写覆盖。
注:ENV和ARG的区别ARG仅在构建镜像中有效
e:
ENV MY_VAR my-value
ENV MY_NAME="John Doe"
ENV MY_DOG=Rex\ The\ Dog
ENV MY_CAT=fluffy
ADD:ADD指令的功能是将主机构建环境(上下文)目录中的文件和目录、
以及一个URL标记的文件 拷贝到镜像中。
有两种形式:
ADD [--chown=:] ...
ADD [--chown=:] ["",... ""]
e:ADD ...
注:
1.可以有多个src
2.dest可以使用绝对路径或者相对路径(WORKDIR)/dest
3.src和dest可以使用?作为单个字符的通配符使用
4.如需复制arr[0].txt则需转义:ADD arr[[]0].txt /mydir/
5.src路径必须在构建的上下文中,因为docker构建的第一步就是将
上下文目录发送到docker的守护进程当中
6.路径中有空格需要使用第二种形式
COPY:
有两种形式:
COPY [--chown=:] ...
COPY [--chown=:] ["",... ""]
注:1.路径中有空格需要使用第二种形式
2.COPY与ADD区别不大,不过ADD比COPY可以从urls远程添加文件到dest
3.ADD还可以解压缩文件到dest
4.ADD和COPY命令都可以满足的情况下推荐使用COPY命令
5.主要两者都是从上下文件下添加文件
6.解压缩文件的时候需用ADD
e:ADD zip.tar /myzip
WORKDIR:WORKDIR 指令为 Dockerfile 中跟随它的任何 RUN、CMD、ENTRYPOINT、
COPY 和 ADD 指令设置工作目录。 如果 WORKDIR 不存在,
即使它没有在任何后续 Dockerfile 指令中使用,它也会被创建。
VOLUME:可以为镜像文件系统创建一个挂载点,随机映射到主机的文件系统目录中
注:volume不能指定主机的目录作为挂载点,挂在到主机的目录是随机的。

docker网络:
bridge:
注:默认的桥接网络是一个
docker创建桥接网络:docker network create my_net
创建容器时使用该网络:docker create --name my-nginx
--network my-net
--publish 8080:80
nginx:latest
创建容器后使用该网络:docker network connect my_net my-nginx
不使用该网络: docker netowrk disconnect my_net my-nginx

posted on 2021-10-29 12:41  clinch  阅读(72)  评论(0编辑  收藏  举报