Dockerfile自用

举报
narrow22/7 发表于 2024/05/20 12:09:58 2024/05/20
【摘要】 Dockerfile关键字:FROM指定基础镜像,用于后续的指令构建。MAINTAINER指定Dockerfile的作者/维护者。(已弃用,推荐使用LABEL指令)LABEL添加镜像的元数据,使用键值对的形式。RUN在构建过程中在镜像中执行命令。CMD指定容器创建时的默认命令。(可以被覆盖)ENTRYPOINT设置容器创建时的主要命令。(不可被覆盖)EXPOSE声明容器运行时监听的特定网络端...

Dockerfile关键字:

FROM

指定基础镜像,用于后续的指令构建。

MAINTAINER

指定Dockerfile的作者/维护者。(已弃用,推荐使用LABEL指令)

LABEL

添加镜像的元数据,使用键值对的形式。

RUN

在构建过程中在镜像中执行命令。

CMD

指定容器创建时的默认命令。(可以被覆盖)

ENTRYPOINT

设置容器创建时的主要命令。(不可被覆盖)

EXPOSE

声明容器运行时监听的特定网络端口。

ENV

在容器内部设置环境变量。

ADD

将文件、目录或远程URL复制到镜像中。

COPY

将文件或目录复制到镜像中。

VOLUME

为容器创建挂载点或声明卷。

WORKDIR

设置后续指令的工作目录。

USER

指定后续指令的用户上下文。

ONBUILD

当该镜像被用作另一个构建过程的基础时,添加触发器。

了解每一行需要的意义,需要以实际例子构建该问题:

1、Dockerfile构建实例:以一份构建centOS的镜像为例子:

#第一步必须指明源镜像,使用FROM

FROM centos

#设置环境变量mypath的位置

ENV mypath /usr/local

#设置工作目录(也就是exec -it /bin/bash进入的默认位置)

WORKDIR $mypath

#run:在未进入容器的情况下执行命令,以下是修改yum源的操作

RUN cd /etc/yum.repos.d/

RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*

RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*

RUN yum clean all

RUN yum makecache

RUN yum -y install wget

RUN wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo

#使用RUN命令来下载vimifconfig

RUN yum -y install vim

RUN yum -y install net-tools

#EXPOSE:暴露内部端口到容器外部

EXPOSE 80

#CMD:打开容器时候的默认操作,docker run的时候会默认执行

CMD /bin/bash

注意CMDENTRYPOINT的区别:

当我用CMD构建镜像的时候,后面加上的参数会被看作新的CMD而将前面的CMD覆盖;

ENTRYPOINT会把输入当作参数添加到后面。

 

2、使用ADD和COPY:构建tomcat_dockerfile的时候用到:

FROM centos

#copy:只做移动,不会自动解压

COPY c.txt /usr/local

#ADD:在移动的同时解压。最后只有解压后的文档在路径中

ADD apache-tomcat-9.0.89.tar.gz /usr/local

ADD jdk-8u171-linux-x64.tar.gz /usr/local

 

#修改yum源

RUN cd /etc/yum.repos.d/

RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*

RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*

RUN yum clean all

RUN yum makecache

RUN yum -y install wget

RUN wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo

RUN yum -y install vim

 

#设置环境变量

ENV JAVA_HOME /usr/local/jdk1.8.0_171

ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.89

ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.89

ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATAIONA_HOME/bin

 

EXPOSE 8080

CMD /usr/local/apache-tomcat-9.0.89/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.89/bin/logs/catalina.out


添加数据卷指令:VOLUMES

FROM centos

VOLUME ["/ContainerVolume1","/ContainerVolume2"]

CMD /bin/bash

 

可以用docker inspect查看:

            "Volumes": {

                "/ContainerVolume1": {},

                "/ContainerVolume2": {}

            },

 

Docker run也可以添加新的数据卷(从别的容器中)

例如:

[root@bogon filelist]# docker run -it --name volumebase datavolume/centos

[root@8a6068541ed6 /]# [root@bogon filelist]#

 

[root@bogon filelist]# docker run -it --name volumeuser1 --volumes-from volumebase centos

[root@d732133660ab /]# ls

ContainerVolume1  bin  etc   lib    lost+found  mnt  proc  run   srv  tmp  var

ContainerVolume2  dev  home  lib64  media       opt  root  sbin  sys  usr

[root@d732133660ab /]#

所以,数据卷既可以继承自本地,也可以继承自其它容器。

 

创建新镜像的命令:

Docker build -f /指定的目录 -t 指定的名字:版本号 .(最后加个点)

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。