5.Dockerfile
Posted zhihaospace
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了5.Dockerfile相关的知识,希望对你有一定的参考价值。
一.Dockerfile镜像原理
1.原理
2.镜像的制作
(1)让开发人员的环境和测试人员的环境一致,不然环境好移植和统一
(2)制作方式两种:容器转镜像,dockerfile (这里只讲容器转镜像,下一大段讲dockerfile)
-
容器转镜像:(注意数据丢失情况)
-
步骤:
-
开发人员将运行的容器生成新的镜像
-
然后将新的镜像生成压缩文件
-
最后将压缩文件交给测试人员
-
测试人员拿到压缩文件后可以解压的到新的镜像,此时开发人员的环境和测试人员的环境一致
-
-
注意事项:
-
开发人员的容器会挂载数据卷,如果生成新的镜像则挂载数据卷的数据会丢失,没有挂在数据卷的数据不丢失
-
例子:tomcat中webapps挂载了宿主容器目录此时生成新的镜像,则webapps中的数据丢失
-
-
操作命令:
-
容器转为镜像:
-
语法: docker commit 容器的id 新的镜像名:新的版本号
-
例子: docker commit 5512d4c new_tomcat:1.0 ,将容器ID为5512d4c....的容器生成新的镜像,新的镜像名字为new_tomcat,版本为1.0
-
-
镜像压缩为压缩文件:
-
语法: docker save -o 生成的压缩文件名 需要压缩的镜像:版本号
-
例子: docker save -o new_tomcat.tar new_tomcat:1.0 ,将镜像名为new_tomcat,版本号为1.0的镜像压缩为new_tomcat.tar文件
-
-
加载并解压压缩文件:
-
语法: docker load -i 压缩文件名
-
例子: docker load -i new_tomcat.tar ,将压缩的镜像new_tomcat.tar解压并加载到docker镜像中
-
-
-
二.Dockerfile概念及作用
三.Dockerfile关键字
关键字 | 作用 | 备注 |
---|---|---|
FROM | 指定父镜像 | 指定dockerfile基于那个image构建 |
MAINTAINER | 作者信息 | 用来标明这个dockerfile谁写的 |
LABEL | 标签 | 用来标明dockerfile的标签 可以使用Label代替Maintainer 最终都是在docker image基本信息中可以查看 |
RUN | 执行命令 | 执行一段命令 默认是/bin/sh 格式: RUN command 或者 RUN ["command" , "param1","param2"] |
CMD | 容器启动命令 | 提供启动容器时候的默认命令 和ENTRYPOINT配合使用.格式 CMD command param1 param2 或者 CMD ["command" , "param1","param2"] |
ENTRYPOINT | 入口 | 一般在制作一些执行就关闭的容器中会使用 |
COPY | 复制文件 | build的时候复制文件到image中 |
ADD | 添加文件 | build的时候添加文件到image中 不仅仅局限于当前build上下文 可以来源于远程服务 |
ENV | 环境变量 | 指定build时候的环境变量 可以在启动的容器的时候 通过-e覆盖 格式ENV name=value |
ARG | 构建参数 | 构建参数 只在构建的时候使用的参数 如果有ENV 那么ENV的相同名字的值始终覆盖arg的参数 |
VOLUME | 定义外部可以挂载的数据卷 | 指定build的image那些目录可以启动的时候挂载到文件系统中 启动容器的时候使用 -v 绑定 格式 VOLUME ["目录"] |
EXPOSE | 暴露端口 | 定义容器运行的时候监听的端口 启动容器的使用-p来绑定暴露端口 格式: EXPOSE 8080 或者 EXPOSE 8080/udp |
WORKDIR | 工作目录 | 指定容器内部的工作目录 如果没有创建则自动创建 如果指定/ 使用的是绝对地址 如果不是/开头那么是在上一条workdir的路径的相对路径 |
USER | 指定执行用户 | 指定build或者启动的时候 用户 在RUN CMD ENTRYPONT执行的时候的用户 |
HEALTHCHECK | 健康检查 | 指定监测当前容器的健康监测的命令 基本上没用 因为很多时候 应用本身有健康监测机制 |
ONBUILD | 触发器 | 当存在ONBUILD关键字的镜像作为基础镜像的时候 当执行FROM完成之后 会执行 ONBUILD的命令 但是不影响当前镜像 用处也不怎么大 |
STOPSIGNAL | 发送信号量到宿主机 | 该STOPSIGNAL指令设置将发送到容器的系统调用信号以退出。 |
SHELL | 指定执行脚本的shell | 指定RUN CMD ENTRYPOINT 执行命令的时候 使用的shell |
四.案例
1.案例一:
(1)需求:
-
自定义一个centos7镜像
-
默认登录路径为/usr
-
可以使用vim
注:官方下载的centos7镜像,默认登录路径为/ (根目录),不能使用vim命令,但可以使用vi命令
(2)实现步骤
-
定义父镜像:FROM centos:7
-
定义作者信息:MAINTAINER wzh <ustc_wzh@ustc.edu.cn>
-
执行安装vim命令:RUN yum install -y vim
-
定义默认的工作目录:WORKDIR /usr
-
定义容器启动执行的命令:CMD /bin/bash
(3)具体实施步骤
-
在用户根目录中建立docker-files文件夹: [root@ustc-wzh ~]# mkdir docker-files
-
进入docker-files目录: [root@ustc-wzh ~]# cd docker-files/
-
创建一个centos_dockerfile新文件: [root@ustc-wzh docker-files]# vim centos_dockerfile
-
centos_dockerfile内容:
FROM centos:7 MAINTAINER wzh <ustc_wzh@ustc.edu.cn> RUN yum install -y vim WORKDIR /usr CMD /bin/bash
-
由centos_dockerfile生成新的镜像:
-
命令:[root@ustc-wzh docker-files]# docker build -f ./centos_dockerfile -t new_centos:7 .
-
解释:-f之后放dockerfile文件,-t之后为新的镜像名和版本号,注意最后一个点表示指定镜像构建的上下文目录
-
最后一个点的意思链接:https://blog.csdn.net/xs20691718/article/details/79502019
-
-
执行完成显示: Successfully tagged new_centos:7
-
查看新生成的镜像: [root@ustc-wzh docker-files]# docker images
2.案例二:
以上是关于5.Dockerfile的主要内容,如果未能解决你的问题,请参考以下文章