使用使用dockerfile構建webapi鏡像然后使用link和bridge兩種方式進行橋接


  • 首先新增一個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 80
    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 8020:80 --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 8003:80 --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 

     


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM