- Dockerfile常用命令
- FROM
- LABEL
- RUN
- ADD
- COPY
- EXPOSE
- ENV
- CMD
- ENTRYPOINT
- WORKDIR
- VOLUME
- 构建镜像
- 创建目录
- 编写 Dockerfile 文件
- 构建镜像
FROM: FROM centos:7
指明构建的新镜像基于的镜像,没有选择tag,默认为latest。
LABELLABEL= = = ... LABEL maintainer="oxyay"
为镜像指定标签。可以使用 LABEL 来指定镜像作者。
RUNRUNRUN mkdir -p /usr/local/java
构建镜像时运行的Shell命令
ADDADD... ADD jdk-8u162-linux-x64.tar.gz /usr/local/java
拷贝文件或目录到镜像中。src可以是一个本地文件或者是一个本地压缩文件,压缩文件会自动解压。还可以是一个url,如果把src写成一个url,那么ADD就类似于weget命令,然后自动下载和解压。
COPYCOPYY...
拷贝文件或目录到镜像中。用法跟ADD一样,但不支持自动下载和解压。
COPY jdk-8u162-linux-x64.tar.gz /usr/local/javaEXPOSE
EXPOSE[ / ...]
暴露容器运行时的监听端口给外部,可以指定端口是TCP还是UDP,未指定协议,默认为TCP。
EXPOSE 80 433 8080/tcpENV
# 添加单个 ENV# 添加多个 ENV ...
设置容器内环境变量
CMDCMD ["executable","param1","param2"],比如:CMD ["/usr/local/tomcat/bin/catalina.sh","run"] CMD ["param1","param2"],比如:CMD ["ehco", "$JAVA_HOME"] CMD command and param1 param2
启动容器时执行的Shell命令。在Dockerfile中只能有一条CMD指令。如果设置了多条CMD,只有最后一条CMD会生效。
CMD echo $JAVA_HOME
如果创建容器的时候指定了命令,则CMD命令会被体态。
ENTRYPOINTENTRYPOINT ["executable","param1","param2"] ,比如:ENTRYPOINT ["/usr/local/tomcat/bin/catalina.sh","run"] ENTRYPOINT command and param1 param2,比如:ENTRYPOINT ehco $JAVA_HOME
ENTRYPOINT ehco $JAVA_HOME
启动容器时执行的Shell命令,同CMD类似,不会被docker run 命令指定的参数覆盖。只有最后一条ENTRYPOINT指令会生效。
WORKDIRWORKDIR /path/to/workdir
为RUN、CMD、ENTRYPOINT以及COPY和AND设置工作目录。
WORKDIR /usr/localVOLUME
指定容器挂载点到宿主机生成的目录或其他容器。
# 容器的 /var/lib/mysql 目录会在运行时自动挂载为匿名卷,匿名卷在宿主机的 /var/lib/docker/volumes 目录下 VOLUME ["/var/lib/mysql"]
一般不会再 Dockerfile 中用到,更常见的还是在 docker run 的时候通过-v指定数据卷。
构建镜像通过基础镜像 centos:7,在该镜像中安装 jdk 和 tomcat 以后将其制作为一个新的镜像 mycentos:7。
创建目录mkdir -p /usr/local/dockerfile编写 Dockerfile 文件
vi Dockerfile
Dockerfile文件内容如下:
# 指明构建的新镜像是来自于 centos:7 基础镜像
FROM centos:7
# 镜像标签
LABEL maintainer="oxyay"
# 设置工作目录
WORKDIR /usr/local
# 创建指定目录
RUN mkdir -p /usr/local/java && mkdir -p /usr/local/tomcat
# 拷贝文件到镜像中并解压
ADD jdk-8u162-linux-x64.tar.gz /usr/local/java
ADD apache-tomcat-9.0.54.tar.gz /usr/local/tomcat
# 暴露容器运行时的 8080 监听端口给外部
EXPOSE 8080
# 设置容器内 JAVA_HOME 环境变量
ENV JAVA_HOME=/usr/local/java/jdk1.8.0_162
ENV JRE_HOME=${JAVA_HOME}/jre
ENV CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
ENV PATH=${JAVA_HOME}/bin:$PATH
# 启动容器时启动 tomcat
CMD ["/usr/local/tomcat/apache-tomcat-9.0.54/bin/catalina.sh","run"]
构建镜像
[root@localhost dockerfile]# docker build -f /usr/local/dockerfile/Dockerfile -t mycentos:7 /usr/local/dockerfile/
Sending build context to Docker daemon 201.4MB
Step 1/12 : FROM centos:7
---> eeb6ee3f44bd
Step 2/12 : LABEL maintainer="oxyay"
---> Running in e7cec4698bff
Removing intermediate container e7cec4698bff
---> e1eecf731a0b
Step 3/12 : WORKDIR /usr/local
---> Running in 0af6e430f46a
Removing intermediate container 0af6e430f46a
---> 41ee046673cb
Step 4/12 : RUN mkdir -p /usr/local/java && mkdir -p /usr/local/tomcat
---> Running in f0fb25dd9b1c
Removing intermediate container f0fb25dd9b1c
---> 5f1542aa8abf
Step 5/12 : ADD jdk-8u162-linux-x64.tar.gz /usr/local/java
---> 77d85fed4092
Step 6/12 : ADD apache-tomcat-9.0.54.tar.gz /usr/local/tomcat
---> a778f1fe0d06
Step 7/12 : EXPOSE 8080
---> Running in 261e7a4080aa
Removing intermediate container 261e7a4080aa
---> 44cf6c8f46c8
Step 8/12 : ENV JAVA_HOME=/usr/local/java/jdk1.8.0_162
---> Running in 322c7dde0caf
Removing intermediate container 322c7dde0caf
---> 982c59a0d8ba
Step 9/12 : ENV JRE_HOME=${JAVA_HOME}/jre
---> Running in eacb7f9a113b
Removing intermediate container eacb7f9a113b
---> 4d25d5c79ec5
Step 10/12 : ENV CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
---> Running in d2e247517ac5
Removing intermediate container d2e247517ac5
---> f0d0b28b10d7
Step 11/12 : ENV PATH=${JAVA_HOME}/bin:$PATH
---> Running in 7d27d231ce3c
Removing intermediate container 7d27d231ce3c
---> aae18378a786
Step 12/12 : CMD ["/usr/local/tomcat/apache-tomcat-9.0.54/bin/catalina.sh","run"]
---> Running in f0a7a4e1287e
Removing intermediate container f0a7a4e1287e
---> 1e7e950f883d
Successfully built 1e7e950f883d
Successfully tagged mycentos:7



