Dockerfile 创建和指令
如果需要能够正常build,规定文件名必须要为Dockerfile
FROM
FROM可以指定基础镜像,需要作为Dockerfile的第一个命令。基础镜像作为后续命令的基础,例如ubuntu,java等镜像。当什么基础都不需要时,可以使用scratch作为基础镜像,这是一个空白的镜像
RUN
在基础镜像上,当我们需要搭建适合自己的环境时,就可以使用RUN命令来运行shell命令
例如
1
2
3
FROM ubuntu
RUN apt-get update
RUN apt-get install -y vim wget
COPY
当镜像中依赖外部文件时,就需要把外部文件复制到镜像内。这是就可以使用COPY命令,把上下文环境中的文件拷贝到工作目录中。
ADD
ADD命令相当于UNZIP + COPY命令,若需要解压的情况可以使用,但若是直接的复制,可以直接使用COPY命令。
WORKDIR
当我们需要把文件拷贝到镜像中的指定目录下时,我们就需要使用WORKDIR来切换工作目录,当我们想进入对应的复制之后的文件夹下时,也需要使用WORKDIR来切换工作目录。当然,我们也可以使用CMD cd /home
这种切换只对当前COMMIT有效,也就是当前命令,后续的命令工作目录仍为之前的工作目录。
CMD
作为Dockerfile的最后一个命令,将会在容器运行时启动。例如
启动容器,运行java服务。
1
CMD ["java", "-jar", "app.jar"]
构建镜像
1
docker build -t jiangker/jekyllbook:1.0 .
此目录为Dockerfile所在的目录,当需要把文件复制到镜像里面的文件需要在这个工作目录下,不可以采用../
或/home
的形式去查找文件。最后的"."
就是来指定构建镜像的工作路径。
技巧
ENV和 RUN export
由于Dockerfile中每提交一条指令,都会基于已有的中间容器创建一个新的容器,而RUN export ROOT_DIR=”/your_root/dir”这样的命令只在运行该指令时拥有ROOT_DIR变量,到下一个中间容器就不存在了 ENV指令维护的变量会存在于所有的中间容器中 但是! 划重点:这些环境变量都会在真正后来docker run启动的容器中消失!例如配置PATH操作就不可以用上述命令进行
那么Dockerfile配置环境
- Linux中很多环境变量配置文件,bashrc,bash_profile等等。可以在Dokcerfile中写 RUN echo xx » ~/.bashrc的方式来追加需要添加的环境变量路径
- echo的字符串中若存在双引号,则需要增加反斜杠
1
RUN echo \"export PATH='$HOME/gems/bin:$PATH'\" >> ~/.bashrc
- 需要使用WORKDIR切换工作目录,cd切换只对单行有用,所以也可以使用&&连接命令
- 使配置的环境生效使用,直接使用RUN source /dir/bashrc会报source not found,需要调整,使用RUN /bin/bash -c “source /dir/bashrc”