【Docker】DockerFile指令
前言:学习Docker,仅拿别人的镜像是不够的。在公司真实项目中常常要为公司项目创建镜像(虽然大多情况下已经有前辈为我们搭建好了环境,但是我们总该能看懂,如果有兴趣更应该自己尝试搭建)。
一、Docker概述
自我理解:Docker是一个容器化平台,让开发人员可以为应用程序打包环境,移植环境。
优点:
1. 减少开发人员和实施人员因环境差异导致对应功能产生效果不同(然后就开始互怼了);
2. 减少上岗新人浪费大量时间配置环境等优势。
其他:Docker的模式有点类似于Maven、Git。不过Maven是依赖包自动管理,Git是代码自动管理,而Docker是整个环境自动管理。
二、DockerFile概述
自我理解:DockerFile相当于Docker镜像文件生成的源码。
我们可以去Docker-hub中打开任意一个镜像查看,例如centos
点开上述的任意一个链接就可以看到他们自己的DockerFile文件了,例如:centos8,像这些代码前面的标志就是这里要记录并学习的内容
FROM scratch ADD centos-8-x86_64.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="20201204" CMD ["/bin/bash"]
三、DockerFile保留字指令
FROM:当前镜像继承于哪个镜像,scratch是最底层(相当于Java中的Object)
FROM scratch
MAINTAINER:作者的姓名和邮箱。
MAINTAINER zjqq6666
RUN:构建时运行的额外命令(Linux命令)。
#会在构建时安装vim
RUN yum -y install vim
EXPOSE:对外暴露的端口。
#对外暴露80端口 EXPOSE 80
ENV:设置环境变量。
#设置MY_PATH环境变量为/etc/
ENV MY_PATH /etc/
WORKDIR:容器登陆后(centos登陆后),终端默认的目录(如果不配置,则为/目录)。
#在上面如果已经使用ENV设置了环境变量,这里就直接使用
WORKDIR $MY_PATH
#如果没有设置环境变量也可以直接写死
WORKDIR /etc/
ADD:添加额外的包(压缩包等),在Copy指令的基础上还支持解压。
#添加外部包
ADD centos-8-x86_64.tar.xz /
COPY:仅添加,无解压。
#添加外部包。相比于ADD,COPY仅复制,不解压,所以引入的是压缩文件,那么它就是个文件而已 COPY centos-8-x86_64.tar.xz /
VOLUME /dataVolume
CMD:指定容器启动时运行的命令。
CMD echo "sucess-----ok"
CMD ls
ENTRYPOINT:同CMD。区别在CMD只有最后一个命令生效,其会被docker run之后的参数替换掉。但是ENTRYPOINT不会,ENTRYPOINT是在原命令的基础上append的
#当使用docker build -f dockerfile -t zjqq6666/centos:1.0 . -l 时,对于写CMD ls的会直接报错,因为-l并不是命令,而ENTRYPOINT
ENTRYPOINT ls
四、利用DockerFile创建镜像
docker build -f dockerfile -t zjqq6666/centos:1.0 .
刚刚接触容器化,刚刚学习Docker,望各位大神多指点~