什么是 Dockerfile?
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
有几组基础的命令**
FROM:定制的镜像都是基于 FROM 的镜像。
FROM mcr.microsoft.com/dotnet/core/sdk:3.0-nanoserver-1803 AS build #基于微软.netcore的镜像
RUN:用于执行后面跟着的命令行命令。有以下俩种格式:
shell 格式:
RUN <命令行命令>
<命令行命令> 等同于,在终端操作的 shell 命令。
exec 格式:
RUN [“可执行文件”, “参数1”, “参数2”]
例如:
RUN [“./test.php”, “dev”, “offline”] 等价于 RUN ./test.php dev offline
- COPY
复制指令,从上下文目录中复制文件或者目录到容器里指定路径。
COPY 源路径 目标路径
- ADD
ADD 指令和 COPY 的使用格式一致(同样需求下,官方推荐使用 COPY)。功能也类似,不同之处如下:
- ADD 的优点:在执行 <源文件> 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,会自动复制并解压到 <目标路径>。
- ADD 的缺点:在不解压的前提下,无法复制 tar 压缩文件。会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。具体是否使用,可以根据是否需要自动解压来决定。
- CMD
类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:
- CMD 在docker run 时运行。
- RUN 是在 docker build。
- ENTRYPOINT
类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。
但是, 如果运行 docker run 时使用了 —entrypoint 选项,此选项的参数可当作要运行的程序覆盖 ENTRYPOINT 指令指定的程序。
优点:在执行 docker run 的时候可以指定 ENTRYPOINT 运行所需的参数。
注意:如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。
格式:
ENTRYPOINT [“dotnet”, “webdockerDemo.dll”]
VS快速构建
vs能自动生成dockfile,可以进行快速构建。
新建项目的时候没有添加docker支持,那么可以手动添加dockerfile文件。右键解决方案——-添加——-dockerfile支持
添加完成以后会在目录当中生成一个dockerfile的文件,如下图
这个dockerfile大致做了下面几件事情,1、安装.netcore的镜像文件 2、对项目进行还原 3、对项目进行编译 4、对项目进行发布。
然后点击docker发布就可以正常在容器当中运行了,此过程未试验,好像是把镜像放到docker.hub.com网站上了,使用时pull之类即可。
也可以本地进行部署,将dockfile进行一下改装
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0-buster-slim
FROM mcr.microsoft.com/dotnet/core/sdk:3.0-buster
EXPOSE 80
WORKDIR /app
COPY . /app
ENTRYPOINT ["dotnet", "ApiGateway.dll"]
可以把dockerfile设置为始终复制,这样项目在发布的时候,dockerfile文件才能复制到发布的目录里面
进入到发布目录中,执行命令
docker build -t 镜像名字 . #最后一个点一定要
运行容器
docker run —name 容器名字 -p 容器端口:项目端口 镜像名字
完成。