Docker的镜像构建
一.镜像介绍1.docker镜像结构共享宿主机的kernelbase镜像提供的是最小的Linux发行版同一docker主机支持运行多种Linux发行版采用分层结构的最大好处是共享资源2.镜像运行的基本原理Copy-on-Write 可写容器层容器层以下所有镜像层都是只读的docker从上往下依次查找文件容器层保存镜像变化的部分并不会对镜像本身进行任何修改一个镜像最多127层3.镜像获得方式基本镜像通常由软件官方提供企业镜像可以用官方镜像Dockerfile来生成系统关于镜像的获取动作有两种docker pull 镜像地址docker load –i 本地镜像包二.镜像构建构建参数1.参数示例及用法建立构建目录FROM指定base镜像 egFROM busybox:versionCOPY复制文件 egCOPY file /file 或者 COPY [“file”,”/”][rootdocker-node1 ~]# mkdir docker [rootdocker-node1 ~]# cd docker/#编写构建规则文件 [rootdocker-node1 docker]# vim Dockerfile #FROM FROM busybox:latest #COPY [rootdocker-node1 docker]# echo timinglee timinglee [rootdocker-node1 docker]# cat timinglee[rootdocker-node1 docker]# vim Dockerfile#构建命令创建容器名字叫做timingleev1 . 表示当前目前[rootdocker-node1 docker]# docker build -t timinglee:v1 .[rootdocker-node1 docker]# docker imagesMAINTAINER指定作者信息比如邮箱 egMAINTAINER userexample.com在最新版的docker中用LABEL KEYVALUE代替#LABEL KEYVALUEScLABEL createrleeADD功能和copy相似指定压缩文件或url eg: ADD test.tar /mnt 或者 egADD http://ip/test.tar /mnt#ADD[rootdocker-node1 docker]# echo lee lee [rootdocker-node1 docker]# vim DockerfileFROM busybox:latestLABEL CreaterleeCOPY timinglee /rootADD lee /root#add可以解压缩COPY不能FROM busybox:latestLABEL CreaterleeCOPY bin.tar.gz /rootADD bin.tar.gz /mntENV指定环境变量 egENV FILENAME test#ENVENV NAMEtimingleeRUN [/bin/sh,-c, touch /root/$NAME ]EXPOSE暴漏容器端口 egEXPOSE 80#EXPOSEEXPOSE 8080[rootdocker-node1 docker]# docker history lee:v5VOLUME申明数据卷通常指数据挂载点 egVOLUME [“/var/www/html”]RUN在容器中运行的指令 eg: touch file#VOLUEMFROM busybox:latestLABEL CreaterleeENV NAMEtimingleeEXPOSE 8080VOLUME /mntRUN [/bin/sh,-c, touch /root/$NAME ]#测试[rootdocker-node1 docker]# docker run -it --name test --rm lee:v6 [rootdocker-node1 ~]# docker inspect test | grep -i mounts -A10Mounts: [{Type: volume,Name: 951e0ad881eda84a037614657b89cae88adac7c600ac03cd9505c067cee04741,Source: /var/lib/docker/volumes/951e0ad881eda84a037614657b89cae88adac7c600ac03cd9505c067cee04741/_data,Destination: /mnt,Driver: local,Mode: ,RW: true,Propagation: }[rootdocker-node1 ~]# cd /var/lib/docker/volumes/951e0ad881eda84a037614657b89cae88adac7c600ac03cd9505c067cee04741/_data“[rootdocker-node1 _data]# touch lee{1..5}#在容器中/ # ls /mnt/lee1 lee2 lee3 lee4 lee5WORKDIR切换路径 egWORKDIR /mnt#WORKDIRFROM busybox:latestLABEL CreaterleeENV NAMEtimingleeEXPOSE 8080VOLUME /mntRUN [/bin/sh,-c, touch /root/$NAME ]WORKDIR /mnt[rootdocker-node1 docker]# docker run -it --name test --rm lee:v7CMD在启动容器时自动运行动作可以被覆盖 egCMD echo $FILENAME 会调用shell解析 egCMD [“/bin/sh”,”-c”,“echo $FILENAME”] 不调用shell解析#CMD#ENV CMDFROM busyboxMAINTAINER leetiminglee.orgENV NAME lee#CMD echo $NAME#CMD [/bin/echo, $NAME]CMD [/bin/sh, -c, /bin/echo $NAME][rootDocker-node1 docker]# docker run -it --rm --name test example:v3]# docker run -it --name test --rm lee:v8 echo hahaENTRYPOINT和CMD功能和用法类似但动作不可被覆盖#ENTRYPOINTFROM busyboxMAINTAINER leetiminglee.orgENV NAME leeENTRYPOINT echo $NAME[rootDocker-node1 docker]# docker run -it --rm --name test example:v3 shlee[rootdocker-node1 docker]# docker run -it --name test --rm lee:v8timinglee[rootdocker-node1 docker]# docker run -it --name test --rm lee:v8 echo hahatiminglee结果保存一致三. 小结FROM指定base镜像 egFROM busybox:versionCOPY复制文件 egCOPY file /file 或者 COPY [“file”,”/”]MAINTAINER指定作者信息比如邮箱 egMAINTAINER userexample.com在最新版的docker中用LABEL KEYVALUE代替ADD功能和copy相似指定压缩文件或url eg: ADD test.tar /mnt 或者 egADD http://ip/test.tar /mntENV指定环境变量 egENV FILENAME testEXPOSE暴漏容器端口 egEXPOSE 80VOLUME申明数据卷通常指数据挂载点 egVOLUME [“/var/www/html”]WORKDIR切换路径 egWORKDIR /mntRUN在容器中运行的指令 eg: touch fileCMD在启动容器时自动运行动作可以被覆盖 egCMD echo $FILENAME 会调用shell解析 egCMD [“/bin/sh”,”-c”,“echo $FILENAME”] 不调用shell解析ENTRYPOINT和CMD功能和用法类似但动作不可被覆盖认识新方法CTRLrBash/Zsh 反向搜索reverse-i-search使用笔记反向搜索reverse-i-search是 ShellBash/Zsh内置的高效历史命令检索工具可通过关键词快速定位并复用之前执行过的命令避免重复输入。快捷键功能Ctrl r触发反向搜索Ctrl r搜索中向前翻找历史匹配Ctrl g取消搜索←/→加载命令到当前行编辑
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2427296.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!