先来列一下Dockerfile 常用指令
指定使用的基础镜像
FROM ,例:
FROM centos7:latest
制作人信息(可写可不写)
MAINTAINER ,例:
MAINTAINER
指定镜像中默认的环境变量
ENV ,例如:
ENV JAVA_HOME /usr/lib/jdk1.8.0_221
向镜像中加入需要的文件(此命令会自动解压压缩包)
ADD ,例如:
ADD jdk-8u221-linux-x64.tar.gz /usr/lib/
向镜像中加入需要的文件(此命令不自动解压)
COPY ,例如:
COPY webmanager.war /opt/tomcat/webapps/
编译镜像时要执行的命令,例如删除文件、安装依赖
RUN ,例如:
RUN rm -rf /usr/lib/jdk1.8.0_152 \
useradd test \
yum install -y net-tools telnet
指定容器启动后的工作目录
WORKDIR ,例如:
WORKDIR /opt/tomcat
声明容器启动后的端口(不加也能将端口映射出来)
EXPOSE ,例如:
EXPOSE 80 443
指定容器启动时执行的 shell 命令
CMD ,例如:
CMD ["/opt/tomcat/bin/catalina.sh","run"]
指定容器启动时执行的 shell 命令,和 CMD 命令一样 ,但是此命令执行的启动程序不会被 docker run 时,这些命令行参数会被当作参数传递给ENTRYPOINT指定指定的程序
ENTRYPOINT ,例如:
["/usr/local/nginx/sbin/nginx","-g","daemon off;"]
编译镜像命令,编译一个 registry.xxx.com/common/jdk:v1.8.0_221 的镜像 。(如果 dockerfile 的文件名是 “Dockerfile” 的话,直接使用下面命令):
docker build -t registry.xxx.com/common/jdk:v1.8.0_221 .
如果 dockerfile 文件是其他的名字的话,如 “Dockerfile.jdk1.8.0_221” ,后边一定要带那个点
docker build -t registry.xxx.com/common/jdk:v1.8.0_221 -f Dockerfile.1.8.0_221 .
--------------------------------------------------------------------------------
下面贴一些我打过的镜像:
Nginx镜像制作方式
由于官网下载的 Nginx 镜像linux 命令太少,有问题不好排查,于是自己基于 centos7 镜像打了一个源码编译安装的 nginx 镜像 ,由于在编译镜像内执行 编译 nginx 太麻烦,我直接在外面编译好后,压缩了以后直接 复制到镜像中,简单粗暴还好用。
FROM registry.xxx.cn/common/centos:20180815
RUN yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel
ADD nginx.1.16.1.tgz /usr/local/
WORKDIR /usr/local/nginx
RUN useradd nginx
ENV NGINX_HOME /usr/local/nginx
ENV PATH $PATH:$NGINX_HOME/sbin
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]
打好后的镜像大小
jdk镜像制作方式
网上下载的 JDK 镜像有的设置都没有 yum 命令,于是自己做一个,还是基于 centos7 镜像
FROM registry.xxx.cn/common/centos7:latest
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone \
yum install -y net-tools bind-utils telnet
ADD jdk-8u221-linux-x64.tar.gz /usr/lib/
ENV JAVA_HOME /usr/lib/jdk1.8.0_221
ENV JRE_HOME=${JAVA_HOME}/jre
ENV CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin
ENV JAVA_OPTS="$JAVA_OPTS -Duser.timezone=GMT+08"
制作后的镜像大小
tomcat镜像
使用上面打好的 jdk 镜像做基础镜像,将 tomcat 打入 ,首先将自己环境需要的 tomcat 清理干净,然后打包压缩
FROM registry.xxx.cn/common/app_jdk:1.8.0_8u221
ADD tomcat.tgz /opt/
CMD ["/opt/tomcat/bin/catalina.sh","run"]
下图是我打的 tomcat9.0.24 和 tomcat8.0.52 版本的镜像
然后以此镜像为基础镜像,将自己的 war 包打到此镜像内
elasticsearch镜像
将 elasticsearch 包下载下来制作
FROM registry.xxx.cn/common/app_jdk:1.8.152
ADD elasticsearch-5.5.3.tar.gz /data/
RUN useradd elasticsearch
RUN chown -R elasticsearch.elasticsearch /data/elasticsearch-5.5.3
USER elasticsearch
CMD sh /data/elasticsearch-5.5.3/bin/elasticsearch