dockerfile——构建tomcat镜像

在前面的例子(Docker Tomcat镜像制作)中,我们从下载镜像,启动容器,在容器中输入命令来运行程序,这些命令都是手工一条条往里输入的,无法重复利用,而且效率很低。所以就需要一 种文件或脚本,我们把想执行的操作以命令的方式写入其中,然后让docker读取并分析、执行,那么重复构建、更新将变得很方便,所以Dockerfile就此诞生了

dockerfile常用参数

FROM:指定待扩展的父级镜像(基础镜像)。除了注释以外,在文件开头必须是一个FROM指令,接下来的指令便在这个父级镜像的环境中运行,直到遇到下一个FROM指令。通过添加多个FROM命令,可以在同一个Dockerefile文件中创建多个镜像。

MAINTAINER:声明创建的镜像的作者信息。用户名、邮箱。非必须。

RUN:用来修改镜像的命令,常用来安装库、程序以及配置程序。一条RUN指令执行完毕后,会在当前镜像上创建一个新的镜像层,接下来对的指令会在新的镜像上继续执行。RUN 语句有两种形式:

RUN yum update:是在/bin/sh环境中执行的指令的命令

RUN ["yum", "update"]:直接使用系统调用exec来执行行。

RUN yum update && yum install nginx:使用&&符号将多条命令连接在同一条RUN语句中。

EXPOSE:用来指明容器内进程对外开放的端口,多个端口之间使用空格隔开。运行容器时,通过参数-P(大写)即可将EXPOSE里所指定的端口映射到主机上另外的随机端口,其他容器或主机就可以通过映射后的端口与此容器通信。同时,我们也可以通过-p(小写)参数将Dockerfile中EXPOSE中没有列出的端口设置成公开的。

ADD:向新镜像中添加文件,这个文件可以是一个主机文件,也可以是一个网络文件,也可以使一个文件夹。

第一个参数:源文件(夹)。如果是相对路径,它必须是相对于Dockerfile所在目录的相对路径。如果是URL,会先下载下来,再添加到镜像里去。

第二个参数:目标路径。如果源文件是主机上zip或者tar形式的压缩文件,Docker会先解压缩,然后将文件添加到镜像的指定位置。如果源文件是一个通过URL指定的网络压缩文件,则不会解压。

VOLUME:在镜像里创建一个指定路径(文件或文件夹)的挂载点,这个容器可以来自主机或者其它容器。多个容器可以通过同一个挂载点共享数据,即便其中一个容器已经停止,挂载点也仍热可以访问。

WORKDIR:为接下来执行的指令指定一个新的工作目录,这个目录可以使绝对目录,也可以是相对目录。根据需要,WORKDIR可以被多次指定。当启动一个容器时,最后一条WORKDIR指令所指的目录将作为容器运行的当前工作目录。

ENV:设置容器运行的环境变量。在运行容器的时候,通过-e参数可以修改这个环境变量值,也可以添加新的环境变量:

docker run -e WEBAPP_PORT=8000 -e WEBAPP_HOST=www.example.com ...

CMD:用来设置启动容器时默认运行的命令。

ENTRYPOINT:与CMD类似,也是用来指定容器启动时的默认运行的命令。区别在于:运行容器时添加在镜像之后的参数,对ENTRYPOINT是拼接,CMD是覆盖。

ENTRYPOINT [ "ls", "-l"]

docker run centos ==> docker run centos ls -l

docker run centos -a ==> docker run centos ls -l -a

我们在运行容器的时候可以通过--entrypoint来覆盖Dockerfile中的指定:docker run gutianlangyu/test --entrypoint echo "hello world"
USER:为容器的运行及接下来RUN、CMD、ENTRYPOINT等指令的运行指定用户或UID。

ONBUILD:触发器指令。构建镜像时,Docker的镜像构建器会将所有的ONBUILD指令指定的命令保存到镜像的元数据中,这些命令在当前镜像的构建过程中并不会执行。只有新的镜像使用FROM指令指定父镜像为这个镜像时,便会触发执行。

使用FROM以这个Dockerfile构建出的镜像为父镜像,构建子镜像时:

ONBUILD ADD . /app/src:自动执行ADD . /app/src

1、建目录并将tomcat和jdk拷贝到主机

root@localhost ]# mkdir -p /root/tomcat
[root@localhost ]# cd /root/tomcat
[root@localhost tomcat]# ll
-rw-r--r--. 1 root root  9672485 Mar 25 16:54 apache-tomcat-9.0.16.tar.gz
-rw-r--r--. 1 root root 191817140 Mar 25 16:54 jdk-8u91-linux-x64.tar.gz

2.创建Dockerfile文件

[root@localhost tomcat]# vi Dockerfile
[root@localhost tomcat]# cat Dockerfile 
FROM centos:7
MAINTAINER This is tomcat server
ADD jdk-8u91-linux-x64.tar.gz /root
RUN mv /root/jdk1.8.0_91/ /usr/local/jdk1.8
ENV JAVA_HOME=/usr/local/jdk1.8
ENV CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
ENV PATH=$JAVA_HOME/bin:$PATH
ADD apache-tomcat-9.0.16.tar.gz /root
RUN mv /root/apache-tomcat-9.0.16/ /usr/local/tomcat
RUN ln -s /usr/local/tomcat/bin/shutdown.sh /usr/local/bin/;ln -s /usr/local/tomcat/bin/startup.sh /usr/local/bin/
EXPOSE 8080
ENTRYPOINT /usr/local/tomcat/bin/startup.sh && /bin/bash && tail -f /usr/local/tomcat/logs/catalina.out

[root@localhost tomcat]#

3.构建镜像

[root@localhost tomcat]# docker build -t tomcat:new .
Sending build context to Docker daemon 201.5 MB
Step 1/12 : FROM centos:7
 ---> 9f38484d220f
Step 2/12 : MAINTAINER This is tomcat server
 ---> Running in 6e1d488971ec
 ---> c33491f00d26
Removing intermediate container 6e1d488971ec
Step 3/12 : ADD jdk-8u91-linux-x64.tar.gz /root
 ---> f5be3b73bb88
Removing intermediate container 8877cec63f5d
Step 4/12 : RUN mv /root/jdk1.8.0_91/ /usr/local/jdk1.8
 ---> 28c742126db3
Removing intermediate container 62d6174553af
Step 5/12 : ENV JAVA_HOME=/usr/local/jdk1.8
 ---> Running in 0d5178ed133e
 ---> 98f104211dcb
Removing intermediate container 0d5178ed133e
Step 6/12 : ENV CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
 ---> Running in 077e50425939
 ---> fb9db9ffa43a
Removing intermediate container 077e50425939
Step 7/12 : ENV PATH=$JAVA_HOME/bin:$PATH/root/apache-tomcat-8.5.39/logs/catalina.out
 ---> Running in 3e3b1090c398
 ---> 70ff7873d7cd
 Step 8/12 : ADD apache-tomcat-9.0.16.tar.gz /root
 ---> f5be3b73bb88
Removing intermediate container 8877cec63f5d
Step 9/12 : RUN mv /root/apache-tomcat-9.0.16/ /usr/local/tomcat
 ---> 28c742126db3
Removing intermediate container 62d6174553af
Step 10/12 : RUN ln -s /usr/local/tomcat/bin/shutdown.sh /usr/local/bin/;ln -s /usr/local/tomcat/bin/startup.sh /usr/local/bin/
 ---> Running in 0d5178ed133e
 ---> 98f104211dcb
Removing intermediate container 0d5178ed133e
Step 11/12 : EXPOSE 8080
 ---> Running in 077e50ed939
 ---> fb9db9ffa43a
Removing intermediate container 077e504ed939
Step 11/12 : ENTRYPOINT /usr/local/tomcat/bin/startup.sh && /bin/bash && tail -f /usr/local/tomcat/logs/catalina.out
 ---> Running in 077e50425939
 ---> fb9db9ffa43a
Removing intermediate container 077e50425939
Successfully built 70ff7873d7cd
[root@localhost software]#

-t选择指定生成镜像的用户名,仓库名和tag

–rm=true指定在生成镜像过程中删除中间产生的临时容器。

4、运行镜像

[root@localhost tomcat]# docker run -d -P tomcat:new

-P随机指定主机端口与容器8080端口进行绑定

-d 指定容器运行后与当前tty分离,后台运行

通过 http://宿主机IP:32771,即可看见我们熟悉的tomcat首页了
dockerfile——构建tomcat镜像_第1张图片

你可能感兴趣的:(docker)