Dockerfile脚本
利用脚本构建、定制镜像,把每一层修改、安装、构建、操作的命令写入脚本,
对每一层添加的配置、文件进行镜像的定制 Dokcerfile是一个文本文件,
包含一条条的指令,每一条指令构建一层。利用读取Dockerfile指定生成镜像
1、dockerfile主要组成
- 基础镜像信息
FROM centos6:8
- 制作镜像操作指令
Run yum install openssh-server -y
- 容器启动时执行指令
CMD["/bin/bash"]
2、dockerfile指令
FORM 指定基础镜像
MAINTAINER 指定维护者信息
RUN 在命令前面加上RUN即可
ADD 添加宿主机的文件到容器内(COPY文件,会自动解压)
WORKDIR 设置当前工作目录
VOLUME 设置卷,挂载主机目录
EXPOSE 指定对外的端口
CMD 指定容器启动后所干事项 CMD ["参数","参数"]
COPY 作用和add一样,仅拷贝,不包含自动解压
ENV
ENTRYPOINT
3、dockerfile考点
3.1、ADD与COPY的区别
COPY
COPY指令从宿主机复制文件/目录到新的一层镜像内
如
copy chaoge.py /home/
#支持多个文件,以及通配符形式复制,语法要满足Golang的filepath.Match
copy chaoge* /tmp/cc?.txt /home/
#COPY指令能够保留源文件的元数据,如权限,访问时间等等
ADD
特性和COPY基本一致,不过多了一些功能
1、源文件是一个URL,此时docker引擎会下载该链接,放入目标路径,且权限自动设为600
2、源文件是一个URL,且是一个压缩包,不会自动解压,也得单独用RUN指令解压
3、源文件不是一个压缩文件,且是gzip,bzip2,xz,tar情况,ADD指令会自动解压该文件到目标路径
3.2、ENTRYPOINT与CMD的区别
CMD
用法,注意是双引号
CMD ["参数1","参数2“]
在指定了enterpoint指令后,用CMD指定具体的参数
docker不是虚拟机,容器就是一个进程,既然是进程,那么程序在启动的时候需要指定一些运行参数,这就是CMD指令的作用
ENTRYPOINT
ENTRYPOINT和CMD都一样,都是在指定容器启动程序以及参数
-----------------
当指定了ENTRYPOINT之后,CMD指令的语义就有了变化,
而是把CMD的内容当做参数传递给了ENTRYPOINT指令
3.3、ARG和ENV的区别
设置环境变量
ENV NAME="xikai"
ENV AGE="18"
ENV MYSQL_VERSION=5.6
后续所有的操作,通过$NAME 就可以直接获取变量值,维护dockerfile脚本更加友好
ARG和ENV一样,设置环境变量
区别在于ENV无论是在镜像构建时,还是容器运行时,该变量都可以使用
ARG只是用于构建镜像时需要设置的变量,容器运行时就消失
4、VOLUME
容器在运行时,应该保证在存储层不写入任何数据,运行在容器内产生的数据,我们推荐是挂载,写入到宿主机上,进行维护
VOLUME /data
#将容器内的data文件夹,在容器运行时,该目录自动挂载为匿名卷,任何向该目录中写入数据的操作,都不会被容器记录,保证容器存储层无状态理论
#Dockerfile1
FROM centos
MAINTAINER xikai
VOLUME ["/data1","/data2"]
-------------------------------
1、容器数据挂载的方式,是通过dockerfile,指定VOLUME目录
2、通过docker run -v 参数,直接设置需要映射挂载的目录
5、EXPOSE
指定容器运行时对外提供的端口服务
docker port 容器
docker run -p 宿主机端口:容器端口
docker run -P #作用是随机宿主机端口:容器内端口
6、WORKDIR
用于在dockerfile 中,目录的切换,更改工作目录
WORKDIR /opt
7、USER
用于改变环境,用于切换用户
USER root
阅读剩余
版权声明:
作者:做个超努力的小奚&kervin24
个人博客站:http://www.kervin24.top
CSDN博客:https://blog.csdn.net/qq_52914969?type=blog
作者:做个超努力的小奚&kervin24
个人博客站:http://www.kervin24.top
CSDN博客:https://blog.csdn.net/qq_52914969?type=blog
THE END