Dockerfile

构建镜像:dockerfile;
启动容器:docker run;
编排容器和启动服务:docker-compose。

Dockerfile结构大致分为四个部分:基础镜像信息;维护者信息;镜像操作指令;容器启动时执行指令。Dockerfile每行支持一条指令,每条指令可带多个参数,支持使用以#号开头的注释。

FROM:指定基础镜像
指明构建的新镜像是来自于哪个基础镜像

MAINTAINER
指明镜像维护者及其联系方式(一般是邮箱地址),MAINTAINER不推荐使用,更推荐使用LABEL来指定镜像作者
  
RUN:执行命令
构建镜像时运行的Shell命令:
shell 格式:RUN <命令>
exec 格式:RUN [“可执行文件”, “参数1”, “参数2”] 。

CMD:容器启动命令。
启动容器时执行的Shell命令:
shell 格式:CMD <命令>
exec 格式:CMD [“可执行文件”, “参数1”, “参数2”…]

EXPOSE:暴露端口
声明容器运行的服务端口,EXPOSE <端口1> [<端口2>…]
EXPOSE :EXPOSE 仅仅是声明容器打算使用什么端口而已,并不会自动在宿主进行端口映射。
  
ENV:设置环境变量,其他指令可直接引用
设置环境内环境变量:

ENV  
ENV = =...

**ADD:高级复制文件,拷贝文件或目录到镜像中
如果是URL或压缩包,会自动下载或自动解压。

COPY:复制文本,用法同ADD,不支持自动下载和解压
<源路径> 可以是多个、以及使用通配符,通配符规则满足Go的filepath.Match 规则,
<目标路径>使用 COPY 指令,源文件的各种元数据都会保留。比如读、写、执行权限、文件变更时间等。
COPY <源路径>… <目标路径>
COPY ["<源路径1>",… “<目标路径>”]

ENTRYPOINT:入口点。同CMD,指定容器启动程序及参数
通过–entrypoint 参数在运行时替换。
启动容器时执行的Shell命令,同CMD类似,只是由ENTRYPOINT启动的程序不会被docker run命令行指定的参数所覆盖,而且,这些命令行参数会被当作参数传递给ENTRYPOINT指定指定的程序。
Dockerfile文件中也可以存在多个ENTRYPOINT指令,但仅有最后一个会生效。

VOLUME:定义匿名卷
指定容器挂载点到宿主机自动生成的目录或其他容器。
一般不会在Dockerfile中用到,更常见的还是在docker run的时候指定-v数据卷。
VOLUME ["<路径1>", “<路径2>”…]
VOLUME <路径>

USER:指定当前用户
为RUN、CMD和ENTRYPOINT执行Shell命令指定运行用户:
USER [:]
USER [:]

WORKDIR:指定工作目录
为RUN、CMD、ENTRYPOINT以及COPY和AND设置工作目录:
WORKDIR /data
WORKDIR <工作目录路径>
两次run不在一个环境内,可以使用WORKDIR。

HEALTHCHECK:健康检查
告诉Docker如何测试容器以检查它是否仍在工作,即健康检查:
HEALTHCHECK --interval=5m --timeout=3s --retries=3
CMD curl -f http:/localhost/ || exit 1
其中,一些选项的说明。 --interval=DURATION (default: 30s):每隔多长时间探测一次,默认30秒; – timeout= DURATION (default: 30s):服务响应超时时长,默认30秒; --start-period= DURATION (default: 0s):服务启动多久后开始探测,默认0秒; --retries=N (default: 3):认为检测失败几次为宕机,默认3次。
一些返回值的说明。0:容器成功是健康的,随时可以使用; 1:不健康的容器无法正常工作;2:保留不使用此退出代码。

ARG:构建参数
与ENV不同的是,容器运行时不会存在这些环境变量。可以用 docker build --build-arg <参数名>=<值> 来覆盖。

总结:
有了Dockerfile,就可以创建镜像并创建容器:
docker build -t tomcat:v1 .
docker run -itd --name=tomcat -p 8080:8080 -v /app/webapps/:/usr/local/apache-tomcat-8.0.46/webapps/ tomcat:v1

你可能感兴趣的:(Docker,CentOS,7,docker,centos)