Docker应用:Hello World
(给DotNet加星标,提升.Net技能)
转自:漂亮的猫
cnblogs.com/lanxiaoke/p/10432631.html
前言
最近学习了Docker相关技术点,国内关于Docker的资料大多是基于Linux系统的,但是我对Linux又不熟。
好在在Win10下也是支持Docker的,而且是支持Linux和Windows两种容器。
在Win10下运行容器和在Linux下是有一些区别的,很多命令都不一样、容器网络也不一样,刚开始我就不明白这点,搭建应用总是错误不断,
网上相关Win10下的容器的资料有很少,特别是容器网络这段,坑不是一般少。学习的过程是曲折的。
一、Win10下安装Docker
1、win10以下的那些Docker大家还是别去看了,个人觉得浪费时间;win10下的Docker是Docker for windows,点击这里下载:https://www.docker.com/products/docker-desktop
2、下载完成后安装,一直Next就行了,最后在桌面看到快捷方式
3、双击快捷方式启动docker,第一次启动需要注册登录,没有账户的先去官网注册:http://hub.docker.com/
4、注册完成后输入账户就可以成功启动docker了,启动后可以看到小鲸鱼
5、运行PowerShell验证,输入docker info
二、Web应用
1、新建ASP.NET Core测试项目
2、修改Controllers以及View
public IActionResult Index()
{
ViewData["Message"] = "Hello World";
return View();
}
3、修改View
@{
ViewData["Title"] = "Home Page";
}
<div style=" font-size:24px; font-weight:bold; text-align:center">
@ViewData["Message"]
</div>
4、新建Dockerfile
FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /app
# copy csproj and restore as distinct layers
COPY *.sln .
COPY WebApp-HelloWorld/*.csproj ./WebApp-HelloWorld/
RUN dotnet restore
# copy everything else and build app
COPY WebApp-HelloWorld/. ./WebApp-HelloWorld/
WORKDIR /app/WebApp-HelloWorld
RUN dotnet publish -c Release -o out
FROM microsoft/dotnet:2.1-aspnetcore-runtime AS runtime
WORKDIR /app
COPY --from=build /app/WebApp-HelloWorld/out ./
ENTRYPOINT ["dotnet", "WebApp-HelloWorld.dll"]
三、部署在Docker容器中
1、进入demo路径
cd X:\Users\漂亮的猫\Desktop\WebApp-HelloWorld
2、生成镜像
docker build -t helloworld .
3、启动镜像,将本地8000端口映射到容器80端口
docker run --name helloworld -p 8000:80 helloworld
4、访问localhost:8000验证
OK,这就完成了,好像有点简单。
那就稍微深入一点,再加一个数据库容器,从数据库端返回数据
四、Web端修改
1、引用Dapper、MySql.Data
using Dapper;
using System;
using System.Collections.Generic;
using System.Data;
using System.Threading.Tasks;
using MySql.Data.MySqlClient;
namespace WebApp_HelloWorld.Controllers
{
public class DBService
{
protected IDbConnection conn;
public DBService()
{
conn = new MySqlConnection("server=198.198.198.181;User Id=root;password=mima2100;Database=mysql-db");
}
public async Task<T> Single<T>(string sql, object paramPairs = null)
{
return await conn.QuerySingleOrDefaultAsync<T>(sql, paramPairs);
}
public async Task<int> Count(string sql, object paramPairs = null)
{
return await conn.QuerySingleOrDefaultAsync<int>(sql, paramPairs);
}
}
}
2、修改HomeController
public IActionResult Index()
{
var dbService = new DBService();
var tb = dbService.Single<Tb>("select * from Tb limit 1").Result;
ViewData["Message"] = string.Format("Idx:{0},Name:{1}", tb.Idx, tb.Name);
//ViewData["Message"] = "Hello World";
return View();
}
3、Tb
public class Tb
{
public int Idx { get; set; }
public string Name { get; set; }
public DateTime CreateTime { get; set; }
}
五、容器端修改
1、拉取MySql容器
docker pull mysql
2、启动容器
docker run --name mysql001 -e MYSQL_ROOT_PASSWORD=mima2100
-p 3306:3306 -d mysql
3、链接Mysql,Navicat工具,创建数据
4、重新发布web应用
docker stop 5b41
docker rm 5b41
docker build -t helloworld .
docker run --name helloworld -p 8000:80 helloworld
5、重新验证
OK,完成了Docker从入门到放弃的第一步。
推荐阅读
(点击标题可跳转阅读)
看完本文有收获?请转发分享给更多人
关注「DotNet」加星标,提升.Net技能
喜欢就点一下「好看」呗~