asp.net core 接口发布到Linux(centos)的生产环境之基于docker部署
环境:
centos:7
docker: 20.10.16,
.net 5.0
准备:webapi应用程序
修改Dockerfile文件
1 2 3 4 5 | FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base WORKDIR /app EXPOSE 80 COPY . . ENTRYPOINT [ "dotnet" , "Yak.Docker.Api.dll" ] |
发布接口:
文件拖拽到linux系统中,包括Dockerfile文件,我这里上传目录是 /home/website/
构建镜像,注意后面的“.”这个点不能少,这个.
代表的是当前构建镜像的上下文路径
#docker build -t <镜像名称> <目录> .为当前目录 |
1 2 | cd /home/website docker build -t apitest . |
镜像构建成功,使用命令docker images
看看:
启动容器,执行下面命令
#docker run --name=<容器名称> -d<后台运行> -p <外部暴露端口>:<容器端口> <关联镜像> |
1 | docker run --name apitest -d -p 80:80 apitest |
查看容器
1 | docker ps |
容器正常运行,浏览器访问,地址: http://192.168.192.136/weatherforecast

设置容器开机启动
docker update --restart=always (自己docker产生的id)
其他命令:
运行镜像(-v 后面的路径为项目地址,使用后可以热更新, -p后面的端口前面对应的是访问端口,后面对应的是docker内的端口,即前面设置的端口)
docker run -d --name webapi -v /home/admin/Public/website/docker/:/app -p 5001:5000 webapi
替换完程序后需要重启一下
docker restart 程序名称
1 2 3 4 5 6 7 8 9 10 | docker -rm -f nameorid ##删除程序 docker -rmi -f nameorid ##删除镜像 firewall-cmd --zone= public --add-port=80/tcp --permanent ##开启防火墙某个端口 firewall-cmd --list-ports ##查看已经开放的端口 systemctl stop firewalld ##关闭防火墙 systemctl start firewalld ##开启防火窗 systemctl status firewalld ##防火墙运行状态 systemctl reload firewalld ##重启防火墙 top ##查看运行的进程 排行 ctrl+C 退出正在运行的程序 |
总结:
1 2 | docker build -t mic/apitest:latest --rm . docker run --name apitest -d -p 80:80 mic/apitest:latest |
命令格式:docker build [OPTIONS] <PATH | URL | ->
Usage: Build an image from a Dockerfile.
中文意思即:使用build命令,在Dockerfile的基础上构建一个镜像。
- 常用选项说明
--build-arg
,设置构建时的变量--no-cache
,默认false。设置该选项,将不使用Build Cache构建镜像--pull
,默认false。设置该选项,总是尝试pull镜像的最新版本--compress
,默认false。设置该选项,将使用gzip压缩构建的上下文--disable-content-trust
,默认true。设置该选项,将对镜像进行验证--file
, -f,Dockerfile的完整路径,默认值为‘PATH/Dockerfile’--isolation
,默认--isolation="default",即Linux命名空间;其他还有process或hyperv--label
,为生成的镜像设置metadata--squash
,默认false。设置该选项,将新构建出的多个层压缩为一个新层,但是将无法在多个镜像之间共享新层;设置该选项,实际上是创建了新image,同时保留原有image。--tag, -t
,镜像的名字及tag,通常name:tag或者name格式;可以在一次构建中为一个镜像设置多个tag--network
,默认default。设置该选项,Set the networking mode for the RUN instructions during build--quiet, -q
,默认false。设置该选项,Suppress the build output and print image ID on success--force-rm
,默认false。设置该选项,总是删除掉中间环节的容器--rm
,默认--rm=true,即整个构建过程成功后删除中间环节的容器
- PATH | URL | -说明:
给出命令执行的上下文。
上下文可以是构建执行所在的本地路径,也可以是远程URL,如Git库、tarball或文本文件等。
如果是Git库,如https://github.com/docker/rootfs.git#container:docker,则隐含先执行git clone --depth 1 --recursive,到本地临时目录;然后再将该临时目录发送给构建进程。
构建镜像的进程中,可以通过ADD命令将上下文中的任何文件(注意文件必须在上下文中)加入到镜像中。
-表示通过STDIN给出Dockerfile或上下文。
-t
mic/apitest:latest,为构建的镜像标记名称,即镜像名为:mic/apitest:latest,打标为latest;--rm
,整个构建过程成功后删除中间环节的容器;.
,单独的点,意思为根据当前目录下的Dockerfile文件生成镜像
参考:
https://blog.csdn.net/qq_37997978/article/details/122061796
https://www.cnblogs.com/zhouxiaojie/p/15223400.html
本文来自博客园,作者:{春光牛牛,yak},转载请注明原文链接:https://www.cnblogs.com/yakniu/p/16278503.html
欢迎各位大佬们评论指正
QQ讨论群:610129902
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)