docker28.04部署.net8应用程序

Ubuntu 24.04 安装 Docker

1. 准备工作

  • 卸载旧版本 Docker(如有)

    sudo apt remove docker docker-engine docker.io containerd runc
    
  • 更新系统包

    sudo apt update
    sudo apt upgrade -y
    

2. 安装依赖工具

安装添加 Docker 仓库所需的前置软件包:

sudo apt install -y ca-certificates curl gnupg

3. 添加 Docker GPG 密钥

添加 Docker 的官方 GPG 密钥以确保软件包来源的安全性:

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

4. 添加 Docker 软件源

将 Docker 官方仓库添加到系统软件源中:

echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  noble stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

5. 安装 Docker 引擎

更新软件包索引并安装 Docker:

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

6. 验证安装

  • 运行测试容器

    sudo docker run hello-world
    

    如果显示 Hello from Docker!,则说明安装成功。

  • 查看 Docker 版本

    docker --version
    

7. 配置 Docker

  • 设置开机启动

    sudo systemctl enable --now docker
    
  • 允许普通用户使用 Docker

    sudo usermod -aG docker $USER
    newgrp docker
    
  • 配置镜像源(可选,推荐配置国内镜像源以加速下载):
    编辑 /etc/docker/daemon.json 文件,添加以下内容:

    {
      "registry-mirrors": [
        "https://docker.m.daocloud.io",
        "https://hub-mirror.c.163.com",
        "https://mirror.baidubce.com"
      ]
    }
    

    保存后重启 Docker 服务:

    sudo systemctl daemon-reload
    sudo systemctl restart docker
    

8. 常见问题解决

  • GPG 密钥错误:如果遇到 NO_PUBKEY 错误,可以运行以下命令:
    sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys <缺失的密钥ID>
    
  • 网络连接问题:确保系统可以访问 Docker 官方仓库:
    curl -I https://download.docker.com
    

按照以上步骤,您应该可以在 Ubuntu 24.04 上成功安装并配置 Docker。

docker 镜像加速

登录阿里云https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors》镜像加速

上面的图片 拷贝粘贴即可

安装 docker-compose

如果安装的 是docker 28.04,会自动安装 docker compose,查看docker compose 的版本 docker compose version 而不是 docker-compose --version ,后者需要执行下载docker-compose(下载地址https://github.com/docker/compose/releases)放到 /usr/local/bin/目录下(太麻烦了,没必要),一般直接用前者自动和docker一起安装的docker compose 就行。

构建

构建镜像netcore8.0

Dockerfile如下

FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
WORKDIR /app
COPY . /app
EXPOSE 180/tcp

RUN mv sources.list /etc/apt/ && apt-get update -y

RUN apt-get install -y ttf-mscorefonts-installer && apt-get clean && apt-get autoclean && apt-get autoremove && rm -rf /var/lib/apt/lists/*

# 时区设置
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

#RUN apt-get install net-tools -y
RUN apt-get update && apt-get install curl -y

CMD ["sh","run.sh"]
# CMD ["dotnet","xxxxxx.dll"]
# ENTRYPOINT [ "dotnet", "/app/TodoService.dll" ]

独立出 run.sh CMD ["sh","run.sh"] 的原因是,多项目共用netcore8.0镜像,netcore8.0的构建很慢,要个20分钟左右

sources.list文件如下

deb https://mirrors.aliyun.com/debian/ buster main non-free contrib
deb-src https://mirrors.aliyun.com/debian/ buster main non-free contrib
deb https://mirrors.aliyun.com/debian-security buster/updates main
deb-src https://mirrors.aliyun.com/debian-security buster/updates main
deb https://mirrors.aliyun.com/debian/ buster-updates main non-free contrib
deb-src https://mirrors.aliyun.com/debian/ buster-updates main non-free contrib

配置docker-compose.yaml

配置文件如下,nginx redis 的配置文件直接从服务器上拿。

services:

  nginx:
    image: nginx:latest
    ports:
        - "8080:8080"
    container_name: "nginx"
    volumes:
      - /home/app/nginx/www:/usr/share/nginx/html
      - /home/app/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
      - /home/app/nginx/logs:/var/log/nginx
      - /home/app/nginx/conf.d:/etc/nginx/conf.d
      - /home/app/nginx/conf/cert/:/etc/nginx/cert/
      - /home/app/nginx/cache:/home/nginx/cache
      - /etc/localtime:/etc/localtime:ro
    privileged: true
    restart: always

  redis:
   image: redis:latest
   container_name: redis
   ports:
      - "6380:6379"
   volumes:
      - /home/app/redis/data:/data
      - /home/app/redis/conf:/docker/config
      - /etc/localtime:/etc/localtime:ro
   command: redis-server /docker/config/redis.conf
   privileged: true
   restart: always

  temp_server:
    image: temp_server
    ports:
      - "6000:8080"
    links:
      - redis
    environment:
      - "ASPNETCORE_ENVIRONMENT=Production"
    container_name: "temp_server"
    volumes:
      - /home/app/server/prod/logs:/app/logs
    privileged: true
    restart: always
    deploy:
      resources:
         limits:
            # cpus: "0.80"
            memory: 12G
         reservations:
            memory: 400M

配置部署文件deploy.sh

docker rmi server_bak
docker tag temp_server server_bak

docker compose --compatibility up -d
sleep 10
docker stop temp_server
docker rm temp_server
docker rmi temp_server
cd /home/app/server/prod/bin
docker build -t temp_server .
cd /home/app
docker compose --compatibility up -d
sleep 10
docker stop server_bak
docker rm server_bak
posted @ 2025-05-30 17:49  猫与鱼11  阅读(259)  评论(0)    收藏  举报