dockerfile 构建镜像
相当于自己创建容器,在里面运行自己所需要的应用,通过复制自己应用到容器里面,然后通过指定命令去运行,最后在宿主机通过docker build 创建镜像,docker run启动容器,就可以启动容器里面所要运行的命令
组成部分
FROM 基础镜像信息
MAINTAINER 维护者信息
RUN、COPY、ADD、EXPOSE、WORKDIR、ONBUILD、USER、VOLUME等 镜像操作指令
CMD、ENTRYPOINT 容器启动时执行指令
如果是做Java程序的话一般都会以jdk位基础镜像
新建一个文件 vim Dockerfile
FROM java:8-jre 前提这个镜像一定存在与你的docker images 里面 MAINTAINER steven EXPOSE 8088 暴露镜像的端口供主机做映射 ADD ./jar/admin-2.0.0.jar /app/ 把本地你自己要执行的jar包复制到容器的/app目录下 CMD['java -jar /app/admin-2.0.0.jar']
保存
然后在外面执行命令docker build --tag myjar:1.1 . (这里有个英文的句号,表示当前路径下创建镜像 ,--tag镜像的名字及标签)
最后通过docker run 启动容器所需要的镜像即可。
其他命令
RUN
在新镜像内部执行的命令,比如安装一些软件、配置一些基础环境,可使用\来换行
如:
RUN echo 'hello docker!' \
> /usr/local/file.txt
EXPOSE
暴露镜像的端口供主机做映射,启动镜像时,使用-P参数来讲镜像端口与宿主机的随机端口做映射。使用方式(可指定多个):
EXPOSE 8080
EXPOSE 8081
WORKDIR
在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录。如
WORKDIR /usr/local
WORKDIR webservice
RUN echo 'hello docker' > text.txt
CMD
容器启动时需要执行的命令,如:
CMD /bin/bash
同样可以使用exec语法,如
CMD ["/bin/bash"]
当有多个CMD的时候,只有最后一个生效。
ENTRYPOINT
作用和用法和CMD一模一样
区别
- CMD的命令会被 docker run 的命令覆盖而ENTRYPOINT不会·