前言:
最近学习了 Docker 相关技术点, 国内关于 Docker 的资料大多是基于 Linux 系统的, 但是我对 Linux 又不熟 (实际上没用过, 掩面哭笑. Jpg).
好在在 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, 第一次启动需要注册登录, 没有账户的先去官网注册: 戳这里 https://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 路径
1 cd X:\Users \ 漂亮的猫 \ Desktop\WebApp-HelloWorld
2, 生成镜像
1 docker build -t helloworld .
3, 启动镜像, 将本地 8000 端口映射到容器 80 端口
1 docker run --name helloworld -p 8000:80 helloworld
4, 访问 localhost:8000 验证
OK, 这就完成了,
emmmmm, 好像有点简单,,
那就稍微深入一点, 再加一个数据库容器, 从数据库端返回数据
四, 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 容器
1 docker pull MySQL
2, 启动容器
1 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 从入门到放弃的第一步, 哈
来源: http://www.bubuko.com/infodetail-3252950.html