centos7+docker部署.netcore3.1应用
安装一个centos7.8的虚拟机,账号root,密码123456 ,网络选择桥接方式。
更新linux系统
命令:yum update
提示选择【y/n】时输入y即可
看到Complete!表示更新完成
查看虚拟机IP地址
命令:ip addr
为了操作更加方便,也符合实际应用场景,我们使用xshell6登录到虚拟机。
用户身份验证选择密码验证,并输入账号和虚拟机密码
点击链接后弹出如下提示,选择-接受并保存(下次就不会再要求输入密码了)
成功登录到虚拟机
接下来在centos7系统中安装docker
为了方便添加软件源,支持 devicemapper 存储类型,安装如下软件包(\分割多条命令)
命令:yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
执行结果如下:
添加 yum 软件源,添加 Docker 稳定版本的 yum 软件源
命令:yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
此处执行结果如下:
安装docker-ce
命令:yum install docker-ce
这里会下载docker安装包,根据网速不同,需要的时间不同,耐心等待,提示【y/d/n】时输入y
输入y继续下载包文件
网速太慢,等的我N急,让他继续下载……,我去上个厕所,稍后回来
终于安装好了,如下图:
默认的 docker 组是没有用户的(也就是说需要使用 sudo 才能使用 docker 命令)。
您可以将用户添加到 docker 组中(此用户就可以直接使用 docker 命令了),将root用户加入docker组
命令:usermod -aG docker root
设置docker开机启动
命令:systemctl enable docker
启动docker
命令:systemctl start docker
停止docker
命令:systemctl stop docker
更新docker -ce
命令:yum update docker-ce
再次启动docker
命令:systemctl start docker
查看docker信息
命令:docker info
我们的docker版本为19.03.9,还没有容器运行(还没启动),如果docker没启动的话,执行docker info会返回错误信息,具体自己试验下。
卸载docker(根据需要执行)
命令:yum remove docker-ce
删除本地docker文件(docker 的本地文件,包括镜像(images), 容器(containers), 存储卷(volumes)等,都需要手工删除。默认目录存储在 /var/lib/docker)
命令:rm -rf /var/lib/docker
检查docker是否可以正常运行(运行hello-world镜像,如果本机没有hello-world镜像,系统会自动拉取hello-world镜像)
命令:docker run hello-world
上图提示没有找到hello-world镜像,稍后会自动拉取该镜像。
拉取成功后,再次执行docker run hello-world 如下图:
看到Hello from Docker!表示,docker运行正常
下载微软官方推荐的基础镜像(搭建了.NET CORE 3.1运行环境)
命令:docker pull mcr.microsoft.com/dotnet/core/aspnet:3.1
查看本地的镜像
命令:docker images
现在有mcr.microsoft.com/dotnet/core/aspnet:3.1 和 hello-world两个镜像
创建一个.net core3.1的webapi项目,名称为OrderApp,并添加一个控制器,添加一个get接口
在Program中指定端口为5000
发布为文件(部署模式为框架依赖,因为镜像中已经包含了运行环境)
使用xftp6工具链接到虚拟机(协议选择SFTP)
我们在虚拟机中创建一个我们自己的目录,用来构建docker镜像时使用
命令:mkdir data
mkdir data命令是在当前目录(我这里是根目录)创建data目录,然后cd到data目录中,在data目录下创建一个docker目录,在docker目录下新建app目录
目录结构为:/data/docker/app
我这里是使用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命令)
我们用sftp6将Dockerfile文件和发布后的.NET CORE项目文件上传到虚拟机的/data/docker/app目录中
上传后:
虚拟机防火墙打开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端口
构建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端口,大家避免踩坑。