整理dockerfile编写的常见命令。
什么是dockerfile
用于生成自定义镜像的脚本。
由一系列命令和参数构成的脚本,通过该脚本可以创建出一个新的镜像。
可为整个团队提供一个完全一致的开发环境。在部署时可以实现无缝移植。
常用命令
FROM image_name:tag
定义使用哪个基础镜像,如果基础镜像不存在则会从仓库拉取该镜像。不写tag为latest。MAINTAINER user_name
镜像创建者(目前已不推荐使用)
RUN command
命令,运行shell语句。
使用方式有2种,例如:
RUN yum install -y vim
RUN ["yum","install","-y","vim"]
ENV key value
设置环境变量,或用于指定一个全局参数
ENV JAVA_HOME /root/jdk8/bin:$PATH
EXPOSE
当前容器堆外暴露出的端口号。必须要暴露才能-p做端口映射,可以暴露多个端口。
EXPOSE 3306
EXPOSE 3307
ADD source_dir/file dest_dir/file
将宿主机文件复制到容器内,如果是压缩文件,复制后会自动解压。多用于将程序写入镜像。
ADD a.tar.gz /root 会将a.tar.gz解压后的结果复制到/root
COPY source_dir/file dest_dir/file
同ADD,但是压缩文件不会解压。多用于将程序写入镜像。
COPY a.txt /root/data 将Dockerfile目录下的a.txt文件拷贝到镜像的/root/data文件夹下。
ADD url
下载url的文件。
ADD http://baidu.com/a.txt
ADD http://baidu.com/a.txt /root/baidu
WORKDIR path_dir
命令执行的工作目录,且为进入命令行后的工作目录,如果不存在该目录则会自动创建。默认为/。可以写多个,相对路径会基于上一次路径执行。
WORKDIR /root
VOLUME ["/root","/opt"]
定义容器可以挂载到宿主机的目录
ENTRYPOINT command param1 param2 ...
指定容器启动时执行命令,可以写多个。
ENTRYPOINT ["java", "-jar", "a.jar"]
ARG key vaule
生命周期为构建时的参数。
可以在命令中修改,以构建不同的镜像。
docker build -t test --build-arg testarg=123 .
LABEL key="value" k2="v2" ...
给镜像打标签.
ONBUILD <以上任意参数>
其他基于本镜像的镜像构建时执行的内容
HEALTHCHECK
健康检查
通过Dockerfile构建镜像命令:
docker build -t 镜像名:tag .