一、有关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. docker 3 docker安装

    centos docker安装 docker支持以下centos版本: centos 7 (64-bit) centos 6.5 (64-bit)或更高的版本 前提条件 目前,centos仅发行版中的 ...

  2. 【转】从零开始玩转logback

    概述 LogBack是一个日志框架,它与Log4j可以说是同出一源,都出自Ceki Gülcü之手.(log4j的原型是早前由Ceki Gülcü贡献给Apache基金会的)下载地址:http://l ...

  3. 工具篇-Json处理

    1. @JsonProperty和@SerializedName注解 使用场景 将一个json格式的字符串转换成某个java对象,或者将一个java对象转换成json格式的字符串时,如果json字符串 ...

  4. Android测试(三):本地单元测试

    原文:https://developer.android.com/training/testing/unit-testing/local-unit-tests.html 如果你的单元测试没有依赖或者只 ...

  5. face recognition[MobileFaceNet]

    本文来自<MobileFaceNets: Efficient CNNs for Accurate Real-Time Face Verification on Mobile Devices> ...

  6. abp 基于api接口的页面内容提交

    项目中,后端api接口需要接收来自页面提交的数据.注意下拉控件对应值,应该按以下方式赋值 @Html.DropDownListFor(m => m.IsFolder, new List<S ...

  7. SpringBoot整合篇

    目录 SpringBoot整合篇 SpringBoot简介 SpringBoot运行 SpringBoot目录结构 整合JdbcTemplate @RestController 整合JSP 整合JPA ...

  8. [LeetCode] 56 - Merge Intervals 合并区间

    Given a collection of intervals, merge all overlapping intervals. For example,Given [1,3],[2,6],[8,1 ...

  9. Python Revisited Day 03 (组合数据类型)

    目录 第三章 组合数据类型 3.1 序列类型 3.1.1 元组 3.1.2 命名的元组 (collections.nametuple()) 3.1.3 列表 (查询有关函数点这) 3.1.4 列表内涵 ...

  10. Stochastic Optimization of PCA with Capped MSG

    目录 Problem Matrix Stochastic Gradient 算法(MSG) 步骤二(单次迭代) 单步SVD \(project()\)算法 \(rounding()\) 从这里回溯到此 ...