8天入门docker系列 —— 第二天 通过一个aspnetcore程序加深对容器的理解

我们知道容器是一个打包了应用和相关依赖的盒子,那怎么去操控这个盒子呢? 这一篇我通过一个简单的aspnetcore程序来加深对盒子的理解,使用之前先

安装一下Docker的环境。

一:Docker的安装

 官方下载地址:https://docs.docker.com/install/linux/docker-ce/centos/ ,跟着文档执行完下面2个大步骤即可。

1.  SET UP THE REPOSITORY


2. INSTALL DOCKER CE

3. 启动docker 服务

4. 查看docker版本

二:新建asp.net core 网站

docker已经有了,接下来新建一个website,采用vs默认的mvc模板即可,有了网站之后新建一个Dockerfile文件,内容如下,目的就是为了制作镜像,

关于dockerfile的更多内容我会放到后面的文章中去说,本篇关注点在容器上。


然后点击vs的发布功能,把发布后的内容通过ftp push 到虚拟机中/data/publish文件夹下,具体内容如下:

接下来通过 docker build 的方式构建出webnotebook的镜像。


最后可以通过 docker images 查看一下镜像是否构建成功,从下图中可以看到,当前有一个我的应用镜像,还有一个runtime镜像。

三:容器操作

1. 启动容器

通常启动容器的方式有两种,第一种为docker create, 还有一种是docker run,更多的情况我们使用docker run 方式,比如下面的命令。

《1》 --name:  这个就是给你当前运行的容器取一个名字,如果不取的话就采用系统给你的默认名字。

《2》 -d: 表示脱离shell终端采用deamon形式的后台运行,在生产环境中必须要这么处理,没毛病吧。

《3》 huangxincheng/webnodebook:v1 : huangxincheng表示仓库名,当然你也可以不需要这个。webnodebook 表示镜像名, v1表示镜像的版本。

容器运行成功后,会返回一个容器的标识码,这里要注意的是,如果镜像在本地不存在,docker 默认会到官方的 hub.docker.com上进行拉取。

2. 查看容器

既然你说容器启动了,那我怎么判别是否真的启动了呢? 这里你就可以用 docker ps命令鉴别。

从上图中可以看到,容器的ID为 51ded69fce15 ,而这个刚好是你docker run 返回的前12个字符,然后Status= Up  6 minutes ,说明容器是启动的没毛病。

3. 查看容器内应用程序是否启动

容器启动了不代表我的webnotebook没问题,对吧,那接下来怎么去鉴别容器内的程序是否正常启动呢? 这里就可以用到下面两种方式。

《1》 docker top xxx  查看容器运行的进程。

xxx 就是你的容器名或者容器ID,如下图可以看到确实我的WebNoteBook的进程号是5323,说明是启动的。

《2》  直接在宿主机上通过ps -ef 查看指定的程序。

从下图中你也看到了,WebNotebook的PID果然是5323,说明启动了无疑。

4. 如何查看容器的ip和port

既然容器和容器内程序都是启动的,那接下来我怎么访问这个webnotebook呢? 要想访问,你肯定是要知道这个容器的ip+port,不然怎么访问呢? 通常有

两种做法可以获取到容器的ip和port端口。

《1》  使用docker exec 直接进入容器内

-it 表示给当前的容器分配一个终端,由于容器是ubuntu环境,为了精简并没有把ifconfig打包进来,所以你需要使用apt-get 安装一下net包即可。

当你安装完net包后,通过ifconfig你就可以看到 172.17.0.2 这个ip地址了,然后通过netstat 来查看webnotebook的端口号。

《2》 使用 docker inspect 查看容器各方面的底层信息。

从NetworkSettings节点中,你可以找到一个"IPAddress": "172.17.0.2" 的信息,这个ip就是你的容器IP,很简单吧,而且从"Ports": {   "80/tcp": null  } 上

你也看到,当前暴露的是80端口。

5.  查看容器内程序日志

容器和程序都启动起来了,不代表程序运行就正常,为了保险起见,还是要看一下程序打印到终端的一些操作日志,这样我才放心一些不是吗? 那现在

我可以通过 docker logs xxx 来查看指定容器的日志输出,从下面可以看到,一点问题都没有。

6. 关闭和启动容器

容器运行这一块基本上就是这样了,由于项目不断的迭代升级,你的旧版本程序的容器就该停止了,接下来你有  docker stop 和 docker kill 两种方式,

两者的区别在于,前者是给你的程序 sigterm信号,后者是sigkill信号,如果不明白两者的区别,可以看我的这篇博文:

https://www.cnblogs.com/huangxincheng/p/9576795.html

可以看到,当我执行了stop之后再 ps -a 发现,当前的容器已经退出了,然后你可以通过 docker start 重启,再用 docker kill 关闭。

既然ip+port都知道了,接下来网站你就可以访问啦。访问之前确保你的容器是start状态哦( docker webnotebook start )。

好了,本篇就说到这里,希望对你有帮助。

原文地址:https://www.cnblogs.com/duwamish/p/10392410.html

时间: 2024-10-08 23:24:52

8天入门docker系列 —— 第二天 通过一个aspnetcore程序加深对容器的理解的相关文章

8天入门docker系列 —— 第五天 使用aspnetcore小案例熟悉容器互联和docker-compose一键部署

原文:8天入门docker系列 -- 第五天 使用aspnetcore小案例熟悉容器互联和docker-compose一键部署 这一篇继续完善webnotebook,如果你读过上一篇的内容,你应该知道怎么去挂载webnotebook日志和容器的远程访问,但是这些还远不够,webnotebook 总要和一些数据库打交道吧,比如说mysql,mongodb,redis,通常情况下这些存储设备要么是以容器的方式承载,要么是由DBA在非容器环境下统一管理. 一:webnotebook连接容器redis

Windows Azure中文博客 Windows Azure入门教学系列 (一): 创建第一个WebRole程序

http://blogs.msdn.com/b/azchina/ 本文转自:http://blogs.msdn.com/b/azchina/archive/2010/02/09/windows-azure-webrole.aspx 这是一系列Windows Azure入门教学文章的第一篇. 在第一篇教学中,我们将学习如何在Visual Studio 2010中创建一个WebRole程序(C#语言). 在开始本教学之前,请确保你从Windows Azure 平台下载下载并安装了最新的Windows

Windows Azure入门教学系列 (一): 创建第一个WebRole程序

这是一系列 Windows Azure入门教学文章的第一篇. 在第一篇教学中,我们将学习如何在 Visual Studio 2010中创建一个WebRole程序 (C#语言 ). 在开始本教学之前,请确保你从 Windows Azure  平台下载下载并安装了最新的 Windows Azure开发工具.本教学使用Visual Studio 2010作为开发工具. 步骤一:创建解决方案和项目 以管理员权限打开 Visual Studio 2010,点击 File,选择 New,点击 Project

JavaWeb学习总结第二篇--第一个JavaWeb程序

JavaWeb学习总结第二篇—第一个JavaWeb程序 最近我在学院工作室学习并加入到研究生的项目中,在学长学姐的带领下,进入项目实践中,为该项目实现一个框架(用已有框架进行改写).于是我在这里记录下我JavaWeb学习的过程,加油! 我们在第一篇中提到了开发JavaWeb程序需要的一些工具,在安装完成后(请朋友们自行网上查找安装步骤和配置),接下来我以图片形式介绍编写JavaWeb程序. 一:创建Web项目 1.打开IntelliJ IDEA->File->New Project 项目创建完

8天入门docker系列 —— 第七天 让你的container实现跨主机访问

当你有若干个容器之后,你可能就希望实现容器的跨机部署访问了,比如aspnetcore在一台host上,mysql在另外一个host上,如果要实现这样的功能,需要你 借助docker自带的overlay网络模型了. 一: overlay网络模型 要想快速的搭建overlay网络,你可以通过docker默认的swarm集群给你默认生成的名ingress的overlay网络,这样会默认开放一些端口供底层机器内的访问,比如: UDP 4789 是用于overlay network 流量传输的,作为开发角

单片机入门指南系列(十五) 单片机程序下载失败总结

前面介绍了点亮第一个LED的全过程,很多人可能很幸运的点亮了LED,然而也很可能不少人非常不幸没有把程序下载进去.初学者常会遇到程序无法下载的情况,很多人在尝试多次未果后比较受打击,因此放弃了学习,实在太可惜了.鉴于此,这里列举了单片机程序下载失败的各种出错原因.判断方法和解决方法,是前人所遇到的种种原因的总结. STC单片机下载程序主要分为三部分:单片机最小系统.下载电路.计算机端.下载失败一般主要就从这三个方面来解决问题. 快速排错方法 如果你有或者能向别人借到一套可以正常下载程序的电脑.单

【SignalR学习系列】2. 第一个SignalR程序

新建项目 1.使用VisualStudio 2015 新建一个Web项目 2.选择空模板 3.添加一个新的SignalR Hub Class (v2)类文件,并修改类名为ChatHub 4.修改ChatHub代码 using System; using System.Collections.Generic; using System.Linq; using System.Web; using Microsoft.AspNet.SignalR; namespace SignalRDemo { pu

【Owin 学习系列】1. 第一个 Owin 程序

IIS 中的 Owin 在 IIS 里面部署 Owin,既能得到 Owin 管道模型的灵活性和模块特性,也能很好地利用 IIS 成熟的配置,Owin 程序将会跑在 ASP.NET request 的管道中. 首先建一个空的 Web 项目 添加 Nuget 包 Microsoft.Owin.Host.SystemWeb 添加一个 Startup 类 替换 Startup.cs 的代码 using System; using System.Threading.Tasks; using Microso

Docker 容器基本操作[Docker 系列-2]

?Docker 入门及安装[Docker 系列-1] 镜像就像是一个安装程序,而容器则是程序运行时的一个状态. 查看容器 查看容器 启动 docker 后,使用 docker ps 命令可以查看当前正在运行的容器: 查看所有容器 上面这条命令是查看当前正在运行的容器,如果需要查看所有容器,则可以通过 docker ps-a 命令查看: 在查看容器时,涉及到几个查看参数,含义分别如下: CONTAINER ID:CONTAINER ID是指容器的id,是一个唯一标识符,这是一个64位的十六进制整数