.net core docker容器编排部署(linux)
环境准备
需要一个linux操作系统:我这里用的是ubuntu 18.04,安装步骤就不说了,网上很多教程,当然也可以私信我。
既然需要用到docker,那么就安装个docker,apt install docker-ce。
root@pims_server:/# docker -v
Docker version 19.03.7, build 7141c199a2
查看版本,这样docker就算是成功安装好了。
加载基础镜像
为了到时候build镜像的时候快一点,我们可以先准备下基础基础镜像,我这里用的是2.2版,只要runtime即可。
root@pims_server:~# docker pull microsoft/dotnet:2.2-aspnetcore-runtime
2.2-aspnetcore-runtime: Pulling from microsoft/dotnet
804555ee0376: Downloading [=======================> ] 10.8MB/22.52MB
970251047358: Download complete
f3d4c41a4fd1: Download complete
bd391c46585f: Downloading [==============> ] 17.73MB/62.15MB
下载完成之后,执行docker images可以查看所有镜像。
root@pims_server:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
microsoft/dotnet 2.2-aspnetcore-runtime e7e3b238011c 3 months ago 261MB
新建一个.netcore应用程序
这里就不细讲了,我提前准备好了一个项目,发布之后,把publish文件夹拷贝到linux系统中,如下所示:
root@pims_server:/mnt/share/schedule_web# ll
total 13794
drwxrwxrwx 1 root root 20480 Mar 23 08:49 ./
drwxrwxrwx 1 root root 4096 Mar 25 07:39 ../
-rwxrwxrwx 1 root root 2179584 May 28 2018 BouncyCastle.Crypto.dll*
drwxrwxrwx 1 root root 4096 Mar 23 08:49 Configs/
-rwxrwxrwx 1 root root 155 Mar 20 10:13 Dockerfile*
-rwxrwxrwx 1 root root 299008 Aug 10 2018 Google.Protobuf.dll*
-rwxrwxrwx 1 root root 221184 Mar 8 2017 log4net.dll*
-rwxrwxrwx 1 root root 20560 Oct 11 14:28 Microsoft.EntityFrameworkCore.Abstractions.dll*
-rwxrwxrwx 1 root root 1426512 Oct 11 14:26 Microsoft.EntityFrameworkCore.dll*
-rwxrwxrwx 1 root root 762744 Oct 11 14:24 Microsoft.EntityFrameworkCore.Relational.dll*
-rwxrwxrwx 1 root root 231800 Oct 11 14:28 Microsoft.EntityFrameworkCore.SqlServer.dll*
-rwxrwxrwx 1 root root 780288 Dec 3 01:13 MySql.Data.dll*
-rwxrwxrwx 1 root root 67584 Dec 3 01:13 MySql.Data.EntityFrameworkCore.dll*
-rwxrwxrwx 1 root root 693680 Nov 8 16:56 Newtonsoft.Json.dll*
-rwxrwxrwx 1 root root 263168 Dec 3 07:04 Oracle.EntityFrameworkCore.dll*
-rwxrwxrwx 1 root root 4656640 Dec 4 09:17 Oracle.ManagedDataAccess.dll*
-rwxrwxrwx 1 root root 256284 Mar 23 08:43 PimsSchedulingWebApi.deps.json*
-rwxrwxrwx 1 root root 153600 Mar 23 08:43 PimsSchedulingWebApi.dll*
-rwxrwxrwx 1 root root 58032 Mar 23 08:43 PimsSchedulingWebApi.pdb*
-rwxrwxrwx 1 root root 224 Mar 23 08:43 PimsSchedulingWebApi.runtimeconfig.json*
-rwxrwxrwx 1 root root 281600 Mar 23 09:05 PimsSchedulingWebApi.Views.dll*
-rwxrwxrwx 1 root root 7800 Mar 23 08:43 PimsSchedulingWebApi.Views.pdb*
-rwxrwxrwx 1 root root 176640 Dec 20 01:57 Remotion.Linq.dll*
-rwxrwxrwx 1 root root 424448 Oct 16 2017 Renci.SshNet.dll*
drwxrwxrwx 1 root root 0 Mar 23 08:49 runtimes/
drwxrwxrwx 1 root root 0 Mar 23 08:49 SqlScripts/
-rwxrwxrwx 1 root root 34816 Jul 14 2016 SshNet.Security.Cryptography.dll*
-rwxrwxrwx 1 root root 380848 Nov 20 2017 System.Configuration.ConfigurationManager.dll*
-rwxrwxrwx 1 root root 44080 Sep 18 2018 System.Diagnostics.DiagnosticSource.dll*
-rwxrwxrwx 1 root root 236320 Dec 20 01:57 System.Interactive.Async.dll*
-rwxrwxrwx 1 root root 51064 Sep 12 2019 System.Security.AccessControl.dll*
-rwxrwxrwx 1 root root 24880 Jul 19 2017 System.Security.Cryptography.ProtectedData.dll*
-rwxrwxrwx 1 root root 93048 Sep 12 2019 System.Security.Permissions.dll*
-rwxrwxrwx 1 root root 33656 Sep 12 2019 System.Security.Principal.Windows.dll*
-rwxrwxrwx 1 root root 118520 Jun 11 2016 System.Xml.XPath.XmlDocument.dll*
-rwxrwxrwx 1 root root 58880 Dec 3 01:01 Ubiety.Dns.Core.dll*
-rwxrwxrwx 1 root root 537 Mar 23 08:43 web.config*
drwxrwxrwx 1 root root 0 Mar 23 08:49 wwwroot/
至于如何拷贝到linux有很多种方法,有远程工具可以直接通过xftp上传,因为我是用的VirtualBox虚拟机,可以直接利用共享文件夹,挂载到linux上即可。
挂载共享文件夹命令:sudo mount -t vboxsf Shared /mnt/share
Shared是共享文件夹名称,/mnt/share是要挂载到的目标路径。
Dockerfile
我们可以看到这里面就是项目生成的dll文件,还有一个Dockerfile文件,这是build镜像是要用到的。
FROM microsoft/dotnet:2.2-aspnetcore-runtime
MAINTAINER zhanwei
COPY . /app
WORKDIR /app
EXPOSE 8000
ENTRYPOINT ["dotnet", "PimsSchedulingWebApi.dll"]
这就是我的Dockerfile,很简单microsoft/dotnet:2.2-aspnetcore-runtime是基础镜像。
COPY:
复制指令,从上下文目录中复制文件或者目录到容器里指定路径。
WORKDIR:
指定工作目录。用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。(WORKDIR 指定的工作目录,必须是提前创建好的)。
docker build 构建镜像过程中的,每一个 RUN 命令都是新建的一层。只有通过 WORKDIR 创建的目录才会一直存在。
EXPOSE:
仅仅只是声明端口。
作用:
帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射。
在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口。
ENTRYPOINT:
类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 指令指定的程序。但是, 如果运行 docker run 时使用了 --entrypoint 选项,此选项的参数可当作要运行的程序覆盖 ENTRYPOINT 指令指定的程序。
优点:在执行 docker run 的时候可以指定 ENTRYPOINT 运行所需的参数。
注意:如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。
Build镜像
都准备好了之后,执行docker build命令,注意最后有一个.,少了这个点是执行不成功的。
root@pims_server:/mnt/share/schedule_web# sudo docker build -t schedule_web:1.0 .
Sending build context to Docker daemon 19.02MB
Step 1/6 : FROM microsoft/dotnet:2.2-aspnetcore-runtime
---> e7e3b238011c
Step 2/6 : MAINTAINER zhanwei
---> Running in a42940177b66
Removing intermediate container a42940177b66
---> b9eb0d8cd441
Step 3/6 : COPY . /app
---> 810d14b5a4a0
Step 4/6 : WORKDIR /app
---> Running in 97360f19bf80
Removing intermediate container 97360f19bf80
---> 092ed5dc0364
Step 5/6 : EXPOSE 8000
---> Running in 46593eb29da3
Removing intermediate container 46593eb29da3
---> 397cf3432ae2
Step 6/6 : ENTRYPOINT ["dotnet", "PimsSchedulingWebApi.dll"]
---> Running in add035b834d4
Removing intermediate container add035b834d4
---> 40b10808fc7c
Successfully built 40b10808fc7c
Successfully tagged schedule_web:1.0
root@pims_server:/mnt/share/schedule_web#
好的,成功了,现在查看一下images,可以看到刚刚构建的镜像了
root@pims_server:/mnt/share/schedule_web# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
schedule_web 1.0 40b10808fc7c 25 seconds ago 279MB
microsoft/dotnet 2.2-aspnetcore-runtime e7e3b238011c 3 months ago 261MB
创建容器并启动容器,-p映射端口,5000是容器内部端口,8000是本机对外开放端口。
root@pims_server:docker run -it -p 8000:5000 schedule_web:1.0
容器编排docker-compose
当我们有多个服务要部署时,可以用容器编排,可以同时启动多个容器。
比如现在有一个后台定时服务、一个前端服务。那么为了方便我只有通过compose up命令就可以了。
root@pims_server:/# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
schedule_server 1.0 163b44854f0d About a minute ago 279MB
schedule_web 1.0 40b10808fc7c 4 minutes ago 279MB
microsoft/dotnet 2.2-aspnetcore-runtime e7e3b238011c 3 months ago 261MB
查看docker-compose版本,顺便检查下服务器是否安装。
root@pims_server:/home/zhanwei# docker-compose --version
docker-compose version 1.23.2, build unknown
root@pims_server:/home/zhanwei#
docker-compose.yml文件
version: '3'
services:
#启动注册中心eureka-server集群 集中管理/服务注册/服务发现
schedule_web:
container_name: schedule_web
image: schedule_web:1.0
ports:
- "8000:5000"
environment:
appId: testid
appSecret: testsecret
baseUrl: http://192.168.12.48:8080/api/openapi/orgs/v1/
db_server: 10.30.52.20
db_port: 3306
db_type: mysql
db_user: root
db_pwd: 123456
db_name: schedule_8000
schedule_server:
container_name: schedule_server
image: schedule_server:1.0
environment:
db_server: 127.0.0.1
db_port: 3306
db_type: mysql
db_user: root
db_pwd: 123456
db_name: schedule_8000
执行命令docker-compose up -d,我们看下结果:
root@pims_server:/home/zhanwei# docker-compose up -d
Creating schedule_web ... done
Creating schedule_server ... done
root@pims_server:/home/zhanwei#
已经启动完成了。。。
docker-compose命令解析:
up:
启动所有在Compose问中定义的容器,并且把它们的日志信息汇集在一起。通常会添加-d参数(在up后面),让容器在后台执行
start:启动指定的已经存在的容器。
build:重新建造由Dockerfile构建的镜像。
ps:获取由Compose管理的容器的状态信息。
run:启动一个容器,并允许一个一次性的命令。被连接的容器会同时启动,除非用了 --no-deps参数。
logs:汇集由Compose管理的容器的日志,并以彩色输出。
stop:停止容器,但不会删除它们。
rm:删除已停止的容器。不要忘记使用-v参数来删除任何由Docker管理的数据卷。
查看一下容器
root@pims_server:/# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
77677298c7f9 schedule_server:1.0 "dotnet PimsScheduli…" 25 minutes ago Up 25 minutes schedule_server
bc5502237d9e schedule_web:1.0 "dotnet PimsScheduli…" 25 minutes ago Up 25 minutes 8000/tcp, 0.0.0.0:8001->5000/tcp schedule_web

.net core docker容器编排部署(linux)的更多相关文章
- Docker学习(十)Docker容器编排 Docker-compose
Docker学习(十)Docker容器编排 Docker-compose 标签(空格分隔): docker 容器编排是什么 应用一般由单独容器化的组件组成,须按照一定顺序在网络级别进行组织,以使其能够 ...
- 【转】理解Docker容器网络之Linux Network Namespace
原文:理解Docker容器网络之Linux Network Namespace 由于2016年年中调换工作的原因,对容器网络的研究中断过一段时间.随着当前项目对Kubernetes应用的深入,我感觉之 ...
- spring boot本地开发与docker容器化部署的差异
spring boot本地开发与docker容器化部署的差异: 1. 文件路径及文件名区别大小写: 本地开发环境为windows操作系统,是忽略大小写的,但容器中区分大小写 2. docker中的容器 ...
- Gogs的Docker容器化部署流程遇到的问题
Gogs的Docker容器化部署流程遇到的问题 最近在学习CI/CD的一些方案,个人比较青睐容器化轻量级.CI方面一开始是想使用gitlab的,但是发现我自己买的服务器配置太低,内存根本不够(大写 ...
- Drools 7.15.0 docker容器方式部署
关于drools的相关介绍就不再赘述了,关于drools网上的资料都很少,或者都有些老了,最近折腾了一下,记录下安装部署的过程,希望能节省下大家的时间. 一.快速部署 1.拉取基础镜像,命令如下: d ...
- ASP.NET Core 实战:使用 Docker 容器化部署 ASP.NET Core + MySQL + Nginx
一.前言 在之前的文章(ASP.NET Core 实战:Linux 小白的 .NET Core 部署之路)中,我介绍了如何在 Linux 环境中安装 .NET Core SDK / .NET Core ...
- .NET Core开发的iNeuOS工业互联平台,iNeuKernel物联网核心组件在Docker容器中部署。
目 录 1. 概述... 2 2. 演示信息... 2 3. 安装Docker容器... 2 4. 安装dotnet镜像... 3 5. ...
- docker容器编排原来这么丝滑~
前言: 请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i 概念介绍: Docker Docker 这个东西所扮演的角色,容易理解,它是一个容器引擎,也就是说实际上我们的容器最终是由Docker ...
- Ubuntu 16.04+.Net Core+Docker+Uginx安装部署
前言 最近公司的项目打算移植到.Net Core平台,所以调研了一下.Net Core在Linux下的安装部署.本篇文章会一步步的描述从安装到配置到部署的全部过程.在文章的结构和内容里,笔者借鉴了很多 ...
随机推荐
- 题解 CF1348D 【Phoenix and Science】
题目大意,每天细菌会在早上选择分裂,晚上生长. 观察题目,我们可以发现.不管我们怎么分裂细菌,这一天晚上的总质量都是前一天晚上的总质量加上今天的细菌数. 那么我们肯定希望细菌分裂的越多越好,这样我们减 ...
- Java实现 蓝桥杯 算法训练 Rotatable Number(暴力)
试题 算法训练 Rotatable Number 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 Bike是个十分喜欢数学的聪明孩子.他发明了"可旋转数",其灵感 ...
- Java实现 LeetCode 556 下一个更大元素 III(数组的翻转)
556. 下一个更大元素 III 给定一个32位正整数 n,你需要找到最小的32位整数,其与 n 中存在的位数完全相同,并且其值大于n.如果不存在这样的32位整数,则返回-1. 示例 1: 输入: 1 ...
- Java实现 LeetCode 132 分割回文串 II(二)
132. 分割回文串 II 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回符合要求的最少分割次数. 示例: 输入: "aab" 输出: 1 解释: 进行一 ...
- 第九届蓝桥杯JavaB组省赛真题
解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.第几天 题目描述 2000年的1月1日,是那一年的第1天. 那么,2000年的5月4日,是那一年的第几天? 注意:需要提交的是一个整数 ...
- Java实现 洛谷 P1008 三连击
public class Main { public static void main(String[] args){ for(int i = 123; i <= 329; i++){ int[ ...
- Python如何绘制可视化图?给你一段代码,你能自己做出来吗
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 喜欢的朋友欢迎关注小编,除了分享技术文章之外还有很多福利 没有数据生成的图 ...
- Vue入门 — Vue + vuetifyjs应用实践
分享一个以前学vue时自己练手的一个小项目,项目使用vue-cli3创建,UI库用的是vuetifyjs,vuetifyjs官网:https://vuetifyjs.com/ 数据来源是网上随便找的一 ...
- leetcode 反转链表部分节点
反转从位置 m 到 n 的链表.请使用一趟扫描完成反转. 说明:1 ≤ m ≤ n ≤ 链表长度. 示例: 输入: 1->2->3->4->5->NULL, m = 2, ...
- PIP 更换国内安装源
linux: 修改 ~/.pip/pip.conf (没有就创建一个), 内容如下: [global] index-url = https://pypi.tuna.tsinghua.edu.cn/si ...