.Net Core3.1 使用Docker 部署在Centos 7
以前一直很好奇docker是个什么玩意,今天终于闲下来去玩一下了,关于docker的介绍以及优点介绍,相信大家都有去看过一点文章,我是通过这篇文章了解到docker,里面的作者也有写一系列的教程,大家可以去看看https://www.cnblogs.com/ityouknow/category/1173004.html
接下来就是实战了:
安装 docker (1.安装docker,2.启动docker服务 3.开机自动启动docker服务)
1 yum install docker 2 systemctl start docker.service 3 systemctl enable docker.service
检查是否安装正常,显示出版本就证明可以了:
docker -v
创建项目
随意创建一个mvc网站项目
本地发布验证程序是否运行正常,并且Dockerfile属性要设置为 始终复制
ps:默认启动端口是5000,可以修改appsetting.json文件,添加urls节点指定启动端口 例如: urls:"http://*8068" 。还有其他指定端口方法和原理,参考:https://www.cnblogs.com/cgyqu/p/12169014.html
这里由于我的服务器5000已经有了,所以改成8068
运行正常
修改Dockerfile文件
由于我们已经自己生成发布了在本地了,而vs帮我们自动生成的文件里面,包含了生成->发布->运行,所以这里,我们只需要运行的命令就行
修改为:
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base WORKDIR /app COPY . . ENTRYPOINT ["dotnet", "WebApplication1.dll"]
dockerfile文件指令说明:
- FROM -指定所创建镜像的基础镜像
- WORKDIR-配置工作目录
- EXPOSE-声明镜像内服务监听的端口 (可以不写,因为我们具体映射的端口可以在运行的时候指定)
- COPY-复制内容到镜像 (. .代表当前目录)
- ENTRYPOINT-启动镜像的默认人口命令
打包到服务器
这里我们使用MobaXterm或者xftp等工具上传上去:
构建镜像
1.进入程序目录,先验证下程序能否启动和访问
访问正常,关闭网站,开始构建镜像:
进入当前程序目录,输入构建命令
docker build -t mytest-mvc .
参数解释:
- -t --指定镜像名称 (只能小写)
- . --表示build上下文为当前目录,默认情况docker会使用上下文的根目录找到Dockerfile文件
查看构建的镜像
docker images
创建并启动容器
docker run --name myfirstWeb -d -p 8041:8068 mytest-web docker ps -a
参数解释:
--name 表示容器名称(区分大小写),也可以不指定,默认会生成
-d 表示在后台以守护形式运行容器
-p 表示外部端口与内部容器端口映射。关于-p的还有其他用法(https://www.cnblogs.com/williamjie/p/9915019.html)
mytest-web 是我们刚才创建的镜像名称
查看是否启动成功
最后去我们本地访问
遇到的问题:
1.dockerfile里面指定了EXPOSE 暴露端口,发现最终容器启动的时候内部还是用的配置文件里面那个ulrs里面的端口,可以使用docker logs 容器名 查看启动日志
2.如果部署成功但发现访问不了,一般都是防火墙问题
3.在删除容器后,重新添加发现会ip冲突或者其他错误,直接重启一下docker
其他常用命令:
docker logs 容器名称 docker attach 容器名称或容器ID docker exec -it 59ec /bin/bash (如果提示“/bin/bash 未找到”之类的 可以改成:docker exec -it 59ec sh,退出ctrl+d) docker stop 容器ID或容器名 docker kill 容器ID或容器名 docker rm 容器ID或容器名 systemctl restart docker
全部命令: https://www.runoob.com/docker/docker-rmi-command.html
参考文章:https://www.cnblogs.com/ityouknow/category/1173004.html