docker 部署asp.net core web 程序

一.Docker

 关于docker 有一篇博客详细介绍docker的东西,有须要的能够去看看,java

https://blog.csdn.net/huzecom/article/details/102539350linux

本次重点是docker 部署用VScode编辑器 编写的asp.net core web 程序web

(1)简单介绍

        Docker 概念spring

a.Docker 是一个开源的应用容器引擎docker

b.诞生于 2013 年初,基于 Go 语言实现, dotCloud 公司出品(后更名为Docker Inc)shell

c.Docker 可让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,而后发布到任何流行的 Linux 机器上。ubuntu

d.容器是彻底使用沙箱机制,相互隔离vim

e.容器性能开销极低。centos

f.Docker 从 17.03 版本以后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版)浏览器

(2) 安装 Docker

Docker能够运行在MACWindowsCentOSUBUNTU等操做系统上,本教程基于CentOS 7 安装Docker。官网:https://www.docker.com

一、yum 包更新到最新 

yum update

二、安装须要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的 

yum install -y yum-utils device-mapper-persistent-data lvm2

 三、设置yum源

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

四、 安装docker,出现输入的界面都按 y 

yum install -y docker-ce

 五、查看docker版本,验证是否验证成功

docker -v

(3) Docker 架构

 

  • 镜像(Image):Docker 镜像(Image),就至关因而一个 root 文件系统。好比官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
  • 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和对象同样,镜像是静态的定义,容器是镜像运行时的实体。容器能够被建立、启动、中止、删除、暂停等。
  • 仓库(Repository):仓库可当作一个代码控制中心,用来保存镜像。

(4) 配置 Docker 镜像加速器

     默认状况下,未来从docker hub(https://hub.docker.com/)上下载docker镜像,太慢。通常都会配置镜像加速器:

  • USTC:中科大镜像加速器(https://docker.mirrors.ustc.edu.cn)
  • 阿里云
  • 网易云
  • 腾讯云

我配置的是阿里云

  配置阿里云镜像加速器

    

 

(5)Docker 进程相关命令

 

  1. 启动docker服务:

 systemctl start docker

  1. 中止docker服务:

 systemctl stop docker

  1. 重启docker服务:

 systemctl restart docker

  1. 查看docker服务状态:

 systemctl status docker

  1. 设置开机启动docker服务:

systemctl enable docker

 

(6) Docker 镜像相关命令

  • 查看镜像 查看本地全部的镜像

  docker images

docker images –q # 查看所用镜像的id

  • 搜索镜像 从网络中查找须要的镜像

docker search 镜像名称

  • 拉取镜像  从Docker仓库下载镜像到本地,镜像名称格式为 名称:版本号,若是版本号不指定则是最新的版本。 若是不知道镜像版本,能够去docker hub 搜索对应镜像查看。

 docker pull 镜像名称

  • 删除镜像 删除本地镜像

docker rmi 镜像id # 删除指定本地镜像

docker rmi `docker images -q`  # 删除全部本地镜像

 

(7) Docker 容器相关命令

  • 查看容器

docker ps # 查看正在运行的容器

docker ps –a # 查看全部容器

  • 建立容器

docker run 参数

 

参数说明:

- i :保持容器运行。一般与 -t 同时使用。加入 it 这两个参数后,容器建立后自动进入容器中,退出容器后,容器自动关闭。
-t :为容器从新分配一个伪输入终端,一般与 -i 同时使用。
-d :以守护(后台)模式运行容器。建立一个容器在后台运行,须要使用 docker exec 进入容器。退出后,容器不会关闭。
-it 建立的容器通常称为交互式容器, -id 建立的容器通常称为守护式容器
--name :为建立的容器命名。
  • 进入容器

docker exec 参数 # 退出容器,容器不会关闭

  • 启动容器

docker start 容器名称

  • 中止容器

docker stop 容器名称

  • 删除容器

docker rm 容器名称

  • 查看容器信息
  • docker inspect 容器名称

 

(8) Docker dockerfile

1.Docker 镜像原理

Docker 镜像是由特殊的文件系统叠加而成
最底端是 bootfs ,并使用宿主机的 bootfs
第二层是 root 文件系统 rootfs, 称为 base image
而后再往上能够叠加其余的镜像文件
统一文件系统( Union File System )技术可以将不一样的层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统。
一个镜像能够放在另外一个镜像的上面。位于下面的镜像称为父镜像,最底部的镜像成为基础镜像。
当从一个镜像启动容器时, Docker 会在最顶层加载一个读写文件系统做为容器
 

总结:.Docker 镜像本质是一个分层文件系统

2.Dockerfile 概念

Dockerfile 是一个文本文件
包含了一条条的指令
每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像
对于开发人员:能够为开发团队提供一个彻底一致的开发环境
对于测试人员:能够直接拿开发时所构建的镜像或者经过 Dockerfile 文件构建一个新的镜像开始工做了
对于运维人员:在部署时,能够实现应用的无缝移植

Dochub网址:https://hub.docker.com

   3.dockerfile 关键词介绍

关键字 做用 备注
FROM 指定父镜像 指定dockerfile基于那个image构建
MAINTAINER 做者信息 用来标明这个dockerfile谁写的
LABEL 标签 用来标明dockerfile的标签 可使用Label代替Maintainer 最终都是在docker image基本信息中能够查看
RUN 执行命令 执行一段命令 默认是/bin/sh 格式: RUN command 或者 RUN ["command" , "param1","param2"]
CMD 容器启动命令 提供启动容器时候的默认命令 和ENTRYPOINT配合使用.格式 CMD command param1 param2 或者 CMD ["command" , "param1","param2"]
ENTRYPOINT 入口 通常在制做一些执行就关闭的容器中会使用
COPY 复制文件 build的时候复制文件到image中
ADD 添加文件 build的时候添加文件到image中 不只仅局限于当前build上下文 能够来源于远程服务
ENV 环境变量 指定build时候的环境变量 能够在启动的容器的时候 经过-e覆盖 格式ENV name=value
ARG 构建参数 构建参数 只在构建的时候使用的参数 若是有ENV 那么ENV的相同名字的值始终覆盖arg的参数
VOLUME 定义外部能够挂载的数据卷 指定build的image那些目录能够启动的时候挂载到文件系统中 启动容器的时候使用 -v 绑定 格式 VOLUME ["目录"]
EXPOSE 暴露端口 定义容器运行的时候监听的端口 启动容器的使用-p来绑定暴露端口 格式: EXPOSE 8080 或者 EXPOSE 8080/udp
WORKDIR 工做目录 指定容器内部的工做目录 若是没有建立则自动建立 若是指定/ 使用的是绝对地址 若是不是/开头那么是在上一条workdir的路径的相对路径
USER 指定执行用户 指定build或者启动的时候 用户 在RUN CMD ENTRYPONT执行的时候的用户
HEALTHCHECK 健康检查 指定监测当前容器的健康监测的命令 基本上没用 由于不少时候 应用自己有健康监测机制
ONBUILD 触发器 当存在ONBUILD关键字的镜像做为基础镜像的时候 当执行FROM完成以后 会执行 ONBUILD的命令 可是不影响当前镜像 用处也不怎么大
STOPSIGNAL 发送信号量到宿主机 该STOPSIGNAL指令设置将发送到容器的系统调用信号以退出。
SHELL 指定执行脚本的shell 指定RUN CMD ENTRYPOINT 执行命令的时候 使用的shell

 

(8) VScode 建立asp.net core web 项目

      1.打开VS Code,从命令行打开预先定义的文件夹,如: E:\NetCore\demo;打开VScode 控制台

      2. dotnet new --help命令, 查看一下建项目的帮助:

3.创建一个不带用户验证的mvc项目:

dotnet new mvc --auth None

4.执行命令dotnet run: 创建完成

(9) Linux centos7 docker 部署asp.net core web 项目

      1.建立docker_file 目录

       .

 

2.,把刚才建立的asp.net core web 的项目放在里面

3.编辑dockerfile文件  "vim asp_dockerfile2" 保存退出。

4.经过dockerfile构建镜像

docker build -f ./springboot_dockerfile -t app .

5.启动容器

docker run -id -p 7070:8080 app

6.查看运行的容器

7.测试访问,若是成功以下界面

8.浏览器中进行测试,测试成功

(10) 若有不懂的,评论区见,或者私信我都行!