记录一次docker部署过程和一些常用的docker指令

有个类似 "进销存+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
相关推荐
DianSan_ERP1 小时前
架构师视角:电商大促高并发下的订单API限流与防漏单架构演进
java·运维·网络·安全·微服务·架构·自动化
不会就选b1 小时前
Linux之make,makefile
linux·运维·服务器
腾讯蓝鲸智云1 小时前
【运维自动化-监控平台】初识蓝鲸监控
运维·自动化·云计算·sass·paas
“码”力全开1 小时前
解耦异构算力:基于 Docker 与边缘计算的 GB28181/RTSP 企业级 AI 视频管理平台架构设计(含源码交付)
人工智能·docker·边缘计算
日取其半万世不竭1 小时前
新服务器买完 24 小时内要做什么?安全加固清单
运维·服务器·安全
dabidai1 小时前
Docker PostgreSQL Windows 权限问题总结
windows·docker·postgresql
tiannian12201 小时前
资产管理从手工到智能:三种技术路径的优劣与适用场景
运维·rfid·资产管理系统
_codemonster1 小时前
传统模式 vs DevOps 模式
运维·devops
vortex52 小时前
Linux 传统设计哲学:通过调用名区分行为的艺术
linux·运维·网络