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

阅读剩余
THE END