Docker之dockerfile

一、什么是DockerFile

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明,有了Dockerfile,就可以很轻松通过docker bulid构建出自己的一个镜像。


二、DockerFile基础知识

  1. 每个保留关键字(指令)都是必须大写字母
  2. 执行从上到下顺序执行
  3. # 表示注释
  4. 每个指令都会创建提交一个新的镜像层,并提交!

常用命令

FROM            # 基础镜像,一切从这里开始构建
MAINTAINER      # 镜像是谁写的, 姓名+邮箱
RUN             # 镜像构建的时候需要运行的命令
ADD             # 步骤, tomcat镜像, 这个tomcat压缩包!添加内容
WORKDIR         # 镜像的工作目录
VOLUME          # 挂载的目录
EXPOSE          # 保留端口配置
CMD             # 指定这个容器启动的时候要运行的命令,只有最后一个会生效可被替代
ENTRYPOINT      # 指定这个容器启动的时候要运行的命令, 可以追加命令

ONBUILD  #是一个特殊的指令,它后面跟的是其它指令,比如 RUN, COPY 等,而这些指令,在当前镜像构建时并不会被执行。只有当以当前镜像为基础镜像,去构建下一级镜像的时候才会被执行。Dockerfile 中的其它指令都是为了定制当前镜像而准备的,唯有 ONBUILD 是为了帮助别人定制自己而准备的。
COPY            # 类似ADD, 将我们文件拷贝到镜像中
ENV             # 构建的时候设置环境变量!

CMD和ENTRYPOINT区别


三、构建自己的镜像

1、构建一个自己的centos,创建一个Dockerfile(touch Dockerfile)

#基础镜像
FROM centos:7
#作者信息 后续MAINTAINER废除建议使用label
MAINTAINER dotaer<xxx@qq.com>
 
#设置环境变量
ENV MYPATH /usr/local
#镜像的工作目录
WORKDIR $MYPATH     

#镜像构建时候下载vi(官方镜像中没有vi)
RUN yum -y install vi
#镜像构建时候下载net-tools
RUN yum -y install net-tools

#暴露的端口 
EXPOSE 80

#docker 构建完成打印的输出
RUN echo "镜像构建完成"
RUN echo $MYPATH

# .表示当前目录 

docker build -t mycentos . 

注意注释不要放在命令的末尾,如果把注释放在 EXPOSE 80 后面 会报Invalid containerPort错误

 2、构建一个自己的tomcat(踩坑会在末尾记录)

#1、基础镜像

FROM centos:7

#2、作者信息
MAINTAINER dotaer<xxxx@qq.com>
 #3、拷贝文件到容器/usr/local/
COPY readme.txt /usr/local/readme.txt
 #4、将压缩文件 ,解压并添加到容器/usr/local/目录下
ADD apache-tomcat-9.0.63.tar.gz /usr/local/
ADD jdk1.8.0_201.tar.gz   /usr/local/
 #5、构建时容器下载vim
RUN yum -y install vim
 #6、设置MYPATH环境变量,可通过env查看当前系统环境变量
ENV MYPATH /usr/local

#7、容器默认进入目录
WORKDIR $MYPATH
 #7、设置JAVA和Tomcat环境变量
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-9.0.63
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.63
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
 #8、暴露端口号
EXPOSE 8080
 #9、容器运行后执行的命令(启动tomcat,并且打开日志文件)
CMD /usr/local/apache-tomcat-9.0.63/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.63/logs/catalina.out

 (1)构建

# .表示当前目录,如果文件名为官方的Dockerfile,build的时候就无需通过-f指定Dockerfile的文件名

docker build -t mytomcat . 

(2)运行

# -v会自动创建不存在的目录

docker run -d -p 8080:8080 --name mytomcat01 -v /home/dotaer/build/tomcat/test:/usr/local/apache-tomcat-9.0.63/webapps/test -v /home/dotaer/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.63/logs mytomcat 

运行前创建index.jsp和/WEB-INF/web.xml文件,/home/dotaer/build/tomcat/test由于启动的时候会挂载到webapps目录下,所以我们在宿主机添加这些文件即可。

index.jsp

 <%@ page language="java" contentType="text/html; charset=UTF-8"
                pageEncoding="UTF-8"%>
                <!DOCTYPE html>
                <html>
                        <head>
                                <meta charset="utf-8">
                                <title>hello. xiaofan</title>
                        </head>
                        <body>
                                Hello World!<br/>
                                <%
                                System.out.println("-----my test web logs------");
                                %>
                                </body>
                        </html> 

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
    xmlns="http://java.sun.com/xml/ns/j2ee" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
                    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
                            
            </web-app>
 

(3)测试

#宿主机执行

curl localhost:8080/test/ 

即可看到Hello World 

打开/home/dotaer/build/tomcat/tomcatlogs/catalina.out文件即可看到日志打印
 

踩坑记录:

1、编写Dockerfile时候,需From centos:7,因为centos 8 linux已经停止了维护,镜像中移除了该源

2、 通过docker run -d ....运行过后,通过docker ps发现容器没有启动起来,这里应该是容器启动报错了,先通过-it启动查看报错,再具体解决报错。( 狂神视频中,tail -F /usr/local/apache-tomcat-9.0.63/bin/logs/catalina.out,有个bin目录,启动后发现文件找不到,应该是没有这个bin目录的,不知道他怎么启动的。。)

3、web.xml文件中首行不能有空格

【狂神说Java】Docker最新超详细版教程通俗易懂_哔哩哔哩_bilibili

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值