Docker-DockerFile

在这里插入图片描述

Docker深入

前面讲解了Docker的基本概念以及Docker的安装,还简单跑了一个例子,相信能够对Docker有一个大致的了解

本章将对Docker进一步的探索

DockerFile

DockerFile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。

DockerFile就是用来构建Docker镜像的,现在DockerHub上面有很多镜像,但是有时候我们会根据需求来自定义镜像,(比如说我们要改造Centos)常用两种方法:

  1. 我们在DockerHub上面拉取一个镜像下来,然后进入容器里面进行修改,接着进行docker commit(形成新的一个镜像)
  2. 我们自己编写DockerFile文件,因为所有镜像本质都是DockerFile,编写完自己构建出一个镜像

DockerFile和 docker commit 的区别:

DockerFile更加灵活,我可以随时根据需求来更改我的文件而docker commit,不具备重复性,什么意思呢,就是说,在DockerFile我不要一个东西,只是删除一行就好了(因为这是构建文件,我把某一块去掉就可以了),但是如果用docker commit就不行了,你安装了好些东西,要删除可能得一个个卸载,而且有时候你想要回复到之前某个点的,就非常困难了,所以:构建镜像不推荐docker commit,请使用DockerFile

构建DockerFile三步骤

  • 编写DockerFile文件
  • docker build
  • docker run

写一个例子吧:

新建一个DockerFile文件编写以下内容

From centos
ENV mypath /tmp
WORKDIR $mypath
EXPOSE 80
CMD /bin/bash

执行docker build命令

我这里遇到过一个小问题,很多也遇到了,就是build的时候报错

docker build -f 文件所在的位置 -t 名字:版本号 .

如果文件在当前目录下可以省略-f

$ docker build -f /dockerFile/DockerFile -t mycentos:2.2 .

重要的事情说三遍

最后面有小数点!!!

最后面有小数点!!!

最后面有小数点!!!

//不加小数点报错:
$ "docker build" requires exactly 1 argument(s).
//没启动docker报错:
$ Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

在这里插入图片描述

可以看到当前的目录是tmp,因为我构建镜像的时候就设置了WORKDIR

简单的例子讲完了:

现在看看常用的构建文件命令:

  1. FROM 基础镜像,当前镜像是基于哪个镜像,可以想象成类与类之间的继承关系
  2. MAINTAINER,镜像的维护者的姓名和邮箱地址
  3. RUN,容器构建时需要运行的命令
  4. EXPOSE,当前容器对外暴露出的端口
  5. WORKDIR,指定创建容器后,终端默认登陆进来的工作目录
  6. ENV,用来构建镜像过程中设置环境变量
  7. ADD,将宿主机的目录下的文件拷贝到镜像里面并且ADD命令会自动处理URL和解压tar
  8. COPY,类似ADD,拷贝文件和目录到镜像中。<源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置
  9. VOLUME,容器数据卷,用于保存和持久化工作
  10. CND,指定一个容器启动时要运行的命令,DockerFile中可以有多个CMD指令,但只有最后一个生效,会被docker run 后面的参数给覆盖
  11. ENTRYPOINT,和CMD一样是指定一个容器启动时要运行的命令,区别在于不会被覆盖,都能执行
  12. ONBUILD,当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发

这个可能就需要多做才能熟悉其命令了

比如说我们拉取的Centos都是比较纯净的

怎么说呢,什么东西都没有装就对了

比如下面

From centos//继承原生centos
RUN yum -y install vim  //安装vim
CMD /bin/bash //docker run的时候执行 /bin/bash

最后写一个命令稍微复杂一点的

#继承原生Tomcat
FROM centos
#设置作者和邮箱
MAINTAINER ymbcxb<353560278@qq.com>
#把宿主机当前上下文的c.txt拷贝到容器/usr/local中
COPY c.txt /usr/local/cincontainer.txt
#把java与tomcat添加到容器中
ADD apache-tomcat-9.0.17.tar.gz  /usr/local/
ADD jdk-8u201-linux-x64.tar.gz /usr/local/
#安装VIM编辑器
RUN yum -y install vim
#设置工作访问时候的落脚点
ENV MYPATH /usr/local
WORKDIR $MYPATH
#配置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.17
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.17
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
#容器运行时监听的端口
EXPOSE 8080
#启动时运行tomcat用ENTRYPOINT 和 CMD都可以
#ENTRYPOINT ["/usr/local/apache-tomcat-9.0.17/bin/startup.sh"]
#CMD ["/usr/local/apache-tomcat-9.0.17/bin/startup.sh","run"]
#启动tomcat并且打印日志
CMD /usr/local/apache-tomcat-9.0.17/bin/startup.sh && tail - F /usr/local/apache-tomcat-9.0.17/bin/logs/catalina.out

温馨提示:记得将对应的Jar包和Tomcat的包和c.txt放到当前目录下

在这里插入图片描述

运行

$ docker run -it -p 9080:8080 -d mytomcat:1.0

然后在浏览器输入对应的网址就可以看到,LinuxIp:9080

执行以下命令进入

$ docker exec -it cotainerId /bin/bash

在这里插入图片描述

查看到是存在cincontainer.txt

总结:

关于命令的学习,还是需要多琢磨琢磨,比如你可以手写一个Centos(安装了openssh)这样子,下次你需要用虚拟机的时候只用开启多一个容器,就够了就可以进行SSH连接来玩,玩坏了不过删容器而已,比传统的下载一个虚拟机镜像要方便多了,大大大大大地提高学习效率。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker是一种开源的容器化平台,它可以帮助开发者将应用程序和服务以容器的形式进行打包、分发和部署。而Gluster是一个分布式存储系统,它可以将多个服务器的存储空间整合在一起,形成一个统一的、可扩展的存储池。 CentOS是一种基于Red Hat Enterprise Linux(RHEL)的开源操作系统,它提供了稳定性和安全性,并且具备广泛的应用支持。 Dockerfile是用于构建Docker镜像的脚本文件,它可以定义容器的运行环境、设置启动命令等。 那么,docker-gluster-centos Dockerfile是指在CentOS系统上构建一个包含Gluster分布式存储系统的Docker镜像的脚本文件。 在docker-gluster-centos Dockerfile中,我们可以使用CentOS的官方镜像作为基础镜像,并在此基础上安装和配置Gluster分布式存储系统。可以通过使用适当的软件包管理工具(如yum)来安装Gluster软件包和依赖项。然后,可以使用Dockerfile中的指令来启动和配置Gluster节点、创建Gluster卷以及设置其他必要的参数和选项。 通过构建docker-gluster-centos Docker镜像,我们可以在任何支持Docker的环境中快速部署和运行Gluster分布式存储系统,而无需手动安装和配置。这样可以大大简化Gluster的部署过程,提高运维效率,并且能够实现更加轻量级、可移植和可扩展的存储解决方案。 总而言之,docker-gluster-centos Dockerfile是用于在CentOS系统上构建包含Gluster分布式存储系统的Docker镜像的脚本文件,使得Gluster的部署和运行变得更加简单、可靠和可扩展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值