Dockerfile自用
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命令来下载vim和ifconfig
RUN yum -y install vim
RUN yum -y install net-tools
#EXPOSE:暴露内部端口到容器外部
EXPOSE 80
#CMD:打开容器时候的默认操作,docker run的时候会默认执行
CMD /bin/bash
注意CMD和ENTRYPOINT的区别:
当我用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 指定的名字:版本号 .(最后加个点)
- 点赞
- 收藏
- 关注作者
评论(0)