当前位置: 首页 > 科技观察

Dockerfile命令介绍及示例

时间:2023-03-18 23:26:29 科技观察

基本镜像可以用来创建Docker容器。映像可以非常基本,仅包含操作系统,也可以非常丰富,包含整洁的应用程序堆栈,随时可以发布。当您使用Docker构建图像时,每个命令都会在前一个命令之上形成一个新层。这些基础镜像可用于创建新容器。本文将一步步教你如何从一个基本镜像一步一步构建一个容器。Docker简介Docker项目提供了在Linux内核功能之上协同工作的高级工具。它的目标是帮助开发人员和运营商更轻松地跨系统和主机交付应用程序及其依赖项。Docker通过Docker容器实现这一目标,Docker容器是一种安全、轻量级的基于容器的环境。这些容器是从图像创建的,图像可以通过命令行手动创建,也可以通过Dockerfile自动创建。DockerfileDockerfile是一个脚本,由一系列应用于基础镜像并最终创建新镜像的命令和参数组成。它们简化了从开始到结束的过程,并极大地简化了部署。Dockerfile以FROM命令开头,后跟各种方法、命令和参数。输出是可用于创建容器的新图像。Dockerfile语法在深入研究Dockerfile之前,让我们快速回顾一下Dockerfile的语法及其含义。什么是语法?很简单,在编程中,语法就是调用命令、输入参数使应用程序执行程序的语法结构。这些语法明确或隐含地受规则约束。程序员遵循语法约定与计算机交互。如果一段程序语法不正确,计算机将无法识别它。Dockerfile使用简单、清晰、干净的语法结构,非常容易上手。这些语法不言自明并支持注释。Dockerfile语法示例Dockerfile语法由两部分组成,注释和命令+参数#Lineblocksusedforcommentingcommandargumentargument..一个简单的例子:#Print"Hellodocker!"RUNecho"Hellodocker!"DockerfilecommandDockerfile有十几个有几个可以用来构建镜像的命令,下面对这些命令进行简要说明。ADDADD命令有两个参数,源和目标。它的基本作用是将文件从源系统的文件系统复制到目标容器的文件系统。如果源是URL,则该URL的内容将被下载并复制到容器中。#Usage:ADD[sourcedirectoryorURL][destinationdirectory]ADD/my_app_folder/my_app_folderCMD类似于RUN命令,可以使用CMD来执行特定的命令。与RUN不同的是,这些命令不是在镜像构建过程中执行的,而是在使用镜像构建容器之后调用的。#Usage1:CMDapplication"argument","argument",..CMD"echo""Hellodocker!"ENTRYPOINTENTRYPOINT帮助你配置一个容器使其可执行,如果你将CMD命令和ENTRYPOINT命令结合起来,你可以从CMD命令中删除“应用程序”,只保留参数,该参数将传递给ENTRYPOINT命令。#Usage:ENTRYPOINTapplication"argument","argument",..#记住:参数是可选的。它们可以通过CMD#或在创建容器期间提供。ENTRYPOINTecho#使用CMD的示例:#在*run*CMD"Hellodocker!"期间可以覆盖使用CMD设置的参数ENTRYPOINTechoENVENV命令用于设置环境变量。这些变量以“key=value”的形式存在,可以被容器中的脚本或程序调用。这种机制为在容器中运行应用程序带来了极大的便利。#Usage:ENVkeyvalueENVSERVER_WORKS4#p#EXPOSEEXPOSE用于指定端口,使容器内的应用程序可以通过该端口与外界进行交互。#Usage:EXPOSE[port]EXPOSE8080FROMFROM命令可能是最重要的Dockerfile命令。此命令定义要使用哪个基础映像来启动构建过程。基础镜像可以是任何镜像。如果找不到基础镜像,Docker将尝试从Docker镜像索引中查找镜像。FROM命令必须是Dockerfile中的第一个命令。#Usage:FROM[imagename]FROMubuntuMAINTAINER我建议这条命令放在Dockerfile的开头,虽然理论上它可以放在Dockerfile的任何地方。此命令用于声明作者,应放在FROM之后。#Usage:MAINTAINER[name]MAINTAINERauthors_nameRUNRUN命令是Dockerfile执行命令的核心部分。它接受命令作为参数并用于创建图像。与CMD命令不同,RUN命令用于创建镜像(在先前提交的层之上形成一个新层)。#Usage:RUN[command]RUNaptitudeinstall-yriakUSERUSER命令用于设置运行容器的UID。#Usage:USER[UID]USER751VOLUMEVOLUME命令用于让你的容器访问主机上的目录。#Usage:VOLUME["/dir_1","/dir_2"..]VOLUME["/my_files"]WORKDIRWORKDIR命令用于设置CMD指定命令的运行目录。#Usage:WORKDIR/pathWORKDIR~/HowtouseDockerfiles使用Dockerfiles就像手动使用DockerDaemon运行命令一样简单。脚本运行后,输出的是新的镜像ID。#使用当前位置的Dockerfile构建镜像#示例:sudodockerbuild-t[name].sudodockerbuild-tmy_mongodb.Dockerfile示例1:创建MongoDB镜像在这部分,我们将逐步创建Dockerfile,这个Dockerfile可以用来构建MongoDB镜像,然后构建MongoDB容器。创建Dockerfile使用nano文本编辑器,让我们创建Dockerfile。sudonanoDockerfile定义文件及其用途始终有必要让读者了解Dockerfile的用途。为此,我们通常编写以注释开头的Dockerfile。#############################################################Dockerfile构建MongoDB容器镜像#基于Ubuntu############################################################设置基础镜像#设置基础镜像为UbuntuFROMubuntu定义者#文件作者/维护者MAINTAINER示例McAuthor设置命令与参数下载MongoDB##################开始安装#######################按照MongoDB文档中的说明安装MongoDB#Ref:http://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/#添加包验证keyRUNapt-keyadv--keyserverhkp://keyserver.ubuntu.com:80--recv7F0CEB10#将MongoDB添加到存储库源列表RUNecho'debhttp://downloads-distro.mongodb.org/repo/ubuntu-upstartdist10gen'|tee/etc/apt/sources.list.d/mongodb.list#再次更新存储库源列表RUNapt-getupdate#安装MongoDB包(.deb)RUNapt-getinstall-ymongodb-10gen#创建默认数据目录RUNmkdir-p/data/db#####################安装结束########################p#设置MongoDBport#暴露默认端口EXPOSE27017#执行入口点的默认端口(MongoDB)CMD["--port27017"]#设置默认容器命令ENTRYPOINTusr/bin/mongod保存Dockerfile构建镜像使用上面的Dockerfile,我们可以开始构建MongoDB镜像sudodockerbuild-tmy_mongodb.Dockerfile示例2:创建Nginx的镜像Nginx简介Nginx是一个高性能的HTTP和反向代理服务器。因其轻量级、易用性、易扩展性而在业界广受欢迎。基于优秀的架构设计,它可以处理比以往同类软件更多的请求。它还可以用于提供静态文件,例如图像、脚本和CSS。和前面的例子一样,我们还是从基础镜像开始,使用FROM命令和MAINTAINER命令##############################################################################################################################################################################将基础镜像设置为UbuntuFROMubuntu#FileAuthor/MaintainerMAINTAINERMaintainerNameInstallNginx#InstallNginx#AddapplicationrepositoryURLtothedefaultsourcesRUNecho"debhttp://archive.ubuntu.com/ubuntu/raringmainuniverse">>/etc/apt/sources.list#更新存储库RUNapt-getupdate#安装必要的工具RUNapt-getinstall-ynanowgetdialognet-tools#下载并安装NginxRUNapt-getinstall-ynginxBootstrapping安装好Nginx后,我们需要ConfigureNginx并替换默认的配置文件#删除默认的Nginx配置文件RUNrm-v/etc/nginx/nginx.conf#从当前目录复制一个配置文件ADDnginx.conf/etc/nginx/#追加"daemonoff;"到配置的开头RUNecho"daemonoff;">>/etc/nginx/nginx.conf#ExposeportsEXPOSE80#设置默认命令在创建新容器时执行#CMDservicenginxstartsavedockfile使用Dockerfile自动构建Nginx容器,因为我们命令Docker来使用当前目录下的Nginx配置文件替换默认的配置文件,我们需要保证这个新的配置文件存在,在Dockerfile所在的目录下,创建nginx.conf:sudonanonginx.conf并替换原来的内容具有以下内容:worker_processes1;events{worker_connections1024;}http{sendfileon;server{listen80;location/{proxy_passhttp://httpstat.us/;proxy_set_headerX-Real-IP$remote_addr;}}}让我们保存nginx.conf,然后我们就可以用Dockerfile和配置文件来构建镜像了。