Docker 自定义镜像
1. 认识Dockerfile文件
Dockerfile用于创建 Docker 镜像,Dockerfile 文件是由一行行命令
语句组成,基于这些命令可以构建一个镜像。案例如下:
FROM XXX/jdk:8
MAINTAINER docker_user
ENV JAVA_HOME /usr/local/java
ADD apache-tomcat-8.0.32.tar.gz /usr/local/
RUN mv apache-tomcat-8.0.32 tomcat8
EXPOSE 8080
RUN chmod u+x /usr/local/tomcat8/bin/*.sh
CMD /usr/local/tomcat8/bin/catalina.sh start
2. Dockerfile 基本结构
- 基础镜像信息
- 维护者信息(可有可无)
- 镜像操作指令
- 容器启动时执行信息
3. Dockerfile指令
-
FROM
定制的镜像都是基于此镜像。 格式为 FROM <image> 或 FROM <image>:<tag> Dockerfile文件的第一条指令必须为FROM指令,并且,如果在同一个 Dockerfile中创建多个镜像时,可以使用多个FROM指令(每个镜像一次);
-
MAINTAINER
格式为 MAINTAINER <name> ,指定维护者信息
-
ENV
格式为 ENV <key><value>,指定一个环境变量,会被后续RUN指令 使用,并在容器运行时保持;
-
ADD
格式为 ADD <src><dest>; 复制指定的<src>到容器中的<dest>
-
EXPOSE
格式为 EXPOSE <port> [<port>...] 告诉Docker服务器容器暴漏的端口号,供互联系统使用。在启动容器 时需要通过-p映射端口,Docker主机会自动分配一个端口转发到指定的 端口。
-
RUN
格式为 RUN
RUN指令将在当前镜像基础上执行指定命令,并提交为新的镜像,
当命令较长时可通过 \ 来换行。 -
CMD
指定启动容器时执行的命令,每个Dockerfile只能有一条 CMD 命令。 如果指定了多条命令,只有最后一条会被执行。如果用户启动容器时 指定了运行的命令,则会覆盖掉CMD指定的命令。
4. Dockerfile自定义镜像
4.1 自定义JDK镜像
Dockerfile文件内容为
FROM centos:latest
MAINTAINER Hugo
ADD jdk-8u271-linux-x64.tar.gz /usr/local
ENV JAVA_HOME /usr/local/jdk1.8.0_271
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin
CMD java -version
构建镜像 docker build -t chacker_jjdk1.8.0_271 .
注意 最后的点不能少,表示使用当前目录下的Dockerfile文件
运行容器 docker run -dit 容器ID /bin/bash
注意 一定要使用 -dit 容器ID /bin/bash这样的命令启动,否则容器启动后,检测到没有运行的程序,会自动退出。
4.2 自定义Tomcat镜像
Dockerfile文件内容为
FROM chacker_jdk1.8.0_271
MAINTAINER Hugo
ADD apache-tomcat-8.5.61.tar.gz /usr/local
ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.61
ENV PATH $PATH:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-8.5.61/bin/catalina.sh run
构建镜像 docker build -t chacker_tomcat-8.5.61 .
运行镜像 docker run -d -p 8088:8080 10f5eea482fd