docker-- Dockerfile的书写

Dockerfile

在这里插入图片描述

  • dockerfile常用指令
  • FROM:指定base镜像,如果本地不存在会从远程仓库下载
  • MAINTAINER:设置镜像的作者,比如用户邮箱等。
  • COPY:把文件从build context复制到镜像,支持两种形式:COPY src destCOPY [“src”, “dest”]
    src必须指定build context中的文件或目录
  • ADD:用法与COPY类似,不同的是src可以是归档压缩文件,文件会被自动解压到dest,也可以自动下载URL并拷贝到镜像:ADD html.tar /var/www | ADD http://ip/html.tar /var/www
  • ENV:设置环境变量,变量可以被后续的指令使用:ENV HOSTNAME sevrer1.example.com
  • EXPOSE:如果容器中运行应用服务,可以把服务端口暴露出去:EXPOSE 80
  • VOLUME:申明数据卷,通常指定的是应用的数据挂在点:VOLUME ["/var/www/html"]
  • WORKDIR:为RUN、CMD、ENTRYPOINT、ADD和COPY指令设置镜像中的当前工作目录,如果目录不存在会自动创建。
  • RUN:在容器中运行命令并创建新的镜像层,常用于安装软件包:RUN yum install -y vim
  • CMD 与 ENTRYPOINT:这两个指令都是用于设置容器启动后执行的命令,但CMD会被docker run后面的命令行覆盖,而ENTRYPOINT不会被忽略,一定会被执行。docker run后面的参数可以传递给ENTRYPOINT指令当作参数。Dockerfile中只能指定一个ENTRYPOINT,如果指定了很多,只有最后一个有效。

示例

  • 1、编写Dockerfile 实现安装httpd服务
  • 先将hel7的镜像导入到docker中:docker load -i rhel7.tar
    在这里插入图片描述
  • 在一个空的目录下创建一个docker目录,创建Dockerfile文件
    在这里插入图片描述
  • 创建并运行容器测试是否创建成功
    在这里插入图片描述
  • 在docker目录下编辑yum源:vim dvd.repo
    在这里插入图片描述
  • 编辑Dockerfile文件:vim Dockerfile
FROM rhel7      # 源镜像是rhel7,最好将名为rhel7的镜像放在本地
COPY dvd.repo /etc/yum.repo.d/dvd.repo
RUN  rpmdb --rebuilddb && yum install -y httpd
	# 执行命令安装httpd并清除yum缓存
	# rpmdb 命令用于初始化和重建rpm数据库
	# --rebuilddb:从已安装的包头文件,反向重建RPM数据库
CMD ["/usr/share/httpd","-D","FOREGROUND"]
	# 打开apach服务
	# -D 是全局文件/etc/sysconfig/httpd中的打开参数

在这里插入图片描述

  • 封装镜像
    在这里插入图片描述
  • 查看此时镜像已将封装成功
    在这里插入图片描述
  • 查看端口,因为80端口被上一个实验中game2048占用,所以先删除vm1,让80端口空闲
    在这里插入图片描述
    在这里插入图片描述
  • 运行
    在这里插入图片描述
  • 在浏览器上查看,此时httpd服务安装成功
    在这里插入图片描述
  • 添加index.html页面做测试
  • 在该目录下创建index.html页面
    在这里插入图片描述
  • 编辑Dockerfile文件,将测试页面写入
    在这里插入图片描述
  • 封装镜像
    在这里插入图片描述
  • 将上一步测试中的apache删除,因为在占用80端口
  • 运行
    在这里插入图片描述
  • 测试
    在这里插入图片描述
  • 也可指定位置来运行
  • 在docker目录下创建website目录,并创建index.html测试页面
    在这里插入图片描述
  • 指定位置运行测试
    在这里插入图片描述
  • 查看资源的位置 docker inspect vm1
    在这里插入图片描述
  • 在网页上测试
    在这里插入图片描述
  • 示例说明Shell和exec格式的区别
  • 当进入rhel7镜像时,会发现什么命令都没有
    在这里插入图片描述
  • 通过busybox镜像来写入变量
  • 先将镜像导入docker
    在这里插入图片描述
    Shell格式底层会调用/bin/sh -c来执行命令,可以解析变量,而下面 的exec格式不会
  • 先编写shell格式的Dockerfile
    在这里插入图片描述
  • 封装镜像
    在这里插入图片描述
  • 运行后会发现变量已写入
    在这里插入图片描述
  • 编写exec格式的Dockerfile:
    在这里插入图片描述
  • 封装并运行,并不能调用变量
    在这里插入图片描述
  • 需要修改成以下格式
    在这里插入图片描述
  • 封装并运行,发现能调用变量
    在这里插入图片描述
    Exec格式时,ENTRYPOINT可以通过CMD提供额外参数,CMD的额外参数可以在容器启动时动态替换。在shell格式时ENTRYPOINT会忽略任何CMD或docker run提供的参数。
    在这里插入图片描述
    在这里插入图片描述
  • 在运行容器时的区别:推荐使用exec格式书写
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值