Docker-Dockerfile

DockerFile(用于构建镜像的文本)

  • 常用的保留字
FROM  #基础镜像,基于那个镜像
MAINTAINER #镜像的维护者
#构建容器需要执行的命令(RUN)支持两种格式  shell格式:RUN yum -y install vim 
#exec格式:RUN["./test.sh", "dev", "offile"]  等价于 RUN ./test.sh dev offline
RUN
EXPOSE #暴露端口
WORKDIR #指定容器创建后终端默认登陆进来的工作目录,一个落脚点
USER   #指定以什么用户执行,默认root
ENV  #设置环境变量
ADD #将宿主机下的文件拷贝进镜像,会自动处理RUL和解压tar压缩包
COPY #复制文件,类似于docker cp
CMD #启动容器后需要执行什么命令在docker run的时候执行,也支持shell和exec格式,dockerfile总可以有多个指令,但是只有最后一个生效(之前的命令还是会执行,知识会保留最后一个CMD可被替换),会被docker run之后的参数替换
ENTRYPOINT #可以和CMD一起使用不会被覆盖 如果它后面跟着CMD 则CMD的内容会被当做参数传递,这里比较绕看一个例子就懂了
ex:
ENTRYPOINT ["nginx", "-c"]
CMD["/etc/nginx/nginx.conf"]
如果运行docker run nginx:latest -c /etc/nginx/new.conf
CMD 会被run后面的参数替换 所以CMD此时的值为/etc/nginx/new.conf 然后他紧挨着ENTRYPOINT 所以最终执行的命令为nginx -c /etc/nginx/new.conf

Dockerfile是按顺序执行,如果以如果我们的文件有变化,后面的步骤都会重新执行,所以我们尽量把变化进行细粒度拆分,安装依赖放在前面。
下面来验证ENTRYPOINT 和CMD的关系
构建一个测试镜像

FROM ubuntu
CMD ["sleep""5"]

运行这个容器发现睡眠了5秒以后退出,如果我们希望自己指定可以直接在docker后面加命令覆盖,写法如下

docker run sleeper sleep 10

上面的过程显得有些不合理,我们希望只传入参数,所以ENTRYPOINT出现了

FROM ubuntu
ENTRYPOINT ["sleep"]
#如果没有传参就会拼接这个到后面 如果传入了参数就会拼接我们传入的参数
CMD ["5"]
docker run sleeper #休眠5秒
docker run sleeper 10 #休眠10秒 覆盖 CMD ["5"] 并拼接在后面 也就是最后执行的是 sleep 10
  • 实战
    生成一个装了vim,java, ifconfig 的centos镜像
FROM centos
MAINTAINER liyong
 
ENV MYPATH /usr/local
WORKDIR $MYPATH
 
#安装vim编辑器
RUN yum -y install vim
#安装ifconfig命令查看网络IP
RUN yum -y install net-tools
#安装java8及lib库
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
#ADD 是相对路径jar,把jdk-8u171-linux-x64.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一位置
ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/
#配置java环境变量,这里相当于是写死容器内部,如果启动的时候需要更改也可以-e 去修改
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
 
EXPOSE 80
 
CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash

构建镜像

docker build -t centosjava8:1.5 . #.表示当前目录为上下文目录 这里需要指定dockerfile 的位置

构建一个微服务应用

# 基础镜像使用java
FROM java:8
# 作者
MAINTAINER liyong
# VOLUME 指定临时文件目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为zzyy_docker.jar
ADD docker_boot-0.0.1-SNAPSHOT.jar spring.jar

ENTRYPOINT ["java","-jar","/spring.jar"]
#暴露6001端口作为微服务
EXPOSE 6001

构建一个前端应用(Tomcat,Nginx)

FROM nginx
WORKDIR /usr/share/nginx/html/
USER root
COPY ./docker/nginx.conf /etc/nginx/conf.d/default.conf
COPY ./dist  /usr/share/nginx/html/
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值