DockerFile
DockerFile
Dockerfile是用来构建docker镜像的文件,是命令行参数脚本.
- 每个保留关键字(指令)都必须大写
- 从上到下的顺序执行
-
注释
- 每一个指令都会创建提交一个新的镜像层并提交
DockerFile的指令
FROM #基础镜像
MAINTAINER #镜像维护者信息
RUN #镜像构建时需要运行的命令
ADD #添加内容
WORKDIR #镜像工作目录
VOLUME #挂载的目录
EXPOSE #暴露端口
CMD #指定容器启动时运行的命令,会被覆盖
ENTRYPOINT #指定容器启动时运行的命令,可以追加命令
ONBUILD #但构建一个被继承DockerFile这个时候就会运行ONBUILD指令
COPY #类似ADD,将文件复制到镜像中
ENV #环境变量
测试
#编写dockerfile文件
vim dockerfile11
FROM centos
MAINTAINER Pinked
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 9000
CMD echo $MYPATH
CMD echo "----end----"
CMD /bin/bash
#通过文件构建镜像 -f 脚本文件 -t 目标镜像名:[TAG] .
docker build -f dockerfile11 -t centos11:1.0 .
#运行容器
docker run -it centos11:1.0
[root@86fdb1d6afeb local]# pwd
/usr/local #默认工作目录从根目录变成了配置的目录,ifconfig和vim也都能使用了
#查看镜像更新历史
docker history centos11:1.0
IMAGE CREATED CREATED BY SIZE COMMENT
bd460f8c21dc 16 minutes ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "/bin… 0B
8e1ed9472722 16 minutes ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "echo… 0B
6c3eb3b29ede 16 minutes ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "echo… 0B
e27d967cb489 16 minutes ago /bin/sh -c #(nop) EXPOSE 9000 0B
3c1b3ddcad4e 16 minutes ago /bin/sh -c yum -y install net-tools 22.8MB
808cbb82e38d 16 minutes ago /bin/sh -c yum -y install vim 57.2MB
d7ddbc981e50 16 minutes ago /bin/sh -c #(nop) WORKDIR /usr/local 0B
1933a4891a97 16 minutes ago /bin/sh -c #(nop) ENV MYPATH=/usr/local 0B
1bedbd48e122 16 minutes ago /bin/sh -c #(nop) MAINTAINER Pinked 0B
0d120b6ccaa8 4 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 4 weeks ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B
<missing> 4 weeks ago /bin/sh -c #(nop) ADD file:538afc0c5c964ce0d… 215MB
制作Tomcat镜像
-
准备好tomcat和jdk安装包
-
编写dockerfile
vim dockerfile ########################## FROM centos MAINTAINER Pinked COPY readme.md /usr/local/readme.md ADD apache-tomcat-9.0.34.tar.gz /usr/local/ ADD jdk-8u261-linux-x64.tar.gz /usr/local/ RUN yum -y install vim ENV MYPATH /usr/local WORKDIR $MYPATH ENV JAVA_HOME /usr/local/jdk1.8.0_261 ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.34 ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.34 ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA/bin EXPOSE 8080 CMD /usr/local/apache-tomcat-9.0.34/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.34/bin/logs/catalina.out
-
测试容器
#如果dockerfile文件名为dockerfile,则build时不需要-f 文件名 docker build -t pinkedtomcat . #启动镜像 docker run -d -p 9000:8080 --name pinkedtomcat -v /home/pinked/build/tomcat/test:/usr/local/apache-tomcat-9.0.34/webapps/test -v /home/pinked/build/tomcat/logs:/usr/local/apache-tomcat-9.0.34/logs pinkedtomcat #进入容器 docker exec -it 529fde7a668be /bin/bash [root@529fde7a668b local]# ls #可以看到ADD名字帮我们进行了解压 apache-tomcat-9.0.34 bin etc games include jdk1.8.0_261 lib lib64 libexec readme.md sbin share src #测试访问 curl localhost:9000 #在挂载的test目录下操作 [root@pinked test]# vim index.jsp ##################################### <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>pinked</title> </head> <body> Hello World!<br/> <% out.println("你的 IP 地址 " + request.getRemoteAddr()); %> %</body> %</html> [root@pinked test]# madir WEB-INF [root@pinked test]# cd WEB-INF/ [root@pinked WEB-INF]# vim web.xml ##################################### <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> </web-app> #测试访问 curl localhost:9000/test/ #在挂载的logs目录下查看tomcat日志 [root@pinked logs]# cat catalina.out