什么是 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 - 图1
添加完成以后会在目录当中生成一个dockerfile的文件,如下图
dockerfile - 图2

这个dockerfile大致做了下面几件事情,1、安装.netcore的镜像文件 2、对项目进行还原 3、对项目进行编译 4、对项目进行发布。
然后点击docker发布就可以正常在容器当中运行了,此过程未试验,好像是把镜像放到docker.hub.com网站上了,使用时pull之类即可。

也可以本地进行部署,将dockfile进行一下改装

  1. #See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
  2. FROM mcr.microsoft.com/dotnet/core/aspnet:3.0-buster-slim
  3. FROM mcr.microsoft.com/dotnet/core/sdk:3.0-buster
  4. EXPOSE 80
  5. WORKDIR /app
  6. COPY . /app
  7. ENTRYPOINT ["dotnet", "ApiGateway.dll"]

可以把dockerfile设置为始终复制,这样项目在发布的时候,dockerfile文件才能复制到发布的目录里面
dockerfile - 图3
进入到发布目录中,执行命令

docker build -t 镜像名字 . #最后一个点一定要

运行容器

docker run —name 容器名字 -p 容器端口:项目端口 镜像名字

完成。