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

安装一下Docker的环境。

 

一:Docker的安装

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

1.  SET UP THE REPOSITORY

sudo yum install -y yum--mapper-persistent--config---add-

 

2. INSTALL DOCKER CE

sudo yum install docker-ce docker-ce-cli containerd.io

 

3. 启动docker 服务

[root@localhost ~/bin/

 

4. 查看docker版本

[root@localhost ~]# docker -., build

 

二:新建asp.net core 网站

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

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

FROM microsoft/dotnet:-aspnetcore-// //, ]

 

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

[root@localhost publish]#

 

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

[root@localhost publish]# docker build -f ./Dockerfile -t huangxincheng// : FROM microsoft/dotnet:-aspnetcore--aspnetcore-runtime: Pulling from microsoft/ microsoft/dotnet:-aspnetcore---->/---> Running --->/ : RUN  /---> Running --->/ : COPY ./ /--->/ : WORKDIR /---> Running --->/ : EXPOSE  ---> Running --->/ : CMD [ ,---> Running ---> /webnodebook:v1

 

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

/webnodebook   v1                               /dotnet            -aspnetcore-runtime   dad26d192ae6         days ago          260MB

 

三:容器操作

1. 启动容器

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

[root@localhost publish]#

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

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

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

 

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

 

2. 查看容器

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

[root@localhost publish]# docker /webnodebook:v1       minutes ago       Up  minutes        /tcp              webnotebook

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

 

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

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

 

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

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

                                                   :               ?                   ::            dotnet WebNotebook.dll

 

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

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

[root@localhost publish]#  -ef |       : ?        ::      : pts/    ::  --color=auto dotnet

 

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

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

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

  

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

[root@localhost publish]# docker exec -it webnotebook /bin//data# /data#

 

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

/data# apt-get update &&  apt-get  net-tools - http:Get: http:Get: http:Get: http:Get: http:Get: http:Get: http:Get: http:Fetched  kB  1min 52s ( kB/- upgraded,  newly installed,  to remove and  http:Fetched  kB  4s ( kB/--/net-tools_1.+git20161116.90da8a0--tools (+git20161116.90da8a0--tools (+git20161116.90da8a0-/data# =<UP,BROADCAST,RUNNING,MULTICAST>  mtu   netmask .  broadcast .::ac:::  txqueuelen   bytes  (  dropped   overruns   frame   bytes  (  dropped  overruns   carrier   collisions =<UP,LOOPBACK,RUNNING>  mtu .  netmask .  bytes  (  dropped   overruns   frame   bytes  (  dropped  overruns   carrier   collisions /data#

 

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

root@51ded69fce15:/data# netstat --Q Send-Q Local Address           Foreign Address         State       PID/                          :::*                    LISTEN      //data#

 

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

    

[root@localhost ~: : : : : : : : : : : : : : : : : : : : : : : : : : : :

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

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

 

5.  查看容器内程序日志

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

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

[root@localhost ~-afae---aae75aa91db2} may be persisted to storage /Application started. Press Ctrl+C to shut down.

 

6. 关闭和启动容器

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

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

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

[root@localhost ~~]# docker  -/webnodebook:v1       minutes ago      ~]#

   

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

[root@localhost ~~]# docker  -/webnodebook:v1       minutes ago              /~]# docker ~]# docker  -/webnodebook:v1       minutes ago      ~]#

 

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


©著作权归作者所有:来自51CTO博客作者mb5fd86a704dffe的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 8天入门docker系列 —— 第五天 使用aspnetcore小案例熟悉容器互
  2. 8天入门docker系列 —— 第一天 docker出现前的困惑和简单介绍
  3. flex容器与项目的常用属性
  4. 基于Docker部署Ldap环境
  5. Windows7设置Redis开机自启动
  6. 解决Docker中Tomcat访问出现404问题
  7. 联想笔记本在PE盘启动时看不到固态硬盘
  8. 几种Linux系统切换内核启动顺序方法
  9. 二进制部署K8s集群第25节之k8s技术点整理

随机推荐

  1. 35、键盘布局的tableLayout备份
  2. Android(安卓)Gallery子元素无法横向填满
  3. Android植物大战僵尸小游戏
  4. android返回HOME界面
  5. android textview部分字体变颜色
  6. android自带图片资源
  7. Android 珍藏(三)
  8. Android系统工具之Monkey自动化测试
  9. Android菜单实例
  10. [Android]Common Sreen Size of Android