• 首先新增一个webapi的项目

    项目核心代码 UserContext
    using Microsoft.EntityFrameworkCore;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    using User.API.Model;
    namespace User.API.Data
    {
    public class UserContext : DbContext
    {
    public UserContext(DbContextOptions<UserContext> options) : base(options)
    { }
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
    modelBuilder.Entity<UserInfo>()
    .ToTable("Users")
    .HasKey(u => u.Id); base.OnModelCreating(modelBuilder);
    }
    public DbSet<UserInfo> Users { get; set; }
    }
    } 核心代码 userinfo namespace User.API.Model
    {
    public class UserInfo
    {
    public int Id { get; set; }
    public string Name { get; set; }
    public string Company { get; set; }
    public string Title { get; set; } }
    }
    startup核心代码
    public void ConfigureServices(IServiceCollection services)
    {
    services.AddDbContext<UserContext>(options => {
    options.UseMySQL(Configuration.GetConnectionString("MysqlUser"));
    });
    services.AddMvc();
    }
    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
    if (env.IsDevelopment())
    {
    app.UseDeveloperExceptionPage();
    }
    app.UseMvc();
    //InitUserDataBase(app);//初始化数据库脚本再创建数据库之后取消注释
    }
    public void InitUserDataBase(IApplicationBuilder app)
    {
    using (var scope=app.ApplicationServices.CreateScope())
    {
    var userContext = scope.ServiceProvider.GetRequiredService<UserContext>();
    userContext.Database.Migrate();
    if (!userContext.Users.Any())
    {
    userContext.Users.Add(new Model.UserInfo { Name = "cyao", Company = "nocompany", Title = "软件工程师" });
    userContext.SaveChanges();
    }
    }
    }
    appsetting
    {
    "Logging": {
    "IncludeScopes": false,
    "Debug": {
    "LogLevel": {
    "Default": "Warning"
    }
    },
    "Console": {
    "LogLevel": {
    "Default": "Warning"
    }
    }
    },
    "ConnectionStrings": {
    "MysqlUser": "server=193.112.107.43;port=3306;database=bate_user;userid=test;password=pwd123456"
    }
    }
    #DockerFile核心
    FROM microsoft/aspnetcore-build as build-env
    WORKDIR /code
    COPY *.csproj ./
    RUN dotnet restore
    COPY . ./
    RUN dotnet publish -c Release -o out FROM microsoft/aspnetcore
    WORKDIR /app
    COPY --from=build-env /code/out ./ EXPOSE
    ENTRYPOINT [ "dotnet","User.API.dll" ]

    数据库初始化的命令暂时省略

  • 然后使用dockerfile进行镜像的build
    首先将整个项目文件夹上传到liunx服务器 /NetCoreProJect/User.API/
    #下面是命令
    cd /NetCoreProJect/User.API/
    #开始镜像的build 这里要注意的是文件的路径问题当build失败的时候docker images 的命令是没有 jess/aspnetcore命名的镜像的
    docker build -t jess/aspnetcore:prod .
  • 运行build的容器并以link的形式进行桥接(渐渐淘汰一般使用network形式)
    docker run -d -p : --name aspnetcoretest --link mysqldb:db jess/aspnetcore:prod
    
    docker ps -l
  • 运行build的容器以network的形式进行桥接,并且将本地文件挂载到容器内部文件(容器与容器之间相互通信的端口号是容器内部映射的端口号而不是主机暴露出去的端口号例如这里是80而不是8003)
    #新建一个network
    docker network create -d bridge mybridge
    #查看所有network
    docker network ls
    #运行容器并进行network 和资料卷的挂载首先你本地目录必须又appsettings.json文件
    docker run -d -p : --net mybridge --name aspnetcorebrige -v /docker/netcore/appsettings.json:/appsettings.json jess/aspnetcore:prod
    #命名mysqldb为db
    docker rename mysqldb db
    #两个容器进行network
    docker network connect mybridge db
    #查看docker的bridge网络的详细情况
    docker network inspect mybridge

使用使用dockerfile构建webapi镜像然后使用link和bridge两种方式进行桥接的更多相关文章

  1. WebApi服务Uri加密及验证的两种方式

    最近的一个项目要求服务端与UI层分离,业务层以WebApi方式向外提供所有业务服务,服务在数据保密性方面提出了要求,主要包括: 1:客户端认证: 2:服务请求超时(默认5分钟): 3:服务Get请求的 ...

  2. 如何使用Dockerfile构建Tomcat镜像并部署war

    我们都知道Docker构建一个镜像有两种方式: 使用`docker commit`命令 使用`Dockerfile`文件和`docker build`命令 那么这两种方式有何区别呢? 相同点:底层实现 ...

  3. 使用dockerfile构建nginx镜像

    使用dockerfile构建nginx镜像 docker构建镜像的方法:   commit.dockerfile 1.使用commit来构建镜像: commit是基于原有镜像基础上构建的镜像,使用此方 ...

  4. Dockerfile构建私有镜像

    构建第一个镜像 镜像的定制实际上就是定制每一层所添加的配置,文件.我们可以把每一层修改,安装,构建,操作的命令都写入一个脚本,这个脚本就是Dockerfile.Dockerfile是一个文本文件,其内 ...

  5. Dockerfile构建jar镜像

    dockerDockerfilejar包docker-compose 一.安装docker和compose 二.准备jar包 三.编写配置文件 1. Dockerfile 2. docker-comp ...

  6. Dockerfile构建nginx镜像

    Dockerfile构建nginx镜像 [root@bogon ~]# mkdir /opt/docker-file [root@bogon ~]# cd /opt/docker-file/ [roo ...

  7. Docker学习(六)Dockerfile构建自定义镜像

    Docker学习(六)Dockerfile构建自定义镜像 前言 通过前面一篇文章可以知道怎么去使用一个镜像搭建服务,但是,如何构造自己的一个镜像呢,docker提供了dockerfile可以让我们自己 ...

  8. dockerfile构建Tomcat镜像

    dockerfile构建Tomcat镜像 一.镜像分层概念 二.制作tomcat镜像 2.1.创建分层目录 [root@node2 ~]# mkdir /app/{web/{nginx,tomcat, ...

  9. Docker镜像构建的两种方式

    关于Docker里面的几个主要概念 这里用个不太恰当的比方来说明. 大家肯定安装过ghost系统,镜像就像是ghost文件,容器就像是ghost系统.你可以拿别人的ghost文件安装系统(使用镜像运行 ...

随机推荐

  1. 在vue下引入jquery bootstrap

    在vue 项目中引入jquery bootstrap 引入jquery npm install jquery --save-dev 在项目根目录下的build/webpack.base.conf.js ...

  2. 使用@ConditionalOnProperty注解

    Spring boot中的注解@ConditionalOnProperty,可以通过配置文件中的属性值来判定configuration是否被注入, @Retention(RetentionPolicy ...

  3. keep-alive 组件级缓存

    前言 在Vue构建的单页面应用(SPA)中,路由模块一般使用vue-router.vue-router不保存被切换组件的状态, 它进行push或者replace时,旧组件会被销毁,而新组件会被新建,走 ...

  4. kafka——分布式的消息队列系统

    总听公司人说kafka kafka... 所以这玩意到底是个啥? 好像是一个高级版的消息队列,什么高吞吐量,数据持久,消息均衡,emmm https://blog.csdn.net/nawenqian ...

  5. layui 获取iframe层的window

    success: function (layero, index) { var iframeWin = $("div.layui-layer-content > iframe" ...

  6. 【leetcode】1201. Ugly Number III

    题目如下: Write a program to find the n-th ugly number. Ugly numbers are positive integers which are div ...

  7. sqlserver 中批量删除\r\n 换行符

    从Excel中向sqlserver 中批量粘贴数据时 可能会粘贴进去换行符 \r\n  这时候在查询时候是看不见的 只有把该字段赋值到‘’中才能发现换行. 批量替换语句: update [表名]set ...

  8. BZOJ 4769: 超级贞鱼 逆序对 + 归并排序

    手画几下序列的变换后发现逆序对数是恒定的,故只需对第 $0$ 年求逆序对即可. 树状数组会 $TLE$ 的很惨,需要用到归并排序来求逆序对. 其实就是省掉了一个离散化的时间,估计能比树状数组快一半的时 ...

  9. POJ 2492 A Bug's Life (带权并查集 && 向量偏移)

    题意 : 给你 n 只虫且性别只有公母, 接下来给出 m 个关系, 这 m 个关系中都是代表这两只虫能够交配, 就是默认异性, 问你在给出的关系中有没有与异性交配这一事实相反的, 即同性之间给出了交配 ...

  10. 花式求LCA

    设树上有两点x.y,要求他们的lca(最近公共祖先) 1.倍增求LCA: 先预处理出树上每个点的向上2^k的祖先. 再看x.y:先把深度深的倍增跳到和深度浅的一样的深度,判断是否在同一点:是,该点即为 ...