Docker是现在比较流行的开源容器引擎,有了它让我们部署和维护系统更加方便,它 本质上是一个精简版的linux系统,所以它支持.NET跨平台部署。.NET6是微软最新发布的.NET版本,跟前面版本相比速度更快、支持热更新、支持http3等特征。本文介绍如何把.NET 6快速部署到Docker,只需要三个步骤。
第一步 .NET项目准备
首先新建一个.NET6的项目,创建项目时,在“其他信息”选项中选择“启用Docker”。创建项目后会自动生成一个Dockerfile文件,这个文件就是创建Docker镜像的配置文件。 Dockerfile文件也是必要条件,微软官方已经给你配置好了,文章后面有说明。
如果要在windows环境下预览这个项目的话,需要注释掉Properties文件夹下launchSettings.json文件里的docker支持。如下
第二步 执行生成镜像命令
把创建好的项目文件(是整个项目)用工具拷贝到装有Docker-ce环境下的centos网站文件夹下。并cd进入这个文件夹。执行如下命令:
展开全文
结果会提示成功信息:
这个过程主要是根据 Dockerfile文件的配置生成项目并copy到docker创建名为 imagesname、版本号为1.0的镜像。
这有两个,一个是未加版本号的,一个是加了版本号创建的。
第三步 执行命令创建网站容器
镜像创建完成后就可以创建并运行容器了。默认是80端口,我们这里指定外网访问5000端口( -p 5000:80),容器名称是mycontaintest1( --name=mycontaintest1),镜像是imagesname1.0版本( imagesname:1.0)
这样我们通过三步完成了把.NET6部署到Docker上了,我们还可以使用Nginx对它做反向代理供外网访问,大家可以尝试一下。
我们来看看效果:
注意:必须 Docker环境和Centos端口环境没有问题的情况下部署,否则会走很多弯路哦。
Docker相关知识点
1、dockerfile常用命令解析
FROM
基础镜像,FROM 命令必须是 Dockerfile 的首个命令
也就是继承那个镜像
LABEL
为镜像生成元数据标签信息
原有指令 MAINTAINER 已经放弃使用,用 LABEL maintainer="你的邮箱" 替代
USER
指定运行容器时的用户名或 UID,后续 RUN 也会使用指定用户
VOLUME
定义匿名卷,容器运行时应该尽量保持容器存储层不发生写操作,为了防止运行时用户忘记将动态文件保存的目录挂载为卷,可以事先指定某些目录挂载为匿名卷。这样就不会向容器存储层写入大量数据
WORKDIR
用于设置 CMD 指明的命令的运行目录
为后续的 RUN、CMD、ENTRYPOINT、ADD 指令配置工作目录。可以使用多个 WORKDIR 指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径。使用 docker exec -it 进入容器后,默认也会进入到 WORKDIR 指定的目录
容器启动时的⼯作⽬录
ENV
指定容器启动时的环境变量(注意,只有在容器启动时,启动脚本能读取到,如果希望其他用户登录到容器也生效的话,需要写入 .bashrc)
设置镜像内的环境变量
COPY
COPY 命令有两个参数,源和目标。它的基本作用是从源系统的文件系统上复制文件到目标容器的文件系统
EXPOSE
指定端口转发
CMD
设置容器创建是执行的默认命令
支持三种格式,默认会被 docker run 指定的参数覆盖。每个容器只能执行一条 CMD 命令。执行的命令和参数当指定多个时,只有最后一个起效
CMD [“executable”, “参数1”,“参数2”]:使用 exec 方式执行,推荐
CMD command 参数1 参数2:shell 方式执行
CMD [“参数1”,“参数2”]:提供给 ENTRYPOINT 做默认参数
启动容器时执行的shell命令
ENTRYPOINT
指定容器的“入口”
支持两种格式,默认不会被 docker run 指定的参数覆盖。可以指定 --entrypoint 参数去覆盖。每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个起效
ENTRYPOINT [“executable”, “参数1”,“参数2”]:使用 exec 方式执行
推荐 - ENTRYPOINT command 参数1 参数2:shell 方式执行
指定容器启动脚本
HEALTHCHECK
Docker 1.12版本后引入的判断容器运行状态是否正常
ADD
将⼯作⽬录下的某个⽬录或者⽂件copy到镜像的某个路径下
ARG
构建环境的环境变量
RUN
RUN 命令是 Dockerfile 执行命令的核心部分。它接受命令作为参数并用于创建镜像。每条 RUN 命令在当前基础镜像上执行,并且会提交一个新镜像
执⾏shell 命令
2、build 命令用于使用 Dockerfile 创建镜像
语法
docker build [OPTIONS] PATH | URL | -
OPTIONS说明:
--build-arg=[] :设置镜像创建时的变量;
--cpu-shares :设置 cpu 使用权重;
--cpu-period :限制 CPU CFS周期;
--cpu-quota :限制 CPU CFS配额;
--cpuset-cpus :指定使用的CPU id;
--cpuset-mems :指定使用的内存 id;
--disable-content-trust :忽略校验,默认开启;
-f :指定要使用的Dockerfile路径;
--force-rm :设置镜像过程中删除中间容器;
--isolation :使用容器隔离技术;
--label=[] :设置镜像使用的元数据;
-m :设置内存最大值;
--memory-swap :设置Swap的最大值为内存+swap,"-1"表示不限swap;
--no-cache :创建镜像的过程不使用缓存;
--pull :尝试去更新镜像的新版本;
--quiet, -q :安静模式,成功后只输出镜像 ID;
--rm :设置镜像成功后删除中间容器;
--shm-size :设置/dev/shm的大小,默认值是64M;
--ulimit :Ulimit配置。
--tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。
--network: 默认 default。在构建期间设置RUN指令的网络模式
实例
使用当前目录的 Dockerfile 创建镜像,标签为 runoob/ubuntu:v1。
docker build -t runoob/ubuntu:v1 .
使用URL github.com/creack/docker-firefox 的 Dockerfile 创建镜像。
docker build github.com/creack/docker-firefox
也可以通过 -f Dockerfile 文件的位置:
$ docker build -f /path/to/a/Dockerfile .
3、run 创建一个新的容器并运行一个命令
语法
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS说明:
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-p: 端口映射,格式为:主机(宿主)端口:容器端口
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="nginx-lb": 为容器指定一个名称;
--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
-h "mars": 指定容器的hostname;
-e username="ritchie": 设置环境变量;
--env-file=[]: 从指定文件读入环境变量;
--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
-m :设置容器使用内存最大值;
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
--link=[]: 添加链接到另一个容器;
--expose=[]: 开放一个端口或一组端口
实例
使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。
docker run --name mynginx -d nginx:latest
使用镜像nginx:latest以后台模式启动一个容器,并将容器的80端口映射到主机随机端口。
docker run -P -d nginx:latest
使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data。
docker run -p 80:80 -v /data:/data -d nginx:latest
参考1:https://www.runoob.com/
参考2:https://www.cnblogs.com/Durant0420/p/15486849.html
结语
本文讲述了.net6部署到docker的简单过程,仅供参考,真正项目部署还有很多知识点,这里就不再讲了。其实也可以把.NET项目打包后部署,只需要修改Dockerfile的配置就可以了,大家可以尝试一下。希望本文对大家学习和工作有一定参考价值,同时欢迎大家留言讨论,谢谢大家的支持。
版权声明:本文来源于网友收集或网友提供,仅供学习交流之用,如果有侵权,请转告版主或者留言,本公众号立即删除。
支持小薇
腾讯云福利 :
云服务器入门体验低至6.6元/月,更多浏览
链接:https://curl.qcloud.com/1VVs7OBH
关注: DotNet开发跳槽
觉得不错,请点个在看 呀