使用Dockerfile 创建镜像
一、.Dockerfile 结构
Dockerfile 由一行行命令语句组成,支持#开头的注释。Dockerfile的内容分为四部分:基础镜像信息、维护者信息、镜像操作指令、容器启动时执行的指令。
下面是一个基于centos创建jdk镜像的Dockerfile
# 第一行指定基于的基础镜像
FROM centos
#维护者信息
MAINTAINER test<[email protected].com>
# 将文件添加到容器目录
ADD server-jre-8u241-linux-x64.tar.gz /opt/
# 镜像操作的指令
RUN chmod +x /opt/jdk1.8.0_172
#环境变量
ENV JAVA_HOME=/opt/jdk1.8.0_172
ENV PATH="$JAVA_HOME/bin:${PATH}
#
CMD echo " jdk container boot success "
二、Dockerfile 中的指令
指令包括FROM、MAINTAINER、RUN、CMD、EXPOSE、ENV、ADD、COPY、ENTRYPOINT、VOLUME、USER、WORKDIR、ONBUILD
1.FROM
格式为: FROM <image> 或 FROM <image>: <tag>
Dockerfile中第一条指令必须为FROM指令。如果在同一个Dockerfile文件中创建多个镜像时,可以使用多个FROM指令
2. MAINTAINER
格式为:MAINTAINER <name>,指定维护者信息
3.RUN
格式为: RUN <command> 或 RUN ["executable","param1","param2"]
RUN command将在shell终端中运行命令,即/bin/sh-c,RUN [“executable”,“param1”,“param2”] 使用exec 执行。指定使用其他终端可以通过第二种方式实现。例:RUN[“/bin/bash”,"-c",“echo test”]
每条RUN 指令将在当前镜像基础上执行指定命令,并提交为新的镜像。为了减少镜像文件的大小,可以将要执行的命令都写在同一个RUN中,使用\来换行。
4.CMD
格式有3种,分别为:
CMD ["executable","param1","param2"] 使用exec执行
CMD command param1 param2 在/bin/sh 中执行,提供给需要交互的应用
CMD ["param1","param2"] 提供给ENTRYPOINT 的默认参数。
每个Dockerfile文件只能有一条CMD命令,如果有多条则只执行最后一条。如果启动容器的时候指定了运行的命令,则会覆盖CMD指定的命令。
5.EXPOSE
格式为:EXPOSE <port> <port> <port>
指定容器要暴露的端口,供互联系统使用。
6.ENV
格式为:ENV <key> <value>
用来指定环境变量,会被RUN指令使用,并在容器运行时保持。
7.ADD
格式为:ADD <src> <dest>
将复制指定的src到容器中的dest,src可以是Dockerfile所在目录的一个相对路径(文件或目录),也可以是一个URL或tar(会自动解压tar)
8.COPY
格式为:COPY <src> <dest>
复制本地主机的src(Dockerfile所在目录的相对路径,文件或目录) 到容器中的dest,目标不存在时会自动创建。如果使用本地目录为源目录时推荐使用COPY
9.ENTRYPOINT
格式有两种:
ENTRYPOINT ["executable","param1","param2"]
ENTRYPOINT command param1 param2 (shell 中执行)
配置容器启动后执行的命令,并且不可被docker run提供的参数覆盖。每个Dockerfile中只能有一个ENTRYPOINT,当指定多个ENTRYPOINT,只有最后一个生效。
10.VOLUME
格式为:VOLUME ["/data"]
创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据库。
11.USER
格式为:USER daemon
指定运行容器是的用户名或UID,后续的RUN也会使用指定用户。当服务不需要管理员权限是,可以通过该指令指定运行用户,并且可以在之前创建所需要的用户,例:RUN groupadd-r postgres&&useradd-r-g postgres postgres
12.WORKDIR
格式为:WORKDIR /path/to/workdir
位后续的RUN、CMD、ENTRYPOINT指令配置工作目录,可以使用多个WORKDIR指令,后续的命令付过参数是相对路径,则会基于之前命令指定的路径。例:
WORKDIR test
WORKDIR docker
WORKDIR images
RUN pwd
则最终路径为/test/docker/images
13.ONBUILD
格式为:ONBUILD [INSTRUCTION]
配置当所创建的镜像为其他新创建镜像的基础镜像时执行的操作指令。
三、使用docker build命令创建镜像
格式:docker build [选项] <路径>(Dockerfile 文件所在的路径)
docker build -t jdk /home/docker/images/jdk