制作Docker image有两种方式: 一是使用Docker container(docker save container_name -o test.tar ) ,再导出image,而是使用Dockerfile, 将所有动作导入到文件中,使用build命令制作成镜像。
一,Dockerfile基本结构
一般的Dockerfile分为四个部分:基础镜像信息,维护者信息,镜像操作指令和容器启动时的指令
FROM nginx:1.13.5-alpine MAINTAINER SXY Team
FROM:指定基础镜像,要在哪个镜像建立
FROM
第一条指令必须为FROM指令
站在用户的角度思考问题,与客户深入沟通,找到全南网站设计与全南网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站制作、成都网站建设、外贸营销网站建设、企业官网、英文网站、手机端网站、网站推广、域名注册、网站空间、企业邮箱。业务覆盖全南地区。
MAINTAINER: 指定维护者信息
MAINTAINER
RUN: 在镜像中要执行的命令
RUN
前者将shell终端中运行命令,即/bin/bash -c;后者则使用exec执行,指定使用其他终端可以通过第二种方式实现,例如RUN ["/bin/bash", "-c", "echo hello"]
WORKDIR: 指定当前工作目录,相当于cd
WORKDIR /path/to/workdir
为后续的RUN,CMD,ENTRYPOINT指令配置工作目录,可以使用多个WORKDIR指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径,例如
WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd
则最终的路径/a/b/c
EXPOSE:指定容器需要被打开的端口
EXPOSE 80
告诉docker服务容器需要暴露的端口,但是目前只在容器中暴露,如果想要在节点进行暴露则需要-p 80:80,或者-P(主机将为其暴露一个随机端口)
ENV: 定义环境变量
ENV
指定一个环境变量在容器中生成
ENV managementapi http://192.168.3.226
COPY: 复制本地dockerfile路径根目录下的文件到容器文件中
COPY
ADD: 相当于COPY,但比COPY功能强大
ADD
此命令也是将主机任何地方文件到容器文件中,但是可以复制tar文件时,也会自动展开
VOLUME: 挂载目录
VOLUME ["/data"]
创建一个可以从本地主机或者其他容器的挂载点,一般用来存放数据
USER:
USER daemon
指定运行容器时的用户名或UID,后续的RUN也会使用指定用户。当服务不需要管理员权限时,可以通过该命令指定运行用户,并且可以在之前创建需要的用户 RUN useradd -s /sbin/nologin -M www。
ENTRYPOINT
两种格式:
ENTRYPOINT ["executable","param1","param2"]
ENTRYPOINT command param1 param2 (shell)
配置容器启动后执行的命令,并且不可被docker run参数覆盖,每个Dockerfile中只能有一个ENTRYPOINT,当指定多个时,只有最后一个生效
CMD:
支持三种格式
CMD ["executable","param1","param2"] 使用exec执行
CMD command1 command2 command3 在/bin/bash中执行,提供给需要交互应用
CMD ["param1","param2"] 提供给 ENTRYPOINT 的默认参数;
指定启动容器时执行的命令,每个Dockerfile只能有一条CMD命令。如果指定了多条命令,只有最后一条会被执行,则会覆盖掉CMD指定命令
ENTRYPOINT和CMD的区别: ENTRYPOINT指定了该镜像启动时入口,CMD则指定了容器启动时的命令,当两者共用时,完整的启动命令像是ENTRYPOINT+CMD,使用ENTRYPOINT的好处是在我们启动镜像就像是启动了一个可执行程序,在CMD上仅需要指定参数;另外在我们自定义CMD时不容易出错
使用CMD的Dockerfile:
FROM MySQL
CMD ["echo","test"]
使用ENTRYPOINT的Dockerfile
FROM mysql
ENTRYPOINT ["echo","test"]
ENTRYPOINT不能覆盖掉执行时的参数,会把启动镜像是的命令当参数,而CMD可以覆盖掉默认的参数
新闻标题:Dockerfile详解
文章URL:http://lswzjz.com/article/jjcijg.html