在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
什么是Dockerfile Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。它们简化了从头到尾的流程并极大的简化了部署工作。Dockerfile从FROM命令开始,紧接着跟随者各种方法,命令和参数。其产出为一个新的可以用于创建容器的镜像。 当你在使用 Docker构建镜像的时候,每一个命令都会在前一个命令的基础上形成一个新层。这些基础镜像可以用于创建新的容器。本篇文章将手把手教您如何从基础镜像,一步一步,一层一层的从Dockerfile构建容器的过程。 Dockerfile示例 # Version 1.0 Docker执行步骤分析 以上Dockerfile示例中,每条指令都会创建一个新的镜像层并对镜像进行提交.Docker执行Dockerfile大致流程:
示例解析
Dockerfile指令汇总及解析 MAINTAINER # MAINTAINER [name] [email] FROM FROM命令可能是最重要的Dockerfile命令。改命令定义了使用哪个基础镜像启动构建流程。基础镜像可以为任意镜 像。如果基础镜像没有被发现,Docker将试图从Docker image index来查找该镜像。FROM命令必须是Dockerfile的首个命令。 # FROM [image name] FROM ubuntu ADD ADD命令有两个参数,源和目标。它的基本作用是从源系统的文件系统上复制文件到目标容器的文件系统。如果源是一个URL,那该URL的内容将被下载并复制到容器中。 # ADD [source directory or URL] [destination directory] ADD /my_app_folder /my_app_folder RUN RUN命令是Dockerfile执行命令的核心部分。它接受命令作为参数并用于创建镜像。不像CMD命令,RUN命令用于创建镜像(在之前commit的层之上形成新的层)。 # RUN [command] RUN apt-get update CMD 和RUN命令相似,CMD可以用于执行特定的命令。和RUN不同的是,这些命令不是在镜像构建的过程中执行的,而是在用镜像构建容器后被调用。 # CMD application "argument", "argument", .. CMD "echo" "Hello Mao!" ENTRYPOINT ENTRYPOINT帮助你配置一个容器使之可执行化,如果你结合CMD命令和ENTRYPOINT命令,你可以从CMD命令中移除“application”而仅仅保留参数,参数将传递给ENTRYPOINT命令。 # Usage: ENTRYPOINT application "argument", "argument", .. # Usage example with CMD: ENV ENV命令用于设置环境变量。这些变量以”key=value”的形式存在,并可以在容器内被脚本或者程序调用。这个机制给在容器中运行应用带来了极大的便利。 # ENV key value ENV SERVER_WORKS 4 USER USER命令用于设置运行容器的UID。 # USER [UID] USER 751 VOLUME VOLUME命令用于让你的容器访问宿主机上的目录。 # VOLUME ["/dir_1", "/dir_2" ..] VOLUME ["/my_files"] WORKDIR WORKDIR命令用于设置CMD指明的命令的运行目录。 # WORKDIR /path WORKDIR ~/ EXPOSE EXPOSE指令用来告诉Docker这个容器在运行时会监听哪些端口,Docker在连接不同的容器(使用–link参数)时使用这些信息; # EXPOSE [port] # private and public mapping # private only 最后我们来个简单的示例吧 使用Dockerfile自动构建Nginx容器 因为我们命令Docker用当前目录的Nginx的配置文件替换默认的配置文件,我们要保证这个新的配置文件存在。在Dockerfile存在的目录下,创建nginx.conf: sudo nano nginx.conf 然后用下述内容替换原有内容: worker_processes 1; events { worker_connections 1024; } http { sendfile on; server { listen 80; location / { proxy_pass http://httpstat.us/; proxy_set_header X-Real-IP $remote_addr; } } } 让我们保存nginx.conf。之后我们就可以用Dockerfile和配置文件来构建镜像。 |
请发表评论