0
点赞
收藏
分享

微信扫一扫

5.Dockerfile概述以及指令


Dockerfile是什么?

Dockerfile使用来构建Docker镜像的文本格式的构建文件,是由一系列命令和参数构成的脚本。用户可以使用Dockerfile来快速创建自定义的镜像。

从应用软件的的角度看,Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段:

1. Dockerfile是软件的原材料

2. Docker镜像是软件的交付品

3. Docker容器则可以认为是软件的运行态

Dockerfile面向开发,Docker镜像成为交付标准,Docker容器则涉及部署和运维,三者缺一不可,合力充当Docker体系的基石。


Docker执行Dockerfile的大致流程

1. Docker从基础镜像运行一个容器

2. 执行一条指令并对容器作出修改

3. 执行类似docker commit 的操作提交一个新的镜像层

4. Docker再基于刚提交的镜像运行一个新的容器

5. 执行Dockerfile中的下一条指令直到所有的指令运行完成


Dockerfile指令

1. 配置指令

ARG:定义创建镜像过程中使用的变量

FROM:指定所创建镜像的基础镜像

LABEL:LBAEL指令可以为生成的镜像添加元数据标签信息。这些信息可以用来辅助过滤出特定镜像

EXPOSE:声明镜像内服务监听的端口

ENV:指定环境变量,在镜像生成过程中会被后续RUN指令使用,在镜像启动的容器中也会存在

ENTRYPOINT:指定镜像的默认入口命令,该入口命令会在启动容器时作为根命令执行,所有传入值作为该命令的参数

VOLUMN:创建一个数据卷挂载点

USER:指定运行容器时的用户或UID,后续的RUN等指令也会使用指定的用户身份

WORKDIR:为后续的RUN、CMD、ENTRYPOINT指令配置工作目录

ONBUILD:指定基于所生成镜像创建子镜像时,自动执行的操作命令

MAINTAINER:镜像维护者的姓名和邮箱地址


2. 操作指令

RUN:运行指定命令

CMD:CMD指令用来指定启动容器时默认执行的命令,Dockerfile中可以有多个CMD命令,但是只有最后一个生效

ADD:添加内容到镜像(拷贝+解压缩)

COPY:添加内容到镜像


简单案例

1. 自定义mycentos目的使我们自己的镜像如下:

  1. 登录后的默认路径/tmp
  2. 可以使用vim编辑器
  3. 查看网络配置,可以使用ifconfig命令
FROM centos
MAINTAINER wilson9933@qq.com

# 设置环境变量
ENV base_url /tmp
# 设置工作目录
WORKDIR $base_url

# 执行命令,安装vim和网络工作
RUN yum -y install vim*
RUN yum -y install net-tools

CMD echo "success !!!"
CMD /bin/bash

执行 docker build -f /my-docker/Dockerfile -t mycentos:1.0 . 进行安装

运行成功!!

5.Dockerfile概述以及指令_docker


2. CMD个ENTRYPOINT的区别

FROM centos
RUN yum -y install curl
CMD echo "success !!!"
CMD ["curl", "-s", "https://ip.cn"]

docker build -f /my-docker/Dockerfile -t my-ip:1.0 .

5.Dockerfile概述以及指令_centos_02

但是这个时候如果想看报文头信息,执行 docker run -it my-ip:1.0 -i 则报错!!5.Dockerfile概述以及指令_docker_03

这个时候修改Dockerfile,把CMD换成ENTRYPOINT

FROM centos
RUN yum -y install curl
CMD echo "success !!!"
ENTRYPOINT ["curl", "-s", "https://ip.cn"]

执行:docker build -f /my-docker/Dockerfile -t my-ip:1.1 .

5.Dockerfile概述以及指令_tomcat_04

5.Dockerfile概述以及指令_centos_05

这里因为 https://ip.cn 相应太久了,换成了百度的域名测试!


3. ONBUILD命令

Dockerfile文件:

FROM centos
RUN yum -y install curl
CMD echo "success !!!"
ENTRYPOINT ["curl", "-s", "http://www.baidu.com"]
ONBUILD RUN echo "father onbuild !! 88888 !!!"

构建:docker build -f /my-docker/Dockerfile -t baidu-father:1.0 .

修改Dockerfile

FROM baidu-father:1.0
RUN yum -y install curl
CMD echo "success !!!"
ENTRYPOINT ["curl", "-s", "http://www.baidu.com"]

构建:docker build -f /my-docker/Dockerfile -t baidu-son:1.0 .

可以发现有生成一个触发器!!!

5.Dockerfile概述以及指令_centos_06


4. ADD和COPY命令,自定义tomcat9

1. 在宿主机上创建目录 mkdir -p /opt/my/tomcat9,并执行 touch x.txt 创建一个文本文件 c.txt

2. 准备好jdk8和tomcat9的压缩包

5.Dockerfile概述以及指令_docker_07

3. 编写Dockerfile文件,然后执行 docker build -f /opt/my/tomcat9/Dockerfile -t mytomcat9:1.0 .

FROM centos
COPY c.txt /usr/local/cincontainer.txt
ADD jdk1.8.0_121.tar.gz /usr/local/
ADD apache-tomcat-9.0.26.tar.gz /usr/local

RUN yum -y install vim*
RUN yum -y install net-tools
ENV MY_PATH /usr/local
WORKDIR $MY_PATH

ENV JAVA_HOME /usr/local/jdk1.8.0_121
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.26
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.26
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

EXPOSE 8080

# 我的jdk比较奇葩,需要授权,正常这步可以省略
RUN chmod -R 777 $JAVA_HOME/bin/

CMD $CATALINA_HOME/bin/startup.sh && tail -F $CATALINA_HOME/logs/catalina.out

4. docker run -d -p 9090:8080 --name myt9 -v /opt/my/tomcat9/webapps:/usr/local/apache-tomcat-9.0.26/webapps -v /opt/my/tomcat9/tomcat9logs:/usr/local/apache-tomcat-9.0.26/logs --privileged=true mytomcat9

5.Dockerfile概述以及指令_centos_08



举报

相关推荐

0 条评论