首页 技术随笔

1. Dockerfile

Dockerfile是一个由命令和参数构成的一个脚本,通过一个Dockerfile我们可以构建一个自定义的镜像

2. 编写步骤

  1. 手动编写的Dockerfile文件
  2. docker build构建镜像
  3. docker run 运行容器

其实Docker可以类比Git来学习

3. Dockerfile内容基础知识

  1. 每条保留指令都必须大写且后面要跟随至少一个参数
  2. 指令按照从上到下,顺序执行
  3. #表示注释
  4. 每条指令都会创建一个新的镜像层,并对镜像进行提交

4. Exp1

centos的Dockerfile文件


FROM scratch
ADD centos-7-x86_64-docker.tar.xz /

LABEL \
    org.label-schema.schema-version="1.0" \
    org.label-schema.name="CentOS Base Image" \
    org.label-schema.vendor="CentOS" \
    org.label-schema.license="GPLv2" \
    org.label-schema.build-date="20201113" \
    org.opencontainers.image.title="CentOS Base Image" \
    org.opencontainers.image.vendor="CentOS" \
    org.opencontainers.image.licenses="GPL-2.0-only" \
    org.opencontainers.image.created="2020-11-13 00:00:00+00:00"

CMD ["/bin/bash"]

5. 主流的Dockerfile保留字指令

FROM
基础镜像,当前新镜像是基于哪个镜像的。如FROM scratch。scratch 为镜像的祖先类

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

RUN
容器构建的时候需要的命令

EXPOSE
当前容器需要对外暴露的端口

WORKDIR
指令在创建容器后,终端默认登陆进来的工作目录,一个落脚点

ENV
用来构建镜像过程中设置环境变量,比如:ENV MY_PATH /usr/mytest,可以在后续的RUN命令中继续使用

ADD
ADD和COPY功能一样,都是把主机上的文件拷贝到容器内,但是ADD是拷贝后然后会自动解压tar压缩包,比如 ADD centos-7-x86_64-docker.tar.xz /

COPY
拷贝,比如要拷贝upload这个文件夹,可以使用COPY upload /docker/upload如果是要拷贝upload.txt这个文件,可以使用COPY upload /docker/upload.txt 或者COPY upload /docker/也可以使用COPY['src','dest']这种写法

VOLUME
容器数据卷,用于数据保存和持久化工作如:VOLUME ['/dataVolume1','/dataVolumn2']

CMD
指定一个容器启动时要运行的命令,Dockerfile中可以有多个CMD指令,但是只有最后一个生效,CMD会被docker run之后的参数替换,执行格式,shell格式:CMD <命令>,exec格式:CMD ['可执行文件','参数1','参数2',...]

ENTRPOINT
指定一个容器启动时要运行的命令,ENTRPOINT和CMD一样,都是在指定容器启动程序及参数,值得注意他和CMD的区别,他可以等价为是对命令的追加,不会说只有最后一个生效

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




文章评论