centos7+docker部署.netcore3.1应用

2021-02-16 10:17

阅读:640

  1. 安装一个centos7.8的虚拟机,账号root,密码123456 ,网络选择桥接方式。

  2. 更新linux系统

    命令:yum update

    技术图片

    提示选择【y/n】时输入y即可

    技术图片

    看到Complete!表示更新完成

  1. 查看虚拟机IP地址

    命令:ip addr

    技术图片

  1. 为了操作更加方便,也符合实际应用场景,我们使用xshell6登录到虚拟机。

    技术图片

  用户身份验证选择密码验证,并输入账号和虚拟机密码

    技术图片

  点击链接后弹出如下提示,选择-接受并保存(下次就不会再要求输入密码了)

    技术图片

  成功登录到虚拟机

    技术图片

 

  接下来在centos7系统中安装docker

  1. 为了方便添加软件源,支持 devicemapper 存储类型,安装如下软件包(\分割多条命令)

    命令:yum install -y yum-utils \

    device-mapper-persistent-data \

    lvm2

  执行结果如下:

    技术图片

 

  1. 添加 yum 软件源,添加 Docker 稳定版本的 yum 软件源

    命令:yum-config-manager \

      --add-repo \

      https://download.docker.com/linux/centos/docker-ce.repo

  此处执行结果如下:

    技术图片

  1. 安装docker-ce

    命令:yum install docker-ce

  这里会下载docker安装包,根据网速不同,需要的时间不同,耐心等待,提示【y/d/n】时输入y

    技术图片

  输入y继续下载包文件

    技术图片

    网速太慢,等的我N急,让他继续下载……,我去上个厕所,稍后回来

    终于安装好了,如下图:

    技术图片

 

  1. 默认的 docker 组是没有用户的(也就是说需要使用 sudo 才能使用 docker 命令)。

    您可以将用户添加到 docker 组中(此用户就可以直接使用 docker 命令了),将root用户加入docker组

    命令:usermod -aG docker root

 

  1. 设置docker开机启动

    命令:systemctl enable docker

 

  1. 启动docker

    命令:systemctl start docker

 

  1. 停止docker

    命令:systemctl stop docker

 

  1. 更新docker -ce

    命令:yum update docker-ce

    技术图片

  1. 再次启动docker

    命令:systemctl start docker

  1. 查看docker信息

    命令:docker info

    技术图片

    我们的docker版本为19.03.9,还没有容器运行(还没启动),如果docker没启动的话,执行docker info会返回错误信息,具体自己试验下。

 

  1. 卸载docker(根据需要执行)

    命令:yum remove docker-ce

  1. 删除本地docker文件(docker 的本地文件,包括镜像(images), 容器(containers), 存储卷(volumes)等,都需要手工删除。默认目录存储在 /var/lib/docker)

    命令:rm -rf /var/lib/docker

 

  1. 检查docker是否可以正常运行(运行hello-world镜像,如果本机没有hello-world镜像,系统会自动拉取hello-world镜像)

    命令:docker run hello-world

    技术图片

    上图提示没有找到hello-world镜像,稍后会自动拉取该镜像。

 

    拉取成功后,再次执行docker run hello-world 如下图:

    技术图片

    看到Hello from Docker!表示,docker运行正常

  1. 下载微软官方推荐的基础镜像(搭建了.NET CORE 3.1运行环境)

    命令:docker pull mcr.microsoft.com/dotnet/core/aspnet:3.1

    技术图片

 

  1. 查看本地的镜像

    命令:docker images

    技术图片

    现在有mcr.microsoft.com/dotnet/core/aspnet:3.1 和 hello-world两个镜像

  1. 创建一个.net core3.1的webapi项目,名称为OrderApp,并添加一个控制器,添加一个get接口

    技术图片

    在Program中指定端口为5000

    技术图片

  发布为文件(部署模式为框架依赖,因为镜像中已经包含了运行环境)

    技术图片

  1. 使用xftp6工具链接到虚拟机(协议选择SFTP)

    技术图片

 

  1. 我们在虚拟机中创建一个我们自己的目录,用来构建docker镜像时使用

    命令:mkdir data

    技术图片

    mkdir data命令是在当前目录(我这里是根目录)创建data目录,然后cd到data目录中,在data目录下创建一个docker目录,在docker目录下新建app目录

    目录结构为:/data/docker/app

 

  1. 我这里是使用Dokerfile方式构建镜像,所以我们要添加一个Dokerfile文件

 

    技术图片

    技术图片

    打开Dockerfile文件内容为:

    技术图片

  我们将Dockerfile文件的内容替换为:

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1

MAINTAINER PDF

 

LABEL description="orderservice webapi"

LABEL version="1.0"

WORKDIR /app

COPY . .

EXPOSE 5000

ENTRYPOINT ["dotnet","OrderApp.dll"]

  替换后为:

    技术图片

   内容说明:

FROM 基于那个镜像来构建新的镜像

MAINTAINER 镜像构建者是谁

 

LABEL 用来添加备注信息,以便以后可以查看这个镜像的信息

 

WORKDIR 镜像的工作目录(这里的工作目录为app目录)

COPY 复制文件(将Dockerfile文件所在的当前目录下的文件复制到镜像中的工作目录中)

EXPOSE 容器要开放的端口(我们用.NET CORE默认的5000端口)

ENTRYPOINT 为容器启动后要执行的名称 (这里将执行dotnet OrderApp.dll命令)

 

  1. 我们用sftp6将Dockerfile文件和发布后的.NET CORE项目文件上传到虚拟机的/data/docker/app目录中

    技术图片

    上传后:

    技术图片

  1. 虚拟机防火墙打开5000端口(如果没安装防火墙需要先安装防火墙 )

防火墙常用相关命令:

安装:yum install firewalld

启动: systemctl start firewalld

关闭: systemctl stop firewalld

查看状态: systemctl status firewalld

开机禁用 : systemctl disable firewalld

开机启用 : systemctl enable firewalld

 

开放5000端口

命令:firewall-cmd --add-port=5000/tcp --zone=public --permanent

(--permanent表示永久开放5000端口,否则重启防火墙后,5000端口将被关闭)

技术图片

命令含义:

–zone #作用域

–add-port=5000/tcp #添加端口,格式为:端口/通讯协议

–permanent #永久生效,没有此参数重启后失效

 

  重启防火墙

    命令:firewall-cmd --reload

  查看防火墙状态:

    命令:systemctl status firewalld

技术图片

  查看防火墙已经开放的端口

    命令:firewall-cmd --list-all

    技术图片

    可以看到,我们已经开放了5000端口

 

  1. 构建docker镜像

  进入/data/docker/app文件夹下(ls命令为查看目录中所有文件)

    技术图片

 

  构建名称为pdf/orderserviec,版本号为V1的镜像(警告:命令末尾有个空格和.号)

    命令:docker build -t pdf/orderapp .

    技术图片

  查看当前系统中已有的镜像

    命令:docker images

    技术图片

 

  创建并运行容器

    命令:docker run -d -p 5000:5000 pdf/orderapp

    技术图片

 

命令说明:

-d 以后台模式运行(和服务等效)

-p 将容器的5000端口映射到主机的5000端口(主机端口:容器端口,若不指定则将容器的80端口映射到主机随机端口)

 

  

  查看docker运行日志

    命令:docker logs confident_hodgkin

    技术图片

    这里我们看到容器运行后正在监听5000端口 

    说明:confident_hodgkin为docker容器名称,用docker run 命令创建的容器名称是随机生成的,如果要指定容器名称,可以使用docker create --name 命令来创建容器。

 

  访问接口

    技术图片

 

  最后:

  更多docker命令学习请参考:https://www.runoob.com/docker/docker-command-manual.html 

小插曲:

一开始我使用6000端口映射容器的5000端口,而firefox和google浏览器不允许访问6000端口,大家避免踩坑。


评论


亲,登录后才可以留言!