1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
| RUN 命令
语法: RUN <command> 或者 RUN ["executable", "param1", "param2"]
执行一个shell脚本
eg: RUN ["/bin/bash", "-c", "echo hello"]
ENV 命令 语法: ENV <key> <value>
就是指定一个环境变量,会被后续的RUN命令使用,并在容器运行时保持
eg: ENV MYSQL_VERSION 5.6 RUN curl -SL "http://dev.mysql.com/get/Downloads/MySQL-$MYSQL_VERSION/mysql-$MYSQL_VERSION-linux-glibc2.5-x86_64.tar.gz" -o mysql.tar.gz
可以使用$MYSQL_VERSION变量名获取后面的值5.6
COPY 命令 语法: COPY <src> <dest>
复制本地主机的<src>为容器的<dest>,目标路径不存在的时候,会自动创建
ADD 命令 语法: ADD <src> <dest>
复制指定的<src>到容器的<dest>,其中<src>可以是Dockerfile所在目录的一个相对路径(文件或目录);也可以是一个URL;还可以是一个tar文件(自动解压为目录)
EXPOSE 命令 语法: EXPOSE <port> [<port>...]
这条命令告诉容器需要开放的端口号,以提供给互联系统使用,启动容器的时候需要通过-p或者-P来分配这些端口
eg: EXPOSE 80 443 22 8080 eg: docker run -d -p 1022:22 -p 1080:80 -p 1443:443 nginx
USER 命令 语法: USER daemon
指定运行容器时候的用户名或者UID,后续RUN也会使用指定的用户
WORKDIR 命令 语法: WORKDIR /path/to/workdir
由于Dockerfile中不能使用cd命令,所以我们想要在哪个目录下操作的时候就需要切换进来。为后续的RUN,CMD以及ENTRYPOINT指定工作的目录 可以使用多个WORKDIR命令,如果后面为相对路径,则是针对当前目录确定的
WORKDIR /x WORKDIR y WORKDIR z 最后进入的目录就是 /x/y/z /x为根目录 y相对于x目录 z相对于y目录 所以最后就是/x/y/z
CMD 命令 语法: 1. CMD ["executable", "param1", "param2"]使用exec执行,推荐方式。 2. CMD command param1 param2在/bin/sh中执行,提供给需要交互的应用。 3. CMD ["param1", "param2"]提供给ENTRYPOINT的默认参数。
指定启动容器时执行的命令,每一个Dockerfile只能有一条CMD命令,如果有多条的话,只会执行最后一条。如果用户启动容器时指定了运行的命令,则CMD命令会被覆盖掉 ENTRYPOINT 命令 语法: ENTRYPOINT ["executable", "param1", "param2"]或ENTRYPOINT command param1 param2(shell中执行)
配置容器启动以后执行的命令,并且不能被docker run命令提供的参数覆盖。每一个Dockerfile只能有一个ENTRYPOINT命令,当存在多个的时候就只有最后一个会生效
VOLUME 命令 语法: VOLUME ["/data"]
Docker容器是基于镜像创建的,在容器运行的时候可能产生一些数据,比如说运行一个MYSQL的容器,这时候会在容器中写入很多数据,如果我们将容器删除,那么整个数据库里面的数据都会被删除. 有没有一种方式可以将容器中产生的数据,保存到宿主机上,这样即便容器被删除,但是我们的数据还在.这个VOLUME属性就可以帮我们实现. 在我们运行Docker容器时候使用 -v参数可以将VOLUME设置的参数映射到宿主机上 LABEL 命令 语法: LABEL maintainer="SvenDowideit@home.org.au" 还可以设置作者 LABEL Author="张三" 代替MAINTAINER属性,LABEL设置更灵活
注意: 以上命令根据Docker版本不同可能略有差异化,但是核心命令答题没有变化
|