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

如何使用Dockerfile创建自定义Docker镜像

时间:2023-03-14 13:05:33 科技观察

在本指南中,我们将简要介绍Dockerfile以及如何使用Dockerfile在Linux中自动创建自定义Docker镜像。什么是Dockerfile?Dockerfile是一个易于理解的文本文件,其中包含构建Docker映像的说明。它包含用户在创建图像时可以调用的所有命令。我们可以使用Dockerfile创建自定义图像。可通过DockerHub共享的自定义Docker映像。如果您还不知道,DockerHub是Docker为团队提供的托管存储库服务,用于查找和共享容器映像,当然世界上任何人都可以访问。想象一下,如果我们在早期想要使用Nginx,那么我们将不得不经历很多步骤来安装和配置Nginx。感谢DockerHub,我们现在可以在几分钟内下载并运行Nginx预构建容器镜像。Dockerhub中的NginxDocker镜像运行以下命令从DockerHub中拉取Nginx镜像:#dockerpullnginx一旦我们拉取了Docker镜像,我们就可以运行以下命令来使用它:#dockerrun-it-d-p8080:8080nginx就这样,很简单!DockerHub托管了来自软件供应商、开源项目和社区的超过100,000个容器映像。您可以从DockerHub下载您选择的图像,并使用上面的命令开始使用它。了解Dockerfile格式Docker可以读取Dockerfile中的指令自动创建镜像。一个典型的Dockerfile包含以下指令:1.FROM-这为容器设置基础镜像。例如:FROMubuntu:22.04这会将容器的基础映像设置为Ubuntu。如果没有指定'22.04'标志,它将被设置为最新版本(latest)。2.LABEL——这是一个键值对,用来明确图像的元数据信息。例如:LABELENV="DEVELOPMENT"3.RUN-这将执行基础映像中的命令并创建一个新层。例如:RUNapt-getupdateRUNapt-getinstalltomcat4,CMD——这个用来设置容器启动后首先执行的命令。例如:CMD["java","-jar","app.jar"]5。EXPOSE——设置用于访问容器的端口。容器将侦听此端口。我们可以使用来获取输出。示例:EXPOSE80806,``MAINTAINER`-显示有关创建图像的作者的信息。例如:MAINTAINERinfo@ostechnix.com7,ENV-用于设置环境变量的键值对。这些变量在创建镜像时设置,并在创建容器后可用。例如:ENVDB_NAME=”MySQL”ENVDB_VERSION=”8.0”8.COPY——用于将本地文件复制到容器中。例如:COPY/target/devops.jardevops.jar9,ADD-具有与复制相同的功能,但通过提取本地tar文件或从URL复制文件更进一步。例如:添加devops.tar.xz/。ADDhttp://example.com/abc.git/usr/local/devops/10,ENTRYPOINT——用于设置镜像的主要命令。与CMD命令功能相同。不同的是ENTRYPOINT中的指令不会被改写。例如:ENTRYPOINT["java","-jar","app.jar"]11.VOLUME——该命令用于在指定位置创建挂载点。例如:VOLUME/app/devops12,USER-将设置将运行图像并使用它的用户名和用户组。例如:USERdhruvUSERadmin13,WORKDIR-设置工作目录。如果该目录不存在,将创建它。例如:WORKDIR/var/lib/这是一个示例Dockerfile,您可以参考:FROMubuntu:latestMAINTAINERSenthilkumarPalani"info@ostechnix.com"RUNapt-getinstall-ysoftware-properties-commonpythonRUNadd-apt-repositoryppa:chris-lea/node.jsRUNecho"debhttp://us.archive.ubuntu.com/ubuntu/jammyuniverse">>/etc/apt/sources.listRUNapt-getupdateRUNapt-安装-ynodejsRUNmkdir/var/wwwADDapp.js/var/www/app.jsCMD["/usr/bin/node","/var/www/app.js"]我会告诉你一个创建Dockerfile、创建和使用镜像的简单示例。创建一个Dockerfile创建一个名为dockerfile的文件:#nanodockerfile添加以下命令行。我们将更新并安装vim和curl包:FROMalpineRUNapkupdateRUNapkaddvimRUNapkaddcurlDockerfile对于AlpineLinux按CTRL+O和CTRL+X保存文件并关闭。现在Dockerfile就位了。让我们继续使用这个Dockerfile创建一个镜像。注意:如果您使用的是DockerDesktop,您可以以普通用户身份运行docker命令。使用Dockerfile创建Docker镜像要使用Dockerfile创建Docker镜像,只需运行以下命令:#dockerbuild-talpine。请注意末尾的点(.)。输入示例:[+]Building51.2s(8/8)FINISHED=>[internal]loadbuilddefinitionfromDockerfile0.1s=>=>transferringdockerfile:104B0.0s=>[internal]load.dockerignore0.1s=>=>传输上下文:2B0.0s=>[内部]加载docker.io/library/alpine的元数据:最新38.8s=>[1/4]FROMdocker.io/library/alpine@sha256:7580ece7963bfa863801466c0a2.7s=>=>resolvedocker.io/library/alpine@sha256:7580ece7963bfa863801466c0a0.0s=>=>sha256:d7d3d98c851ff3a95dbcb70ce09d186c9aaf7e25d481.47kB/1.47kB0.0s=>=>sha256:530afca65e2ea04227630ae746e0c85b2bd1a1793792.80MB/2.80MB2.4s=>=>sha256:7580ece7963bfa863801466c0a488f11c86f85d99881.64kB/1.64kB0.0s=>=>sha256:9b2a28eb47540823042a2ba401386845089bb7b62a9637d528B/528B0.0s=>=>extractingsha256:530afca65e2ea04227630ae746e0c85b2bd1a179379cbf2b0.2s=>[2/4]RUNapkupdate4.3s=>[3/4]RUNapkaddvim3.5s=>[4/4]RUNapkaddcurl1.3s=>导出到图像0.4s=>=>导出图层0.4s=>=>写入图像sha256:14231deceb6e8e6105d2e551799ff174c184e8d9be8af0.0s=>=>命名为docker.io/library/alpine0.0s使用'dockerscan'对图像运行Snyk测试以查找漏洞ies并学习如何修复它们根据上面的命令,Docker会通过保存在当前工作目录下的Dockerfile中的命令自动开始创建镜像。还记得我们在Dockerfile命令中保存的apkupdate、apkaddvim和apkaddcurl吗?这些命令也将自动执行。如果Dockerfile保存在其他目录中,可以使用-f标志指定路径,例如:#dockerbuild-f/path/to/a/Dockerfile。创建图像后,我们可以使用以下命令运行它:#dockerrun-italpine此命令启动Alpine容器并连接到它。/#uname-aLinux8890fec82de85.10.104-linuxkit#1SMPThuMar1717:08:06UTC2022x86_64Linux/#cat/etc/alpine-release3.16.1/#如果使用Docker桌面版,可以使用Containers选项卡界面可以查看正在运行的容器。在DockerDesktop中查看容器这就是Dockerfile用于构建自定义容器映像的方式。我们只介绍了基础知识。您可以使用Dockerfile做很多事情。建议您参考官方的Dockerfile参考以了解更多信息。