网站兼容,出国做博后关注哪些网站,wordpress前台提交图片,网络舆情的应对及处理Dockerfile探究 一、镜像层概念1、通过执行命令显化docker的机制 二、Dockerfile基础命令1、FROM 基于基准镜像【即构建镜像的时候#xff0c;依托原有镜像做拓展】2、LABEL MAINTAINER -说明信息3、WORKDIR 设置工作目录4、ADD COPY 复制文件5、ENV 设置环境常量… Dockerfile探究 一、镜像层概念1、通过执行命令显化docker的机制 二、Dockerfile基础命令1、FROM 基于基准镜像【即构建镜像的时候依托原有镜像做拓展】2、LABEL MAINTAINER -说明信息3、WORKDIR 设置工作目录4、ADD COPY 复制文件5、ENV 设置环境常量 三、Dockerfile 执行指令【RUNENTRYPOINTCMD】1、RUN-构建时运行2、ENTRYPOINT-容器启动时执行3、CMD-容器启动后执行默认的命令或参数4、Dockerfile执行指令有两种运行格式1、 Shell命令格式Run yum install -y vim2、 Exec命令格式RUN [yum,install,-y,vim] 5、命令执行差异 演示 适合想了解更多关于Dockerfile 的小伙伴 一、镜像层概念
镜像层由两部分组成镜像层容器层 镜像就是静态文件和安装光盘类似只有把镜像创建完容器以后才能正常运行 镜像是只读的容器创建完之后所有的读写都是在容器内完成的且每个容器内的读写都是独立且互不干扰 基于以上了解展开关于dockerfile的构建过程
#1、设置基准镜像 FROM tomcatlatest#2、维护的人/机构 MAINTAINER 机构/人名#3、切换工作目录 WORKDIR /webapps#4、拷贝镜像到镜像指定目录下 ADD docker-web ./docker-web
以上四步每步都会生成一个临时容器临时容器相当于构建过程中的存档【且临时容器只能用于镜像的构建不可做其他用途】生成1个镜像存储当更新dockerfile内容的时候会发现已有的内容从缓存获取新增的内容重新创建然后旧有的内容 即临时的容器ID 会移除出去
体现docker特别重要的特点 第一个机制按层堆叠 最底层tomcat容器后面每一步都会产生临时容器堆叠一起 第二个机制采用系统快照 以docker临时容器机制体现每执行一步都会产生一个临时容器对当前状态有一个存档在创建过程中是可以被重用的比如前三步如果是一样的则不需要重新处理只需要将第四步重新构建 好处极大加速镜像构建速度同时也为系统节约资源如下
1、通过执行命令显化docker的机制
1、在image里创建新的目录 mkdir docker_layer
cd docker_layer编辑文件Dockerfile并保存 vim Dockerfile #以下文件内容 centos是docker官方提供的基准镜像会在镜像内创建标准的centos容器
FROM centos
RUN[echo,aaa]
RUN[echo,bbb]
RUN[echo,ccc]
RUN[echo,ddd]容器分层如果没有变化都是用的已有的执行构建指令
docker build -t wq.com/docker_layer:1.0构建过程输出的内容可以看出每个命令都生成一个临时容器在本地就可以看到刚才构建的镜像docker images
2、再次编辑并保存vim Dockerfile
RUN[echo,aaa]
RUN[echo,bbb]
RUN[echo,eee]
RUN[echo,ffff]构建
docker build -t wq.com/docker_layer:1.0发现前面三步使用之前的临时镜像作为缓存从缓存拿来用后面2步是新建的临时容器然后移除之前的容器ID
镜像内部执行分层的镜像和原理容器分层的时候如果命令没有发生变化的步骤都会使用已有的镜像只会对发生变化的语句重新处理
二、Dockerfile基础命令
1、FROM 基于基准镜像【即构建镜像的时候依托原有镜像做拓展】
FROM centos # 制作基准镜像基于centos:latest
FROM scratch # 不依赖任何基准镜像base image
FROM tomcat:9.0.22-jdk8-openjdkps尽量使用官方提供的Base Image2、LABEL MAINTAINER -说明信息
MAINTAINER wq.com
LABEL version1.0
LABEL description testpro3、WORKDIR 设置工作目录
WORKDIR /usr/local
WORKDIR /usr/local/newdir #自动创建ps尽量使用绝对路径 4、ADD COPY 复制文件
ADD absd / #复制到根路径
ADD xxx.tar.gz / # 添加根目录并解压
ADD 除了复制还具备添加远程文件功能5、ENV 设置环境常量
ENV JAVA_HOME /usr/local/openjdk8
RUN ${JAVA_HOME}/bin/java -jar test.jarps :尽量使用环境常量可提高程序维护性 三、Dockerfile 执行指令【RUNENTRYPOINTCMD】 1、RUN-构建时运行
在build构建镜像时执行命令一旦镜像构建完成不允许被修改
2、ENTRYPOINT-容器启动时执行
ENTRYPOINT入口点用于在容器启动时执行命令 Dockerfile中只有最后一个ENTRYPOINT会被执行 推荐使用EXEC形式ENTRYPOINT[ps]
3、CMD-容器启动后执行默认的命令或参数
CMD默认命令 CMD用于设置默认执行的命令 如Dockerfile中出现多个CMD则只有最后一个被执行如容器启动时附加指令则CMD被忽略 推荐使用EXEC格式CMD[ps,ef]
4、Dockerfile执行指令有两种运行格式
linux底层有2种运行方式所以Dockerfile有两种执行方式
1、 Shell命令格式Run yum install -y vim
Shell运行方式实用Shell执行时当前shell是父进程生成一个子shell进程在子shell中执行脚本。脚本执行完毕退出子shell回到当前shell。
2、 Exec命令格式RUN [yum,install,-y,vim]
Exec运行方式使用Exec方式会用Exec进程替换当前进程并且保持PID不变执行完毕直接退出并不会退回之前的进程环境
综合应用官方推荐使用Exec执行命令格式 。
5、命令执行差异 演示
进入到image文件夹
mkdir docker_run
cd docker_run
vim Dockerfile编辑并保存内容
FROM centos
RUN [echo,image building !!!]
CMD [echo,containner starting!!!]进行构建
docker build -t wq.com/docker_run .启动容器
docker run wq.com/docker_run执行构建和启动容器命令后可以看出来cmd命令是默认启动容器会执行 启动容器
docker run wq.com/docker_run ls修改dockerfile内容
FROM centos
RUN [echo,image building !!!]
ENTRYPOINT [echo,containner starting!!!]保存后重新构建
docker build -t wq.com/docker_run .重启docker run wq.com/docker_run 与上面输出内容无差异
修改dockerfile内容
FROM centos
RUN [echo,image building !!!]
ENTRYPOINT [ps]
CMD [-ef]保存后重新构建
docker build -t wq.com/docker_run .重启docker run wq.com/docker_run 与上面输出内容无差异 这样写的好处是cmd可以从外部传参 重启docker run wq.com/docker_run -aux 输出内容更加完整