Docker的使用初探(二):Docker与.NET Core的结合
目录
- Docker的使用初探(二):Docker与.NET Core的结合
- 添加Dockefile
- 1. 在创建项目时添加
- 2. 手动添加
- 3. 容器业务流程协调控制程序支持
- Dockefile语法
- Docker项目调试
- 仅添加文件的方式
- 容器业务流程协调控制程序支持
- 添加Dockefile
Docker的使用初探(二):Docker与.NET Core的结合
在二者的结合上,微软官方给予了很大的支持,从官方发布的一些文章和VS 2017在建立.NET Core项目时自带的Docker选项都可以看出来,这也与Core的跨平台特性有很大的关系,而Docker正是可以选择以Linux或Windows环境部署
添加Dockefile
上一篇文章介绍了如何拉取Core的官方镜像,但是我们终究要将Docker应用到我们的开发环境中,如何将我们自己的项目生成为镜像并部署到Docker上呢?第一步就添加Dockerfile这个文件,在VS2017中大致是三种方法,它们稍有区别,但最终也都是建立了一个Dockerfile文件
1. 在创建项目时添加
在新建Core项目时,勾选“启用Docker支持”选项,新建的项目会自动添加dockerfile文件,文件的具体内容在下文进行分析
2. 手动添加
已经在使用的项目可以通过“右键-添加-Docker支持”,这样也可以新建Dockerfile文件
3. 容器业务流程协调控制程序支持
这种方法相对于前两种比较特殊,它不再是单单增加一个Dockerfile文件,而是如名称一般是一整条生产链,用于配合持续集成工具的开发-调试-生成-发布一条龙服务。添加的方式与第二种相同,右键项目添加就能看到这个拗口的名字
使用这种方式除了生成Dockerfile文件还会在解决方案中添加一个名为Docker Compose的业务流程协调程序,在新建时可以选择,但是默认自带的只有这个。里面包含两个文件,一个是 .dockerignore
这个和git类似,里面记录的文件不会被打包成镜像发布,另一个是 docker-compose.yml
,用于配置这个业务流程的信息,如镜像名称和Dockerfile文件的路径等
Dockefile语法
大概是有以下这些,挑几个用到的说一下
FROM
MAINTAINER
RUN
CMD
EXPOSE
ENV
ADD
COPY
ENTRYPOINT
VOLUME
USER
WORKDIR
ONBUILD
FROM
FROM <image>
说明使用的镜像,如果本地没有会自动拉取对应名称的镜像,没有指定标签的情况默认就是latest
FORM
指令是Dockerfile文件的第一行,但可以不唯一,根据需要可以有多个
以默认的Core项目为例,这里拉取的就是Core的官方镜像,上篇文章也有用到,分别是运行时和SDK
WORKDIR
WORKDIR <工作目录路径>
显而易见就是镜像被安装的路径,如果路径不存在,Docker会自动创建
COPY
COPY <源路径> <目标路径>
将文件和目录复制到容器的文件系统。文件和目录需位于相对于 Dockerfile 的路径中。
RUN
RUN <Shell/exec>
在当前镜像上要执行的命令,可以使用shell或者exec的格式
EXPOSE
EXPOSE <端口>
服务端容器对外映射的本地端口
ENTRYPOINT
使用格式 RUN
一样,但是这个命令是在容器启动后执行的命令,不会被 RUN
命令覆盖,一个Dockerfile里面只能有一个,如果有多个则只执行最后一条
其余的指令还没怎么用到,用法还不太清楚
Docker项目调试
我们在前面提到了三种创建Dockerfile文件的方法,实际上是两种情况,针对这两种情况,打包镜像的方法也不同
仅添加文件的方式
使用 docker build -t <name> <path>
指令。这种情况更加泛用,无论是不是用VS创建的都可以使用这种指令打包镜像
进入Dockerfile文件所在的路径后执行命令即可
为了演示,我先删除的core的官方sdk,由于在Dockerfile里面我们写入了使用了 FROM
命令,所以执行命令后我们发现Docker自动下载了镜像,并且打包了我们的项目,但是最后有一句 image operating system "windows" cannot be used on this platform ,因为我这边Docker使用的是Linux模式,这里我们构建的是Windows的容器镜像,所以需要切换一下,系统右下角托盘图标右键“switch to ...”,
为了体现Dockerfile指令的效果,我们删除之前创建的镜像再执行一次Build指令,这次Docker没有下载Core的sdk,因为之前已经下载过了。不过我在这里遇到了网络问题,发现之前的镜像拉取也失败了,所以换了一个镜像加速地址,然后简化了一下dockerfile文件,然后重复上面的操作就行了
FROM microsoft/dotnet:2.1-aspnetcore-runtime
WORKDIR /app
COPY . .
EXPOSE 80
ENTRYPOINT ["dotnet", "CoreDockerDemo1.dll"]
可以看到dockerfile里面的指令被依次执行,完成之后我们使用 docker image ls
就可以看到我们构建的镜像了,之后用上面的方法可以创建Docker即可
容器业务流程协调控制程序支持
使用这种方式就不需要自己手动构建了,只要在VS里的调试按钮点一下即可。由于我们前面添加过这套协调控制程序,所以现在这个项目里可以直接选择docker进行调试
在这之前要对 docker-compose.yml
文件进行配置,基本上与dockerfile类似,而且更加直观,对应输入名称等就好了
我在第一次生成时出现了“未启用卷共享”的错误,这里我们需要在Docker的设置中的Shared Drives标签中把程序生成构建的磁盘选中,然后点击“Apply”按钮应用设置,然后docker会自动重启
设置完成后再点击VS中的运行,web应用就会自动编译生成并创建镜像和容器,然后启动网站。第一次启动时可能会询问是否授权SSL证书,进行授权即可
基本上有了这些,就可以利用Docker给开发工作带来一些便捷,如果后面还要继续深入的话,就是将Docker与持续集成结合起来应用到网站服务器环境上
转载于:https://www.cnblogs.com/LFeather/p/10264619.html
Docker的使用初探(二):Docker与.NET Core的结合相关推荐
- 打开容器世界的大门: Docker、POD 初探
随着技术的发展,各种应用变得越来越复杂,开发的压力也与日俱增,速度与质量等等各种要求更是让企业的基础架构.IT 团队及工作流程压力山大. 假设一下,你正在使用笔记本电脑开发应用,并且开发环境有特定配置 ...
- Docker 容器技术初探
Docker 容器技术初探 文章目录 Docker 容器技术初探 一. docker 简介 1. 容器简介 ① 容器是什么 ② 容器和虚拟机的区别 ③ 为什么使用容器 ④ docker 和容器的关系 ...
- Docker操作笔记(二)容器
容器 一.启动容器 启动一个容器有两种方式: 1.基于镜像新键并启动一个容器: 所需要的主要命令为docker run docker run ubuntu:18.04 /bin/echo " ...
- docker镜像制作(二)——构建企业镜像LAMP+BBS
docker镜像制作(二)--构建企业镜像LAMP+BBS 一.LAMP概述 二.进行搭建 1.启动基础镜像容器 2.容器中优化yum源,并安装软件 3.软件初始化 ①.ssh的开启 ②.mysql的 ...
- 容器技术之二.Docker的安装和常见问题
Docker的安装要求 Docker支持在多种平台上使用,包括Mac.Windows.Cloud以及Linux系统上等.由于Docker是基于Ubuntu发布的,所以官方更推荐在Ubuntu上使用Do ...
- Docker教程(二) Docker环境安装
Docker教程(二) Docker环境安装 本文链接:https://blog.csdn.net/yuan_xw/article/details/77248243 Docker教程(二) Docke ...
- Docker(二) docker帮助、镜像及容器相关操作命令介绍
一.docker 帮助相关命令 1.1 查看docker 版本 docker version 1.2 查看显示全系统信息 docker info 1.3 显示docker相关的所有命令以及参数说明 ...
- Docker组队学习(二)
文章目录 一.Docker镜像 1.获取镜像 2.列出镜像 3.删除本地镜像 Untagged 和 Deleted 4.Dockerfile制作镜像 二.Docker容器 内容来源于Chapter 2 ...
- docker学习(十二)docker secret 的使用
目录 前言 一.docker secret 命令 二.secret 的使用 1.容器中的使用 2.mysql容器中的使用 3.docker-compose中的使用 前言 manager节点保持状态的一 ...
最新文章
- java 头尾 队列_记一次腾讯面试,我挂在了最熟悉不过的队列上
- 在哪里能找到最后的版本的示例程序? AI Studio-MNIST
- nginx mysql占用率高_nginx/mysql查看内存占用
- Hadoop Hive sql语法详解
- 腾讯开源再获OSCAR 5项大奖,全国首家可信开源治理认证自发开源企业
- linux文件系统添加pcm,linux下用sox批量将pcm文件加wav头、批量修改采样率、切音频...
- 重启oracle服务顺序,oracle 10g]命令行启动ORACLE服务及顺序
- 使用docker在CentOS7上搭建WordPress
- iperf 测试局域网速度
- python redis 哨兵_Redis哨兵机制
- vba 定义类_工作表中如何响应自定义事件
- c#如何实现IComparable接口
- 智慧景区管理系统提升游客服务体验
- PS动感映像插件ImageMotion 1.3中文汉化版
- 网易云接口加直链下载vip歌曲
- 27服务-安全访问状态转换
- 英语说10点20有计算机课,101 projects in 1001 days实例
- 关于win7阉割版pycharm pyttsx3库无法使用解决方法
- 台达DOP系列触摸屏与电脑通讯不上时,如何进入系统设置画面修改系统设置从而正常通讯?
- 安卓11之adb命令清除锁屏密码