使用Dockerfile 能够构建一个自定义镜像。通常情况下是将自己的应用打包成镜像,在容器中使用。

Dockerfile 命令

命令 作用
FROM 表示当前镜像是基于那个镜像
MAINTAINER 镜像的维护者和邮箱
RUN 构建镜像的时候需要运行的命令
EXPOSE 容器内对外暴露的端口
WORKDIR 指定创建容器后默认进入容器的工作目录
ENV 用来构建镜像过程中设置的环境变量 key=value
ADD 将宿主机下的文件拷贝到容器中,且会自动处理url和压缩包
COPY 类似于ADD,将从构建的Dockerfile目录中复制镜像的目录中
VOLUME 容器数据卷
CMD 制定一个容器运行的命令,如果有多个命令,只执行最后一个。会被docker run 后面的命令替代
ENTRYPOINT 指定一个容器启动时要运行的命令和参数,和CMD一样

1、FROM 命令语法

  1. FROM <image>
  2. FROM <image>[:<tag>] # 设置镜像的版本,不写为最新版本 latest

2、RUN 命令

  1. # RUN 后面直接写shell命令, RUN 的命令是在构建镜像中执行。
  2. RUN echo hello word
  3. RUN ["yum","install","-y","vim"]

3、EXPOSR 命令

  1. # 针对一些需要端口的服务
  2. EXPOSE 6379

4、WORKDIR 命令

  1. # 用来为Dockerfile中的任何 RUN/CMD/ENTRYPOINT/CPOY/ADD/ 指令设置工作目录,如果WORKDIR 不存在,即使他没有在后续得命令中被使用,也将会被创建。
  2. WORKDIR /opt/myserver
  3. WORKDIR /aaa
  4. WORKDIR bb
  5. # WORKDIR 可以使用多次,如果使用的是相对命令 ,会与上一次的路径相对
  6. # 如上面的命令:docker会创建/opt/myserve,也会创建/aaa/bb,在进入容器内会进入最后的WORKDIR的路径下即:/aaa/bb

5、ADD 命令

  1. # 用来从Dockerfile的当前目录中复制文件,目录,或者下载URL,并将他们添加到位于容器内指定的文件中
  2. ADD bb.txt /aaa/bb
  3. ADD https://tc.chaizz.com/497261de494511ec9d7c5254006b8f1d.png /aaa/bb
  4. # 可以将文件复制到容器中,也可以通过URL下载文件到容器中
  5. # 将 apache-tomcat-8.5.73-src.tar.gz 解压到 /aaa/bb
  6. ADD apache-tomcat-8.5.73-src.tar.gz /aaa/bb
  7. # 将apache-tomcat-8.5.73-src 改名 为tomcat
  8. RUN mv apache-tomcat-8.5.73-src tomcat
  9. # 将工作目录改为 tomcat
  10. WORKDIR tomcat

6、COPY 命令

  1. # 将文件复制到指定容器内部的目录
  2. # COPY a.txt /aaa/bb

7、volume 目录

  1. # 允许在容器运行的时候将目录挂载到宿主机的目录上
  2. VOLUME /aaa/bb/tomcat/webapps

8、ENV 命令

  1. # 设置当前容器的环境变量
  2. ENV BASE_DIR

9、ENTRYPOINT 命令

  1. # 容器运行的命令和参数 ENTRYPOINT的命令是在容器构建完成之后启动的时候执行,要覆盖ENTRYPOINT 他的指令 需要在docker run 的时候加上 --entrypoint ls
  2. ENTRYPOINT ls $BASE_DIR/tomcat
  3. # 或者
  4. ENTRYPOINT ["ls", "$BASE_DIR/tomcat"]

10、CMD 命令

  1. # 只执行最后一个,如果在 docker run 之后指定了命令(不需要参数) 会将CMD的指令覆盖,不再执行CMD的指令
  2. CMD ls $BASR_DIR
  3. # 或者
  4. CMD ["ls", "$BASR_DIR"]
  5. # 通常 CMD 和 ENTRYPOINT 结合使用 :ENTRYPOINT作为固定的命令或者参数, CMD 作为可变的参数,附加在ENTRYPOINT命令之后。 然后ENTRYPOINT + CMD 结合为一条命令。 即可实现在docker run 的时候可以指定参数运行同一个容器