有个类似 "进销存+POS(收银)一体化软件" 的项目,后台管理框架用了 Admin.NET 开发框架,
门店营业员端设计为APP,前后端分离架构,开发语言 .NET 8
整个系统包括前端APP,前端接口,后台界面,后台接口,另外配合生成产品码和产品码标签打印,设计了一个后台job程序。
这么多应用,部署在不同docker里,理想的形式是采用docker-compose来进行管理和编排。(目前还没有牵扯到集群等概念),同时为了更灵活和满足某些定制化的需求,给需要的应用配置了一个Dockerfile文件,配合着docker-compose来混合管理。
本篇目的也很简单,纪录一些常用的指令和简单的配置过程(命令和配置文件都尽量按照能跑起来的最小化配置)
一:服务器文件夹结构

二:举例某个应用下的Dockerfile文件(项目里其他应用和此文件配置大同小异)
cs
# 使用 .NET 8 运行时镜像
FROM mcr.microsoft.com/dotnet/aspnet:8.0
# 指的是docker容器里的工作目录
WORKDIR /app/uijk
# 复制当前目录所有文件到容器
# COPY . .
# 暴露端口
ENV ASPNETCORE_URLS=http://+:你的端口
# 暴露 端口 你的项目端口
EXPOSE 你的端口
# 启动应用 - 请确认 Shop.dll 是正确的文件名
ENTRYPOINT ["dotnet", "Shop.dll"]
三:docker-compose.yml文件
cs
services:
ui-jk:
build:
context: ./uijk #文件夹地址 注意前提
dockerfile: Dockerfile #参照的Dockerfile文件配置进行 build
container_name: ui-jk #容器名称
ports:
- "xxx:xxx" # 暴露的端口
restart: unless-stopped
volumes: # 卷挂载
- /data/uijk:/app/uijk
environment: # 环境 这里是将此服务注册到consul注册中心去 没有的话可以不用
- CONSUL_ADDRESS=http://consul:xxxx
# depends_on: # 要等consul服务启动完成 consul服务我这里拿掉了
# - consul
networks:
- app_network
admin-job: # job 没有端口 这里没配置端口
build:
context: ./adminjob
dockerfile: Dockerfile
container_name: adminjob
volumes:
- /data/adminjob:/app/adminjob
networks:
- app_network
nginx-gateway: # 这是配置的nginx 管理后台前端页面 依赖于nginx.conf配置文件
image: nginx:alpine
container_name: nginx-gateway
restart: unless-stopped
ports:
- "xxxx:xxx"
volumes:
- /data/adminweb/dist:/usr/share/nginx/html:ro
- /data/adminweb/dist/nginx.conf:/etc/nginx/nginx.conf:ro
- /data/adminnet/wwwroot/uploads:/app/adminnet/wwwroot/uploads:ro
networks:
- app_network
# ========== 定义网络 ==========
networks:
app_network:
driver: bridge
四:启动和其他常用指令汇总
cs
# 如果修改了 配置文件或者不需要从构建缓存中构建(需要重新构建)
docker compose up -d --build
# 如果代码没变 配置文件没变 不需要重新构建
docker compose up -d
>>>>>>>>>>>>>>>>>>>>>>>>>>>>常用命令>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
# 查看容器里的日志
docker logs -f 容器名称
# 停止所有运行中的容器
docker stop $(docker ps -q)
# 停止所有容器(包括运行中和已停止的)
docker stop $(docker ps -aq)
# 删除所有容器(包括运行中的,会强制停止)
docker rm -f $(docker ps -aq)
# 先停止再删除(推荐)
docker stop $(docker ps -q) 2>/dev/null
docker rm $(docker ps -aq) 2>/dev/null
# 删除所有镜像
docker rmi -f $(docker images -q)
# 删除无标签的镜像
docker image prune -f
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>下面的指令尽量慎用>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
# 清理网络
docker network prune -f
# 清理卷(会删除数据)
docker volume prune -f
# 清理构建缓存
docker builder prune -f
# 系统级清理(最彻底)
docker system prune -a --volumes -f