利用Dockerfile制作docker镜像

大家好,我是Linux运维工程师 Linke 。技术过硬,很少挖坑~

先来列一下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

 

你可能感兴趣的:(docker容器,Dockerfile常用命令,制作docker镜像,jdk镜像制作,tomcat镜像制作)