​DockerFile简介+镜像构建
  Il1dbC9Jhbvl 2023年11月02日 33 0

1)Dockerfile简介

由一系列命令和参数构建成的脚本

构建三步骤

编写Dockerfile文件 ==> docker build(打包为镜像) ==> docker run

1)每条保留字指令都必须为大写字母且后面要跟随至少一个参数。

2)指令按照从上到下的顺序执行

3)#表示注释

4)每条指令都会创建一个新的镜像层,并对镜像进行提交

2)DockerFile保留字指令

FROM # 基础镜像,当前镜像是基于哪个镜像的

MAINTAINER # 镜像维护者的姓名

RUN #容器构建时需要运行的命令

EXPOSE #当前容器对外暴露的端口号

WORKDIR #指定在创建容器后,终端默认登录的工作目录

ENV #用来在构建镜像过程中设置环境变量

ADD #将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包

COPY #类似ADD,拷贝文件和目录到镜像中。

VOLUME #创建容器数据卷,用于数据保存和持久化

CMD #指定一个容器启动时要运行的命令;dockerfile中可以有多个CMD指令,但是只有最后一个生效,CMD会被docker run 之后的参数替换。

ENTRYPOINT #指定一个容器启动时要运行的命令;ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数。但是ENTRYPOINT不会覆盖参数,而是会追加。

ONBUILD #当构建一个被继承的DockerFile时运行命令,父镜像在被子继承后父镜像的onbuild被触发。

3)使用dockerfile构建镜像

(1)案例一

要求使其具备vim、ifconfig、httpd、更换yum源为阿里云源和jdk8环境

#下载JDK
wget https://mirrors.yangxingzhen.com/jdk/jdk-8u181-linux-x64.tar.gz
#下载yum源
wget https://mirrors.aliyun.com/repo/Centos-8.repo

创建dockefile文件

FROM centos

ENV HOMEPWD /root
WORKDIR  $HOMEPWD    #设置登录目录


RUN rm -rf /etc/yum.repos.d/*  #删除镜像自带的yum源
#RUN curl -o /etc/yum.repos.d/centos8.repo  https://mirrors.aliyun.com/repo/Centos-8.repo
ADD Centos-8.repo  /etc/yum.repos.d/centos8.repo  #将本地下载好的镜像源复制到镜像内
RUN yum clean all       
RUN yum makecache
RUN yum install vim httpd net-tools -y          #使用yum安装软件包


RUN yum install glibc.i686 -y
ADD jdk-8u181-linux-x64.tar.gz /usr/local/java
ENV JAVA_HOME /usr/local/java/jdk1.8.0_181
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

ENTRYPOINT [ "/bin/bash" ]

使用docker build命令打包镜像

docker build -t centosjdk:1.8 .

​DockerFile简介+镜像构建_docker

验证镜像是否拥有封装的功能

docker run -it centosjdk:1.8
验证软件包是否安装成功:

JAVA:

​DockerFile简介+镜像构建_DockerFile_02


VIM:

​DockerFile简介+镜像构建_Linux_03

net-tools:

​DockerFile简介+镜像构建_Linux_04

httpd:

​DockerFile简介+镜像构建_Linux_05

(2)案例二

注意事项:当DockerFile中存在CMD参数时如果此时启动容器时末尾追加了命令,则会将dockerfile中最后一个CMD命令覆盖掉。

#构建时使用CMD执行命令

FROM centos
MAINTAINER qclr<你的邮箱地址>

ENV HOMEPWD /root
WORKDIR  $HOMEPWD


RUN rm -rf /etc/yum.repos.d/*
RUN curl -o /etc/yum.repos.d/centos8.repo  https://mirrors.aliyun.com/repo/Centos-8.repo
RUN yum clean all
RUN yum makecache
CMD curl  https://ifconfig.io

运行容器时末尾追加命令则会将原本的CMD命令进行覆盖执行

​DockerFile简介+镜像构建_docker_06

使用ENTRYPOINT构建dockerfile文件

FROM centos
MAINTAINER qclr<你的邮箱地址>

ENV HOMEPWD /root
WORKDIR  $HOMEPWD


RUN rm -rf /etc/yum.repos.d/*
RUN curl -o /etc/yum.repos.d/centos8.repo  https://mirrors.aliyun.com/repo/Centos-8.repo
RUN yum clean all
RUN yum makecache
ENTRYPOINT [ "curl","-s","https://ifconfig.io" ]

运行容器时末尾追加命令则会在原本的命令后进行追加执行

​DockerFile简介+镜像构建_Linux_07

4)ONBUILD的用法

当构建一个被继承的DockerFile时运行命令,父镜像在被子继承后父镜像的onbuild被触发。

(1)案例

构建一个包含基础软件包的父类镜像,在dockerfile文件中继承该父类镜像触发ONBUILD

#父类dockerfile文件
FROM centos
MAINTAINER qclr<你的邮箱地址>

ENV HOMEPWD /root
WORKDIR  $HOMEPWD

RUN rm -rf /etc/yum.repos.d/*
RUN curl -o /etc/yum.repos.d/centos8.repo  https://mirrors.aliyun.com/repo/Centos-8.repo
RUN yum clean all
RUN yum makecache
RUN yum install vim httpd net-tools openssh-server -y
ENTRYPOINT [ "curl","-s","https://ifconfig.io" ]
ONBUILD RUN echo "this is father------886"



docker build -f dockefileson2 -t my_centos  .

​DockerFile简介+镜像构建_Linux_08

在继承父类镜像后进行打包时会触发ONBUILD参数

FROM my_centos
MAINTAINER qclr<你的邮箱地址>

ENV HOMEPWD /root
WORKDIR  $HOMEPWD

ENTRYPOINT [ "curl","-s","https://ifconfig.io" ]


#继承父类镜像进行重新打包
docker build -f dockerson -t my_son  .

​DockerFile简介+镜像构建_Linux_09

4)虚悬镜像

对于仓库和标签都是none的称之为虚悬镜像。

#查询系统中存在的所有虚悬镜像
docker images ls -f dangling=true
#删除所有的虚悬镜像
docker image prune

​DockerFile简介+镜像构建_Linux_10


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  wwLZeziuqjLR   2023年12月11日   32   0   0 Dockercentos
  MCWYWqSAMsot   2023年12月11日   33   0   0 Docker
  DnoStTHsc0vp   2023年12月11日   27   0   0 Docker
  nIt0XG0acU8j   2023年12月11日   32   0   0 linuxhtop
Il1dbC9Jhbvl