镜像的构建文件
通过build
构建成新的镜像
如:将myfile
文件构建成新镜像
- myfile
FROM centos
CMD echo "==========run success==========="
CMD /bin/bash
- build
docker build -f ./myfile.txt -t lwx/mycentos .
注意:
- 指定必须为大写字母,且后面不能为空
- 从上到下顺序执行
#
表示注释- 每条指定都会创建一个新的镜像层并进行提交
DockerFile的运行流程
1、docker从基础镜像运行一个容器
2、执行一条指令并对容器进行修改
3、生成一个新的镜像
4、基于新镜像创建一个新的容器
5、依次执行,直到所有指定都执行完
FROM
引用镜像,如
FROM centos
scratch
所有镜像的顶层
MAINTAINER
镜像的维护者,可以填加姓名和邮箱等
MAINTAINER lwx is a good boy and email is itweixiang@126.com
RUN
容器构建时需要运行的命令
如:在使用centos作为父镜像时,安装vim
RUN yum -y install vim
EXPOSE
暴露的端口
EXPOSE 6379
WORKDIR
创建容器后,终端登录后默认的路径,没有指定时默认到/
目录
WORKDDIR /
ENV
设置环境变量,可以配合其它命令使用
ENV WORK_HOME /work
WORKDIR $WORK_HOME
ADD & COPY
将所需要的压缩包拷贝到镜像中,COPY
只是拷贝,ADD
拷贝后还会进行解压缩
- ADD
如宿主中的jdk拷贝到镜像中
ADD /data/jdk1.8.0-openjdk.tar.gz /usr/local
- COPY
不做赘述
VOLUME
为镜像添加数据卷
VOLUME ["/volume1","/volume2"]
该方式没有指定宿主机的目录,所以docker会分配一个默认的位置,可以通过docker inspect containerID
进行查看。
CMD & ENTRYPOINT
两者都是执行命令
- CMD
DockerFile可以有多个CMD命令,但只有最后一个生效,而且会被docker run
后的命令替换
如:完成后打开终端
CMD /bin/bash
大部分Linu发行版的基础镜像里面调用CMD命令, 指定容器启动后执行/bin/sh或/bin/bash. 这样镜像启动默认进入交互式的shell
- ENTRYPOINT
ENTRYPOINT
用法与CMD
类似,但是它不会被docker run
后的命令替换,如需替换,则需要加上--entrypoint
的参数。
如:
ENTRYPOINT /bin/bash
ONBUILD
父镜像被子镜像继承后,父镜像的ONBUILD会被触发,该命令可以配合其他命令使用
如:在子镜像运行时,父镜像打印一句话
ONBUILD RUN echo "Father image is running"
自定义DockerFile
centos
FROM centos
ENV BASH /bin/bash
ENV LOCATION /usr/local/
WORKDIR $LOCATION
MAINTAINER author:lwx email:itweixiang@126.com
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD $BASH