1. Dockerfile 文件内容
基本上,一个Dockerfile包含以下的内容:
引用
# version 0.0.1-snapshot
# 从一个基础镜像centos:6.8开始构建
FROM centos:6.8
# 维护者信息
MAINTAINER hylexus "hylexus@163.com"
# 将Dockerfile上下文中的nginx.repo复制到容器中的yum源位置
COPY ./nginx.repo /etc/yum.repos.d/nginx.repo
RUN yum makecache
# 安装nginx
RUN yum install -y nginx
# 修改nginx首页信息
RUN echo "home page of container niginx server" > /usr/share/nginx/html/index.html
# 暴露80端口
EXPOSE 80
2. Dockerfile 基本指令介绍
2.1. FROM
用法:FROM <image>
说明:第一个指令必须是FROM了,其指定一个构建镜像的基础源镜像,如果本地没有就会从公共库中拉取,没有指定镜像的标签会使用默认的latest标签,可以出现多次,如果需要在一个Dockerfile中构建多个镜像。
例如:FROM centos:6.8
2.2. MAINTAINER
用法:MAINTAINER <name> <email>
说明:描述镜像的创建者,名称和邮箱
例如:
引用
MAINTAINER hylexus "hylexus@163.com"
2.3. RUN
用法:RUN "command" "param1" "param2"
说明:RUN命令是一个常用的命令,执行完成之后会成为一个新的镜像,这里也是指镜像的分层构建。一句RUN就是一层,也相当于一个版本。这就是之前说的缓存的原理。我们知道docker是镜像层是只读的,所以你如果第一句安装了软件,用完在后面一句删除是不可能的。所以这种情况要在一句RUN命令中完成,可以通过&符号连接多个RUN语句。RUN后面的必须是双引号不能是单引号(没引号貌似也不要紧),command是不会调用shell的,所以也不会继承相应变量,要查看输入RUN "sh" "-c" "echo" "$HOME",而不是RUN "echo" "$HOME"。一个dockerfile可以有多个RUN,但是要记住每行的RUN都表示在一个新的镜像上面执行。
例如:如果要在同一个镜像上执行多段命令,需要用&&连接命令,如:
引用
RUN /bin/sh -c 'cd /usr/share/nginx/html/ && npm install'
这段RUN由两段命令组成,第一段是cd到一个指定文件夹下,第二段是在该文件夹下安装npm工具。但是如果写成了下面这样:
引用
RUN cd /usr/share/ngnix/html
RUN npm install
表示先在一个镜像上cd到一个指定文件夹,然后又到新的镜像上的根目录安装了npm
2.4. CMD
用法:CMD command param1 param2
说明:CMD在Dockerfile中只能出现一次,如果有多个,只有最后一个会有效。其作用是在启动容器的时候提供一个默认的命令项。如果用户执行docker run的时候提供了命令项,就会覆盖掉这个命令。没提供就会使用构建时的命令。
例如:当我们dockerfile生成了一个叫做test/ubuntu的镜像,我们要run这个镜像并且进入到这个test_ubuntu里面,我们平时需要执行:
Docker run -I -t -name testserver test/Ubuntu /bin/bash
如下段命令添加在了dockerfile中。
CMD ["/bin/bash"]
启动了容器后进入系统,我们就不需要写 /bin/bash了。或者我们run docker容器的时候,我们可以放其他命令,就可以覆盖/bin/bash这个CMD命令。
2.5. EXPOSE
用法:EXPOSE <port> [<port>...]
说明:告诉Docker服务器容器对外映射的容器端口号,在docker run -p的时候生效。可以有多个EXPOSE
例如:
引用
EXPOSE 80
2.6. EVN
用法:EVN <key> <value> 一行只能设置一个
EVN <key>=<value>允许一行一次设置多个
说明:设置容器的环境变量,可以让其后面的RUN命令使用,容器运行的时候这个变量也会保留。
例如:
引用
RUN set -ex && apt-get update && apt-get install -y iputils-ping
ENV PATH /usr/local/bin:$PATH
ENV LANG C.UTF-8
ENV TERM xterm
ENV PYTHON_VERSION 3.5.3
ENV name1=ping name2=on_ip
CMD $name1 $name2
由于镜像的层次文件系统,ENV定义的环境变量在后续层次中才能够被应用,示例如下:
引用
ENV abc=hello
ENV abc=bye def=$abc
ENV ghi=$abc
上述定义的结果中,def=hello,ghi=bye
2.7. ADD
用法:ADD <src> <dest>
说明:复制本机文件或目录或远程文件,添加到指定的容器目录,支持GO的正则模糊匹配。路径是绝对路径,不存在会自动创建。如果源是一个目录,只会复制目录下的内容,目录本身不会复制。ADD命令会将复制的压缩文件夹自动解压,这也是与COPY命令最大的不同。事实上,当要读取URL远程资源的时候,并不推荐使用ADD指令,而是建议使用RUN指令,在RUN指令中执行wget或curl命令。
例如:
引用
#test
FROM ubuntu
MAINTAINER hello
ADD test1.txt test1.txt
ADD test1.txt test1.txt.bak
ADD test1.txt /mydir/
ADD data1 data1
ADD data2 data2
ADD zip.tar /myzip
有如下注意事项:
1. 如果源路径是个文件,且目标路径是以 / 结尾, 则docker会把目标路径当作一个目录,会把源文件拷贝到该目录下。如果目标路径不存在,则会自动创建目标路径。
2. 如果源路径是个文件,且目标路径是不是以 / 结尾,则docker会把目标路径当作一个文件。
如果目标路径不存在,会以目标路径为名创建一个文件,内容同源文件;
如果目标文件是个存在的文件,会用源文件覆盖它,当然只是内容覆盖,文件名还是目标文件名。
如果目标文件实际是个存在的目录,则会源文件拷贝到该目录下。 注意,这种情况下,最好显示的以 / 结尾,以避免混淆。
3. 如果源路径是个目录,且目标路径不存在,则docker会自动以目标路径创建一个目录,把源路径目录下的文件拷贝进来。
如果目标路径是个已经存在的目录,则docker会把源路径目录下的文件拷贝到该目录下。
4. 如果源文件是个归档文件(压缩文件),则docker会自动帮解压。
2.8. COPY
用法:COPY <src> <dest>
说明:COPY除了不能自动解压,也不能复制网络文件。其它功能和ADD相同。
因为有ADD的强大,对COPY不做更多说明。
2.9. ENTRYPOINT
用法:ENTRYPOINT "command" "param1" "param2"
说明:这个命令和CMD命令一样,唯一的区别是不能被docker run命令的执行命令覆盖,如果要覆盖需要带上选项--entrypoint,如果有多个选项,只有最后一个会生效。
因为不会被run覆盖,ENTRYPOINT可以配合docker run来使用。Docker run后面跟的参数作为ENTRYPOINT的参数来使用
例如:
引用
FROM centos
MAINTAINER allocator
RUN yum install -y nginx
RUN echo 'hello world' > /usr/share/nginx/html/index.html
EXPOSE 80
ENTRYPOINT ["/usr/sbin/nginx"]
CMD ["-h"]
当我们启动镜像的时候不给参数
docker run --name test -p 5000:80 -it test_nginx
系统会用CMD指定的参数-h来运行ENTRYPOINT的命令。
当我们启动镜像的时候加了参数
docker run --name test -p 5000:80 -it test_nginx -g "daemon off"
系统会替换到CMD的参数用 -g "daemon off"来运行ENTRYPOINT的命令
2.10. VOLUME
用法:VOLUME ["path"]
说明:在主机上创建一个挂载,挂载到容器的指定路径。docker run -v命令也能完成这个操作,而且更强大。这个命令不能指定主机的需要挂载到容器的文件夹路径。但docker run -v可以,而且其还可以挂载数据容器。
2.11. USER
用法: USER <user>[:<group>] or
USER <UID>[:<GID>]
说明:指定运行容器时的用户名或UID,后续的RUN、CMD、ENTRYPOINT也会使用指定的用户运行命令。
2.12. WORKDIR
用法:WORKDIR path
说明:为RUN、CMD、ENTRYPOINT指令配置工作目录。可以使用多个WORKDIR指令,后续参数如果是相对路径,则会基于之前的命令指定的路径。
例如:WORKDIR /home WORKDIR test 。最终的路径就是/home/test。path路径也可以是环境变量,比如有环境变量HOME=/home,WORKDIR $HOME/test也就是/home/test。
2.13. ONBUILD
用法:ONBUILD [INSTRUCTION]
说明:配置当前所创建的镜像作为其它新创建镜像的基础镜像时,所执行的操作指令。意思就是,这个镜像创建后,如果其它镜像以这个镜像为基础,会先执行这个镜像的ONBUILD命令。
分享到:
相关推荐
docker、docker-compose 一键安装sentinel高可用redis集群 (一台虚拟机上安装的伪高可用集群,学习使用,可以修改文件配置相关参数,非原创,亲测可用) 安装前先安装 docker、docker-compose 第一步(脚本文件可以...
本篇将详细介绍x86-64架构下Dockerfile文件与完整镜像文件的应用及其重要性。 x86-64架构是基于Intel技术的一种64位计算架构,广泛应用于台式机、笔记本、服务器等设备。其相较于32位架构,能提供更大的内存访问...
docker、docker-compose 一键安装redis集群 (一台虚拟机上安装的伪集群,学习使用,可以修改文件配置相关参数,非原创,亲测可用) 第一步 /usr/local/下依次建docker、redis目录“/usr/local/docker/redis” 第二步 ...
在该压缩包中,可能包含了一系列配置文件、Dockerfile 和 docker-compose.yml 文件,用于构建和配置这些组件的容器。用户通过学习这个资源,可以了解如何在Docker环境下配置和运行ClickHouse、Elasticsearch、Kafka...
Docker 是当前流行的开源应用容器...整体来说,Docker 入门学习的内容旨在为初学者提供一套系统的学习路径,帮助他们从零开始,逐步掌握 Docker 的核心使用方法,为进一步深入学习和实际应用 Docker 打下坚实的基础。
docker 介绍 架构 安装 组成 命令 帮助命令 docker version docker info docker --help 镜像命令 docker images ... Dockerfile介绍 是什么 执行流程 关键字 数据卷 容器
下载安装包只是开始使用Docker的第一步,用户还需要学习如何使用Docker命令行工具来管理容器,以及如何编写Dockerfile来构建自己的镜像。随着容器技术的不断发展,Docker仍然是一个不断演进的项目,用户需要关注...
Docker-Compose项目是Docker官方的开源项目,... 使用一个Dockerfile模板文件, 可以让用户很方便的定义一个单独的应用容器。在工作中,经常会碰到需要多个容器相互配合来完成某 项任务的情况。例如要实现一个Web项目,
接着,内容会涵盖如何获取并使用官方MySQL 8.0 Docker镜像,包括如何从Docker Hub下载镜像,以及如何通过命令行工具管理和运行容器。 安装和配置过程将详细解释如何设置MySQL的环境变量,例如如何配置root用户的...
在项目文件中,还包含了一定数量的文本文件、SVG矢量图形文件、SCSS预编译样式文件以及配置文件,这些文件共同作用于课程内容的完整性和功能性。其中配置文件数量为6个,这些文件通常用于设定系统环境和项目运行参数...
Rstudio Server + Docker + tensorflowR - 云端使用R语言与GPU深度学习
- 解压后的源码中可能包含 Dockerfile,这是一个定义构建 Docker 映像步骤的文本文件。 - Dockerfile 描述了如何构建一个 Docker 映像,包括基础镜像选择、复制源代码、设置环境变量、安装依赖、定义启动命令等。 ...
学习和掌握Dockerfile的编写,以及docker-compose的使用,对于开发者和系统管理员来说极为重要。它们能够帮助我们实现服务的标准化、可移植性和自动化部署,同时减少因为环境不一致带来的问题。在实际操作中,我们...
通过这个集合,你不仅可以学习如何编写 Docker Compose 配置文件,还可以了解到如何有效地组织多容器应用,理解服务间的依赖关系,以及如何通过 Dockerfile 自定义和优化你的应用环境。此外,对于开发、测试和部署...
目录网盘文件永久链接 01-Docker基础应用 01-Docker介绍 02-Docker应用场景 03-Docker镜像和容器 04-Docker进入容器和网络访问 05-Docker数据管理. 06-Docker镜像构建-手动构建 07-Docker镜像构建-Dockerfile 08-...
最后,安装Docker后,可以进一步学习Docker的使用,例如学习如何从Docker Hub拉取镜像、如何创建自己的Dockerfile来构建镜像、如何运行容器以及如何管理容器等。 Docker极大地简化了应用部署和环境配置的复杂性,...
Dockerfile 是一个文本文件,用于定义 Docker 镜像的构建过程。Docker-Compose 是一个用于定义和运行多容器的工具,允许开发者快速定义和部署多容器应用程序。 知识点5: Maven plug-in Maven 是一个项目管理工具...
- Dockerfile编写指南:介绍如何编写Dockerfile来构建自定义的Docker镜像。 - 网络配置教程:展示了如何在Docker容器之间以及容器与宿主机之间进行网络通信的配置。 - 存储和数据管理:讲解如何在Docker容器中管理...
本文将详细介绍Docker的快速入门知识,包括安装、基础命令、存储和网络配置、Redis主从同步集群的搭建、MySQL的启动、Docker Compose的使用,以及Dockerfile的编写,最后介绍一键安装超多中间件的附录内容。...
Dockerfile是一种文本文件,其中包含了可以自动执行的命令来组装一个Docker镜像。Dockerfile.dapper可能就是用户项目中的一个Dockerfile,用于描述如何构建项目所需的镜像。 除了Dockerfile之外,项目中通常还会...