Docker【9】 |
您所在的位置:网站首页 › docker镜像制作 › Docker【9】 |
在之前的文章中,了解到了Docker的基本知识以及最为炫酷的Docker-compose。我想你不会仅仅满足于此,学习知识的过程犹如吸毒,越学越带劲。 接下来我们以最为通俗的话去理解DockerFile。实现容器化技术的更近一步深入。 一、什么是DcokerFiledockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。可以理解为是用来创建镜像的脚本文件。 因此:我们可以知道,一个新容器的构建有以下步骤: 1、编写DockerFile文件2、docker build 构建镜像3、docker run 二、DockerFile的基本结构Dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。 首先来定制一个简单nginx镜像: (构建好的镜像内会有一个 /usr/share/nginx/html/index.html 文件) 在一个空目录下,新建一个名为 Dockerfile 文件,并在文件内添加以下内容: FROM nginx RUN echo '这是一个本地构建的nginx镜像' > /usr/share/nginx/html/index.html这样,我们的Dockerflile文件就编写完成了,接着就通过 Dockerfile 构建一个 nginx:v3(镜像名称:镜像标签): docker build -t nginx:v3 .这样一个简单的nginx镜像就创建完成。 三、DockerFile的构建指令上节,简单的说明了构建镜像的过程,其实在Dockerfile的编写的根据自己的需要,进行各种自定义操作。 dockerfile的指令: FROM:指定基础镜像(FROM是必备的指令,并且必须为第一条指令)。 RUN: 用来执行命令行命令。其基本格式: shell格式: RUN ,输入在bash环境中的命令即可,一个dockerfile允许使用RUN不得超过127层,所以,使用一次RUN, 使用 ‘ \ ’ 换行,使用‘ && ’执行下一条命令。一般使用此种格式; exec格式: RUN ,此种方式像是函数调用中的格式; COPY: 复制文件。 其基本格式: 格式1:COPY ... 格式2:COPY [“”,.....""] ADD: 更高级的复制文件,在COPY的基础上增加了一些功能,如果复制的是压缩包的话,会直接解压,而不需要在使用RUN解压; CMD:容器启动命令。其基本格式: shell格式: CMD exec格式: CMD ["可执行文件", "参数1", "参数2"...] 参数列表格式: CMD [“参数1”, “参数2”...],在指定了ENTRYPOINT指令后,用CMD指定具体的参数 ENTRYPOINT: 入口点。其基本格式分为exec和shell, ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数。当指定了ENTRYPOINT后,CMD的含义就发生了改变,不在是直接运行其命令,而是将CMD的内容作为参数传递给ENTRYPOINT指令。其执行时就变成了: "" ENV: 设置环境变量。(都可以使用这里使用的变量)其基本格式: 格式1:ENV 格式2:ENV = =... ARG: 构建参数。构建参数和ENV的效果一样,都是设置环境变量,所不同的是ARG所构建的环境变量在将来容器运行时是不存在的。其基本格式: 格式1: ARG [=] 格式2: 该默认值可以在构建命令 docker build 中用 --build-arg = 来覆盖 VOLUME: 定义匿名卷。 其基本格式: 格式1: VOLUME ["", ""...] 格式2: VOLUME EXPOSE: 暴露端口。EXPOSE指令是声明运行时容器所提供的端口,在启动容器时不会在因为这个声明而开启端口。 其基本格式: 格式1: EXPOSE [...] WORKDIR: 指定工作目录。其基本格式: 格式1: WORKDIR USER: 指定当前用户。USER是帮助你切换到指定用户。 其基本格式: 格式1: USER HEALTCHECK: 健康检查,判断容器的状态是否正常。 其基本格式: 格式1: HEALTCHECK [选项] CMD :设置检查容器健康状况的命令 格式2: HEALTCHECK NONE: 如果基础镜像有健康检查指令,使用此格式可以屏蔽掉其健康检Dockerflie的命令是很多的,不过用熟悉了就非常nice了。 简要版命令 FROM基础镜像,当前新镜像是基于哪个镜像的MAINTAINER镜像维护者的姓名混合邮箱地址RUN容器构建时需要运行的命令EXPOSE当前容器对外保留出的端口WORKDIR指定在创建容器后,终端默认登录的进来工作目录,一个落脚点ENV用来在构建镜像过程中设置环境变量ADD将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包COPY类似ADD,拷贝文件和目录到镜像中VOLUME容器数据卷,用于数据保存和持久化工作CMD指定一个容器启动时要运行的命令,dockerFile中可以有多个CMD指令,但只有最后一个生效!ENTRYPOINT指定一个容器启动时要运行的命令!和CMD一样ARG构建时指定的一些参数HEALTHCHECH健康检查USER为RUN、CMD、和 ENTRYPOINT 执行命令指定运行用户总结的构建流程如下: 通过Dockerfile来部署datax容器 首先,datax运行需要python2.x和jdk1.8。 上传jdk1.8 tar包已经datax安装包到本地服务器 在当前目录下编辑Dockerfile文件 1、编写Dockerfile FROM centos/python-27-centos7 //安装jdk ADD jdk-8u221-linux-x64.tar.gz /opt/local ENV JAVA_HOME /opt/local/jdk1.8.0_221 ENV PATH $JAVA_HOME/bin:$PATH // 添加并解压datax文件到/opt/local 目录 ADD datax.tar.gz /opt/local/ // 设置运行的工作目录,可不添加,运行中使用 docker -w 指定 WORKDIR /opt/local/datax ENTRYPOINT ["bash"] 2、构建 格式命令:在当前目录下-> docker build -t="镜像名称:TAG" . . 表示当前目录。 docker build -t="datax_python2" .这个命令必须在Dockerfile文件所在的目录下运行: 查看本地的镜像,可以看到刚刚创建到的镜像: 通过该镜像创建容器: docker run -it --name dataxpython2 datax_python2 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |