Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明
整理不易,如需转发请注明出处
一、Docker常用指令说明
1、Dockerfile常用指令:
FROM: ## 基础镜像,一切从这里开始构建
MAINTSINER ##镜像是谁写的,一些备注信息song<song@cityhouse.cn>
RUN ##镜像构建的时候需要运行的命令
ADD ## 步骤:添加本地内容
WORKDIR ## 镜像的工作目录
VOLUME ##挂载的目录
EXPOSE ## 暴露端口配置,和-p命令一样
CMD ##指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替换
ENTRYPOINT ##指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD ##当构建一个被继承Dockerfile,这个时候就会运行onbuild,触发指令
COPY ##类似ADD,将我们的文件拷贝到镜像中
ENV ##构建的时候设置环境变量
2、dockerfile文件基础知识:
1、每个保留关键字(指令)都是必须是大写字母
2、执行从上到下顺序执行
3、每一个指令都会创建提交一个新的镜像层,并提交
二、创建一个tomcat镜像,基于centos+java
前言:
Docker镜像逐渐成为企业交付的标准,以后发布项目做镜像就需要编写dockerfile文件
使用步骤说明:
Dockerfile:构建文件,定义了一切的步骤,源代码
DockerImages:通过Dockerfile构建生成的镜像最终发布和运行产品
Docker容器:容器是镜像运行起来提供服务
以下是一个完整的tomcat镜像,基于centos+java的构建步骤
1、准备jdk和tomcat安装包
2、编写DockerFile文件
第一行:基于centos镜像
第二行:创作人信息
第三行:一个举例信息拷贝本机一个文件到容器
第四行:解压jdk到容器中/usr/local,ADD可以实现自动解压
第五行:解压tomcat到容器中/usr/local
第六行:安装vim,因为容器中默认是没有的
第七、八行:指定进入容器后中的目录
第九、十行:配置java环境变量
第十一、十二、十三:配置tomcat环境变量
第十四行:tomcat暴露端口
FROM centos
MAINTAINER song<song@cityhouse.cn>
COPY readme.txt /usr/local/src/readme.txt
ADD jdk1.8.0_201.tar.gz /usr/local/
ADD apache-tomcat-8.5.71.tar.gz /usr/local/
RUN yum -y install vim
ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.0_201
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.71
ENV CATALINA_BASE /usr/local/apache-tomcat-8.5.71
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-8.5.71/bin/startup.sh && tail -f /usr/local/apache-tomcat-8.5.71/logs/catalina.out
3、构建镜像(因为是标准的Dockerfile文件名,默认可以自动寻找可以不用加-f Dockerfile )
docker build -f Dockerfile -t mytomcat .
可以清楚的看到分层构建过程,根据dockerfile定义的操作执行
Sending build context to Docker daemon 202.4MB
Step 1/16 : FROM centos
---> 5d0da3dc9764
Step 2/16 : MAINTAINER song<song@cityhouse.cn>
---> Using cache
---> cc0db92fed94
Step 3/16 : COPY readme.txt /usr/local/src/readme.txt
---> 813c129fbc20
Step 4/16 : ADD jdk1.8.0_201.tar.gz /usr/local/
---> f551c2816968
Step 5/16 : ADD apache-tomcat-8.5.71.tar.gz /usr/local/
---> 76a5fd9e99ef
Step 6/16 : RUN yum -y install vim
---> Running in f0d176f8a13b
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------Installed:
gpm-libs-1.20.7-17.el8.x86_64 vim-common-2:8.0.1763-16.el8.x86_64
vim-enhanced-2:8.0.1763-16.el8.x86_64 vim-filesystem-2:8.0.1763-16.el8.noarch
which-2.21-16.el8.x86_64Complete!
Removing intermediate container f0d176f8a13b
---> dfe2a249ef13
Step 7/16 : ENV MYPATH /usr/local
---> Running in ab37e25779fb
Removing intermediate container ab37e25779fb
---> 6e2708131934
Step 8/16 : WORKDIR $MYPATH
---> Running in b7162622e58b
Removing intermediate container b7162622e58b
---> 71fcf02ea27d
Step 9/16 : ENV JAVA_HOME /usr/local/jdk1.8.0_201
---> Running in 2d981b34d95e
Removing intermediate container 2d981b34d95e
---> 43b0500c6ab8
Step 10/16 : ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
---> Running in 7dcb59ef033d
Removing intermediate container 7dcb59ef033d
---> 2732d9f1aa83
Step 11/16 : ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.71
---> Running in db39354f8a94
Removing intermediate container db39354f8a94
---> a7e6079cb819
Step 12/16 : ENV CATALINA_BASE /usr/local/apache-tomcat-8.5.71
---> Running in 8dff2ccb6762
Removing intermediate container 8dff2ccb6762
---> 67c8dc32f385
Step 13/16 : ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_BASE
---> Running in 622fef189ebd
Removing intermediate container 622fef189ebd
---> be9309c9bbfc
Step 14/16 : EXPOSE 8080
---> Running in 13206c9f4392
Removing intermediate container 13206c9f4392
---> cd3dbe75afa8
Step 15/16 : CMD /usr/local/apache-tomcat-8.5.71/bin/startup.sh && tail -f /usr/local/apache-tomcat-8.5.71/logs/catalina.out
---> Running in 4b2c2dd1209d
Removing intermediate container 4b2c2dd1209d
---> dd09b97c114f
Successfully built 154a2ce09d85
Successfully tagged mytomcat:latest
docker images 可以看到本机已经有tomcat这个镜像了
4、启动镜像,发布项目
(1)、我本地有一个tomcat应用可以直接映射本地项目启动
(2)、docker run一个容器,定义端口+本地项目+logs映射
docker run -d -it -p 8888:8080 --name=mytomcat -v /usr/local/tomcat/webapps/ROOT/WEB-INF/:/usr/local/apache-tomcat-8.5.71/webapps/ROOT/WEB-INF/ -v /usr/local/src/tomcatlogs/:/usr/local/apache-tomcat-8.5.71/logs mytomcat
(3)、运行后可以直接的目录就是/usr/local,在我们的dockerfile中有定义WORKDIR
(4)、宿主机日志信息也有了
5、访问测试
curl localhost:8888