一、有关Docker的安装请参考docker官网 

Docker 提供了两个版本:社区版 (CE) 和企业版 (EE)。 Docker 社区版 (CE) 是开发人员和小型团队开始使用
Docker 并尝试使用基于容器的应用的理想之选。Docker CE 有两个更新渠道,即 stable 和 edge:
Stable 每个季度为您提供可靠更新
Edge 每个月为您提供新功能

支持的平台

二、Docker 安装Asp.Net Core镜像-有关镜像安装请参考https://hub.docker.com

1、打开 https://hub.docker.com 右上角搜索dotnet,选择第一个搜索结果microsoft/dotnet,点进去如下图

切换到命令行窗口运行以下命令来安装asp.net core 镜像

docker pull microsoft/aspnetcore  

如果我们想拉取指定的aspnetcore版本,可使用如下命令:

docker pull microsoft/aspnetcore:1.0
docker pull microsoft/aspnetcore:2.0  

之后执行以下命令查看是否拉取成功:

docker images

  在dockerhub官网中有着dotnet和aspnetcore的镜像,dotnet可以看作是集大成者,包含了.netcore控制台aspnetcore的所有,而aspnetcore是以dotnet镜像为基础,在aspnetcore中只包含了RunTime和构建当前项目为镜像的工具,这也就意味着如果我们要直接使用aspnetcore为镜像,我们的项目是要已经编译好了的,才可以直接使用这个镜像。
  而当你使用dotnet镜像时,包含了编译工具,Runtime,一切的一切,这也激素dotnet镜像比aspnetcore镜像大这么多的原因了。

三、容器的管理和操作

1、查  

docker ps  #查看运行的容器
docker ps -a #查看所有容器  

2、添加

docker create -it centos:latest  #创建容器
docker run -ti centos:latest /bin/bash #创建并启动容器

  

3、删除

docker stop $(docker ps -q)   #停用全部运行中的容器
docker rm $(docker ps -aq) #删除全部容器
docker stop $(docker ps -q) & docker rm $(docker ps -aq) #一条命令实现停用并删除容器
docker stop 24f373b8ed24 #停止指定容器
docker restart 24f373b8ed24 #重启指定容器

  

docker rmi f09fe80eb0e7        #删除指定镜像
docker rmi $(docker images -q)  #删除全部镜像

  

项目实践 

1、docker run -itd -p 8001:8001 microsoft/dotnet
  -p用来添加Host跟Container的端口映射
2、docker exec -it c14d7da5d352 bash //进入到容器中 docker run -it microsoft/dotnet /bin/bash 注:每次进入不要run 会初始化一个新容器实例
3、dotnet new mvc -n MyFirstDocker.Web //创建项目名为MyFirstDocker.Web的ASP.NET Core MVC项目
4、cd MyFirstDocker.Web //进入MyFirstDocker.Web项目文件夹
5、dotnet run //启动项目 注意-在cd后我们要查看 cat Program.cs #vi Program.cs和vim Program.cs是无效的,只能使用cat查看命令
特别注意-宿主机不能直接访问容器;比如不能通过通过localhost或者127.0.0.1访问,需要开额外的防火墙
curl http://127.0.0.1:8001

  

 

图-进入容器方式  

 注意:找到这个项目修改项目端口为8001

图-添加自定义端口的访问方式-通过将容器拷贝到宿机改动后,再把宿机的访问放回容器内。

图-访问的方式(开两个ssl,在容器内访问)

如何在容器与本地之间 copy 文件

1、从本地到容器

拷贝文件语法:docker cp filename <[CONTAINER ID]>:/file/path/within/container
docker cp /home/core/publish c14d7da5d352:/demo #从本地都容器

2、从容器到本地

拷贝文件语法:docker cp [CONTAINER ID]:/file/path/within/container /host/path/target
docker cp c14d7da5d352:/demo/hello.txt /root

  

 

注意:都是在linux宿机上操作docker开头的语法

四、项目搭建实践

Dockerfile中记录了我们的程序在Docker环境中的各种配置

1、创建Core项目

2、修改端口

    .UseUrls("http://127.0.0.1:8001")  //更改启动端口

3、更改dockerfile文件-新建选择docker支持,默认创建了该文件直接修改即可:

#基于 `microsoft/aspnetcore:2.0` 来构建我们的镜像
FROM microsoft/aspnetcore:2.0 #拷贝项目publish文件夹中的所有文件到 docker容器中的publish文件夹中
COPY . /publish #设置工作目录为 `/publish` 文件夹,即容器启动默认的文件夹
WORKDIR /publish #设置Docker容器对外暴露80端口
EXPOSE 80 #使用`dotnet FristCore.dll`来运行应用程序 -dotnet run是运行.net项目而非.net core项目
ENTRYPOINT ["dotnet", "FristCore.dll"]

4、发布-创建publish文件,将发布内容放入publish内

4.1将publish拷贝到创建的容器内

4.2找到项目目录并运行

4.3开启两个SSH,一个运行Web,一个curl http://127.0.0.1:80

直接操作-在创建容器的时候就把上传的publish作为数据卷

docker run -itd -v /root/publish:/publish  -p 8080:80 microsoft/dotnet

  

宿机不能访问容器的问题

排查方式

docker run -itd -p 80:80 nginx   #运行一个nginx服务,在宿机curl访问和浏览器访问测试-都可以访问

原来该服务默认暴露80端口,暴露8001肯定不行

https://hub.docker.com/r/microsoft/dotnet/

  

暴露其他端口需自己配置  

 最重要的原因

程序启动绑定的是127.0.0.1

官方demo

 宿主机这么访问 走docker 就不是127了 项目导致拦截
 
最终效果
 
改动的部分两部分
Program.cs
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging; namespace FristCore
{
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
} public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseUrls("http://*:80") //如果不配置下面这条信息,会导致无法直接访问
.UseStartup<Startup>()
.Build();
}
}

Dockerfile

#基于 `microsoft/dotnet` 来构建我们的镜像
FROM microsoft/dotnet
#拷贝项目publish文件夹中的所有文件到 docker容器中的publish文件夹中
COPY . /publish
#设置工作目录为 `/publish` 文件夹,即容器启动默认的文件夹
WORKDIR /publish
#设置Docker容器对外暴露80端口
EXPOSE 80
#使用`dotnet FristCore.dll`来运行应用程序 -dotnet run是运行.net项目而非.net core项目
ENTRYPOINT ["dotnet", "FristCore.dll"]

  

  

 

五、使用 Dockerfile 部署

 dockerfile 是你自己创建镜像时候用,使用别人镜像则是不需要。

六、下载Portainer镜像-参考官网 https://portainer.readthedocs.io/en/stable/deployment.html

1、下载Portainer通过官网或者docker方式安装

# 查询当前有哪些Portainer镜像
docker search portainer

镜像名称 portainer/portainer

docker pull portainer/portainer 

2、安装并运行Portainer

1、简单方式运行 portainer:
docker run -d -p 9000:9000 portainer/portainer
2、Swarm集群方式运行 portainer:
docker service create \ --name portainer \ --publish 9000:9000 \ --constraint 'node.role == manager' \ --mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock \ portainer/portainer \ -H unix:///var/run/docker.sock 注意:先建好Swarm集群,再部署portainer,这样才能管理Swarm集群。集群

开放端口:-p 9000:9000 :宿主机9000端口映射容器中的9000端口
访问方法:http://主机IP:9000

默认账号admin 密码 tryportainer

  

2、[可选]docker 命令与 Docker 引擎通讯之间通过 UnixSocket ,但是能够有权限访问 UnixSocket 的用户只有 root 和 docker 用户组的用户才能够进行访问,所以我们需要建立一个 docker 用户组,并且将需要访问 docker 的用户添加到这一个用户组当中来。

https://blog.csdn.net/junmoxi/article/details/78924107

https://blog.csdn.net/sD7O95O/article/details/78951171

https://www.cnblogs.com/myzony/p/9071210.html

  

注:看了mysql和php以及apache 才知道  一个服务对应一个docker容器 这样易扩展

微服务建议用docker来部署

spring cloud这个是微服务,多模块dobbo算分布式

 跟在几台服务器没关系,这是服务器上的扩容而已。微服务是整个项目,业务上分成很多细小单一的模块,再拼接在一起
 每个模块都是独立部署

二、Docker部署应用的更多相关文章

  1. docker部署archery

    一.centos7部署docker 1 通过 uname -r 命令查看你当前的内核版本 uname -r 2  确保 yum 包更新到最新. yum update 3 卸载旧版本 yum remov ...

  2. Zabbix-(二) 使用docker部署

    Zabbix-(二)使用docker部署 一.前言 前文记录了在服务器上搭建zabbix平台,本文记录使用docker部署zabbix 4.4 准备 Centos7.6 虚拟机,并安装了docker ...

  3. AspNetCore容器化(Docker)部署(二) —— 多容器通信

    一.前言 着上一篇 AspNetCore容器化(Docker)部署(一) —— 入门,在单个容器helloworld的基础上引入nginx反向代理服务器组成多容器应用. 二.配置反向代理转接 配置转接 ...

  4. Asp.Net Core 程序部署到Linux(centos)生产环境(二):docker部署

    运行环境 照例,先亮环境:软件的话我这里假设你已经批准好了.net core 运行环境,未配置可以看我的这篇[linux(centos)搭建.net core 运行环境] 腾讯云 centos:7.2 ...

  5. Docker部署Elasticsearch集群

    http://blog.sina.com.cn/s/blog_8ea8e9d50102wwik.html Docker部署Elasticsearch集群 参考文档: https://hub.docke ...

  6. 使用Docker部署Spring boot项目

    Docker是一个使用广泛的Linux容器管理工具包,它允许用户创建镜像,并将其容器实例化.通过本指南,我们可以学习到如何使用Docker部署Spring Boot项目. 先决条件 开发之前,你必须具 ...

  7. 如何使用Docker部署一个Go Web应用程序

    熟悉Docker如何提升你在构建.测试并部署Go Web应用程序的方式,并且理解如何使用Semaphore来持续部署. 简介 大多数情况下Go应用程序被编译成单个二进制文件,web应用程序则会包括模版 ...

  8. Spring Boot2.0:使用Docker部署Spring Boot

    一.Spring Boot项目添加 Docker 支持1.在pom.xml中添加 Docker 构建插件 <plugins> <!-- Docker maven plugin --& ...

  9. Docker部署Nginx并修改配置文件

    Docker部署Nginx并修改配置文件 一.拉取nginx镜像 docker pull nginx 二.在宿主机中创建挂载目录 mkdir -p /data/nginx/{conf,conf.d,h ...

  10. Docker 部署 portainer

    Docker 部署 portainer 环境: docker 版本 :18.09.1 主机地址:192.168.1.81 一.部署 porttainer 1.修改docker配置文件,开放端口. vi ...

随机推荐

  1. Ubuntu16.04环境安装jenkins

    前提:系统必须安装jdk 如果没有安装可通过如下命令安装: sudo add-apt-repository ppa:openjdk-r/ppa sudo apt update sudo apt ins ...

  2. KindEditor 开源得富文本编辑器

    正常HTML情况写输入长文本需要textarea 标签 .但textarea 标签局限性很大,切只能输入单一的文本,我们大多情况下看到的新闻类文本信息大多是图文混排得,且有的配有视频和音乐. 我们可以 ...

  3. Python协程(真才实学,想学的进来)

    真正有知识的人的成长过程,就像麦穗的成长过程:麦穗空的时候,麦子长得很快,麦穗骄傲地高高昂起,但是,麦穗成熟饱满时,它们开始谦虚,垂下麦芒. --蒙田<蒙田随笔全集> *** 上篇论述了关 ...

  4. 《maven in action》部分知识点总结

    maven in action 的部分知识点总结 今天又将<maven in action>这本书看了一遍,总结了一下,大概需要的知识点 (一)解耦   使用maven,在没有任何实际的J ...

  5. 用Python实现大文件分割

    python代码如下: import sys,os kilobytes = 1024 megabytes = kilobytes*1000 chunksize = int(200*megabytes) ...

  6. 从高德采集最新的省市区三级坐标和行政区域边界,用js在浏览器中运行

    本文描述的是对国家统计局于2019-01-31发布的<2018年统计用区划代码和城乡划分代码(截止2018年10月31日)>中省市区三级的坐标和行政区域边界的采集. 本文更新(移步查阅): ...

  7. 从CompletableFuture到异步编程设计

    从CompletableFuture到异步编程设计,笔者就分为2部分来分享CompletableFuture异步编程设计,前半部分总结下CompletableFuture使用实践,后半部分分享下Com ...

  8. 漫画 | Redis常见面试问题(一)

    最近,阿音在为接下来的一场面试做准备,其中的内容包括redis,而且redis是重点内容. Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数 ...

  9. Google 宣布在 4 月 1 日关闭站内搜索

    今春,Google 计划终止又一项产品,它就是“站内搜索”(Site Search)功能.这项产品主要出售给 web 出版商,让它们可以在自家网站内运用业内领先的搜索技术.虽然该公司并未公开宣布此事, ...

  10. 前端自动化 shell 脚本命令 与 shell-node 脚本命令 简单使用 之 es6 转译

    (背景: 先用 babel 转译 es6 再 用 browserify 打包 模块化文件,来解决浏览器不支持模块化 )(Browserify是一个让node模块可以用在浏览器中的神奇工具) 今天折腾了 ...