Dockerfile是一个包含用于组合镜像的命令的文档
Docker通过读取dockerfile中的指令按步自动生成镜像
docker build -t 机构/镜像名<:tags> Dockerfile目录
Dockerfile使用
FROM tomcat:latest 使用的基准镜像
MAINTAINER 拥有者(说明性信息)
WORKDIR /usr/local/tomcat/webapps 切换到容器工作目录(无则创建)
ADD docker-web ./docker-web 复制当前dockerfile同级目录的项目文件夹,到容器目录下(无则创建)
放于服务器目录
docker build -t 所属机构/镜像名<:tags> Dockerfile目录
docker build -t mycompany/mytest:1.0 /usr/images/firstimage, 可以是绝对路径也可是相对路径
docker build -t mycompany/mytest:1.0 . ,在目录dockerfile目录中,直接.即可
docker run -d -p 8001:8080 mycompany/mytest:1.0 执行。注意tags!不是latest都要加
镜像分层
在镜像制作过程中,会在每一步都生成一个快照或存储点,在重新创建镜像时,如果不改变,将使用缓存。修改改变得地方会重新构建。
Dockerfile基础命令
FROM centos #制作基准镜像
FROM scratch #不需要基准镜像
描述性信息
MAINTAINER 机构名
LABEL version = "1.0"
LABEL description = "abcdefd"
设置工作目录
WORKDIR /usr/local/newdir 无则创建,尽量使用绝对路径
复制文件ADD COPY 是一样的
ADD hello / #复制到根目录
ADD test.tar.gz / #会在根目录自己解压
设置环境常量(全局常量)
ENV JAVA_HOME /usr/local/openjdk8 将JAVA_HOME赋值
RUN ${JAVA_HOME}/bin/java -jar test.jar run运行指令。并且可以指定使用JAVA_HOME,环境常量
暴露容器内部端口给物理机
EXPOSE 8080
Docker执行指令
RUN :在build构建时执行指令(build状态)
ENTRYPOINT:容器启动时执行的指令(run状态)
CMD:容器启动后执行默认的命令或参数(run状态)
#run
RUN yum install -y vim #Shell 命令格式,父进程创建子进程,子进程执行完毕,回到父进程
RUN ["yum","install","-y","vim"] #Exec命令格式,创建一个新的进程,新的进程执行完毕,不会回到原来的进程
ENTRYPOINT一定会执行
ENTRYPOINT(入口点)用于在容器启动时执行命令,Dockerfile中只有最后一个ENTRYPOINT会被执行
ENTRYPOINT ["ps"] #推荐使用Exec格式
CMD不一定会执行。在启动时有附加命令不执行 (-p竟然不算附加命令,不影响CMD执行,-d就算)
CMD用于设置默认执行的命令
如Dockerfile中出现多个CMD,则只有最后一个被执行
如容器启动时附加指令,则CMD被忽略
CMD ["ps" , "-ef"] #推荐使用Exec格式
test
FROM centos
RUN ["echo","building...."] (构建时执行)
ENTRYPOINT ["ps"] (运行时一定执行)
CMD ["-ef"] (不一定执行,但是可以传参,灵活的替换掉原来的参数)
ENTRYPOINT和CMD可以拼接使用