- 首先新增一個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