Dockerfile指令及案例

1.Dockerfile简介

Docker可以通过阅读Docker的指令来自动构建映像 Dockerfile。A Dockerfile是一个文本文档,其中包含用户可以在命令行上调用以组装图像的所有命令。使用docker build 用户可以创建自动构建,该构建连续执行多个命令行指令。

2. Dockerfile的基本结构

Dockerfile 由一行行命令语句组成,并且支持以 # 开头的注释行。
一般的,Dockerfile 分为四部分:基础镜像信息维护者信息镜像操作指令容器启动时执行指令

3. Dockerfile关键字
命令描述
FROM基础镜像,当前新镜像是基于哪个镜像的
MAINTAINER镜像维护者的名字和邮箱地址
RUN容器构建时需要的命令
EXPOSE当前容器对外暴露的接口
WORKDIR指定创建容器后,终端默认登录进来的工作目录
ENV用来构建镜像中设置环境变量
ADD将宿主机目录下的文件拷贝进镜像并且ADD会自动处理URL和解压tar包
COPY类似ADD,拷贝文件和目录到镜像中
VOLUME容器数据卷,用于数据保存和持久化工作
CMD指定容器启动时要运行的命令,Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换
ENTRYPOINT指定容器启动时要运行的命令,ENTRYPOINT的目的和CMD一样,都是指定容器启动程序及参数
ONBUILD当构建一个被继承的Dockerfile时运行命令,父镜像在被子镜像继承后触发父镜像的ONBUILD
4.案例通过Dockerfile创建tomcat镜像

该案例是基于openjdk镜像构建一个自己的tomcat镜像。
因为本人安装的Docker for Windows,所以以下操作内容中会和linux有一点区别,最要体现在目录路径上。

4.1. 创建Dockerfile文件

创建一个空文件夹docker,在文件夹中添加下载好的apache-tomcat-8.5.51.tar.gz文件,并创建名为Dockerfile的文件。
在Dockerfile中编辑以下内容:

# 创建的容器需要基于openjdk:8u102-jre容器 (必须有)
FROM openjdk:8u102-jre

# 作者姓名及邮箱 (可有可无)
MAINTAINER xx<xxx@qq.com>

# 设置环境变量CATALINA_HOME为tomcat的路径
# PATH设置tomcat的bin目录方便运行内部脚本文件
ENV CATALINA_HOME /usr/local/tomcat-8
ENV PATH $CATALINA_HOME/bin:$PATH

# 设置工作路径,相当linux中使用cd到某个目录
WORKDIR $CATALINA_HOME

# 拷贝当前文件夹中的tomcat文件到容器中的root目录中
# ADD指定可自动解压这里的tar文件
# 当然也可以使用COPY指令,但是tar文件需要在下面的RUN指令手动解压
ADD ./apache-tomcat-8.5.51.tar.gz /root/

# 移动tomcat文件到自定义的tomcat路径中
RUN mv /root/apache-tomcat-8.5.51/* $CATALINA_HOME

# 需要共享、挂载和持久化的目录 (可有可无)
VOLUME $CATALINA_HOME/webapps/

# 需要暴露的端口 (可有可无)
EXPOSE 8080

# 容器启动后需要运行的命令,这里也可以使用ENTRYPOINT替代
# 这里有个需要使用双引号,使用单引号找不到命令
CMD ["catalina.sh","run"]
4.2 构建镜像

在以上创建的docker文件夹中打开cmd命令窗口,并数据命令docker build -t mytomcat .。这里有个" . " 别漏了,表示从当前路径中查找Dockerfile文件。
在这里插入图片描述

4.3 创建并启动镜像

继续输入以下指令docker run -d -p 8080:8080 -v D:/DevelopmentData/docker/tomcat:/usr/local/tomcat-8/webapps mytomcat,构建并运行mytomcat容器。-d后台运行,-p 宿主机:容器之间端口映射,-v 将容器的webapp路径挂载到宿主机的tomcat目录。
使用docker ps命令查看运行中容器。
在这里插入图片描述

4.4 测试

在浏览器中输入localhost:8080,显示以下内容表示启动成功。
在这里插入图片描述
现在在宿主机的挂载目录下新建一个ROOT目录并在目录中创建一个index.html文件,输入内容:“ 我的tomcat镜像创建成功… ”。
然后再次在浏览器中输入localhost:8080,显示如下内容,表示目录挂载成功。
在这里插入图片描述

4.5 问题

在以上4.4的测试中输入网址网页显示为什么是404,而不是tomcat的主页,因为在以上运行容器的命令参数中有 -v D:/DevelopmentData/docker/tomcat:/usr/local/tomcat-8/webapps ,因为宿主机的tomcat目录为空,它会覆盖掉容器的webapps目录。也是就是说容器的目录一定会被它所挂载的宿主机目录所覆盖。
如果想要保留容器目录中的内容,可以考虑先不挂在目录启动容器,并进入容器拷贝出要挂载的内容到宿主机目录,然后再重复以上4.3的操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值