Linux Docker的环境配置与简单使用

参考资料

  1. Windows Docker Desktop设置中文
  2. 【Docker 】Docker Desktop for Windows(WSL 2)安装
  3. WSL 2 上的 Docker 远程容器入门

目录

  • 一. 环境配置
    • 1.1 安装WSL
    • 1.2 安装配置 Docker Desktop
    • 1.3 VS Code 插件安装
    • 1.4 下载项目,配置Dockerfile
  • 二. 常用Docker命令简介
    • 2.1 Dockerfile打包镜像
    • 2.2 image镜像
      • 2.2.1 `docker image ls` 查看所有镜像
      • 2.2.2 `docker image rm 镜像ID` 删除指定镜像
    • 2.3 container容器
      • 2.3.1 `docker run` 创建并启动容器
      • 2.3.2 `docker container ls --all` 查看所有容器
      • 2.3.3 容器的停止
        • 2.3.3.1 `docker stop`
        • 2.3.3.2 `docker container stop`
      • 2.3.4 容器的删除
        • 2.3.4.1 `docker rm`
        • 2.3.4.2 `docker container rm`
      • 2.3.5 `docker exec`进入容器内部
      • 2.3.6 `docker container start` 启动一个既存的容器
      • 2.3.7 `docker container logs` 查看 docker 容器的输出
      • 2.3.8 `docker container cp` 复制容器内的文件到本地
    • 2.4 registry仓库
      • 2.4.1 `docker pull` 镜像拉取
      • 2.4.2 `docker push` 镜像推送
  • 三. docker-compose
    • 3.1 遇到的问题
    • 3.2 `docker-compose.yml` 配置文件
    • 3.3 `docker-compose build` 构建镜像
    • 3.4 数据迁移
    • 3.5 `docker-compose up` 运行容器


一. 环境配置

1.1 安装WSL

⏹详情请参考下面这篇博客
Linux Windows之wsl安装使用简介

1.2 安装配置 Docker Desktop

⏹从官网下载安装Docker Desktop

  • ※因为Docker Desktop依赖于wsl,所以需要先安装wsl
  • https://www.docker.com/products/docker-desktop/

⏹安装完成之后,进行如下配置

  • 指定Docker镜像的磁盘存储位置
  • 指定对应的wsl

在这里插入图片描述

⏹当我们的wsl和docker都配置完成之后,使用下面的命令应该能看到docker的版本和wsl的挂载目录

apluser@FengYeHong-HP:~$ docker --version
Docker version 28.1.1, build 4eba377
apluser@FengYeHong-HP:~$
apluser@FengYeHong-HP:~$ ls -l /mnt/wsl/
drwxr-xr-x 4 root root 100 Jun 11 20:06 docker-desktop
drwxr-xr-x 3 root root  60 Jun 11 20:06 docker-desktop-bind-mounts
-rw-r--r-- 1 root root 198 Jun 11 20:06 resolv.conf

1.3 VS Code 插件安装

Docker扩展

  • 提供对Dockerfile的语法检测,代码高亮,自动补全
  • 可以通过菜单运行各种Docker命令
  • 可以在左侧面板中看到我们创建的所有镜像,容器等

在这里插入图片描述

Dev Containers扩展

  • 支持在容器中打开代码项目
  • 自动配置开发环境,通过 .devcontainer 目录定义语言版本、依赖、插件等
  • 调试支持,支持容器内调试(Node.js、Python、C++ 等)

在这里插入图片描述

1.4 下载项目,配置Dockerfile

⏹执行下面的git命令,下载示例项目

  • git clone https://github.com/mattwojo/helloworld-django.git

⏹下载完成之后,移动到示例项目的根目录,应该会看到这样的目录

apluser@FengYeHong-HP:helloworld-django$ ls -l
total 148
-rw-r--r-- 1 apluser apluser    483 Jun 11 20:48 Dockerfile
-rw-r--r-- 1 apluser apluser 131072 Jun  7 16:56 db.sqlite3
drwxr-xr-x 4 apluser apluser   4096 Jun  7 09:38 hello
-rwxr-xr-x 1 apluser apluser    667 Jun  7 09:38 manage.py
-rw-r--r-- 1 apluser apluser     16 Jun  7 09:38 requirements.txt
drwxr-xr-x 3 apluser apluser   4096 Jun  7 09:38 web_project

二. 常用Docker命令简介

⏹所有的命令都可以通过docker --help查看

2.1 Dockerfile打包镜像

⏹在项目的根目录下手动创建一个Dockerfile文件,创建之后的目录如下

apluser@FengYeHong-HP:helloworld-django$ ls -l
total 148
-rw-r--r-- 1 apluser apluser    196 Jun  7 16:54 Dockerfile
-rw-r--r-- 1 apluser apluser 131072 Jun  7 16:56 db.sqlite3
drwxr-xr-x 4 apluser apluser   4096 Jun  7 09:38 hello
-rwxr-xr-x 1 apluser apluser    667 Jun  7 09:38 manage.py
-rw-r--r-- 1 apluser apluser     16 Jun  7 09:38 requirements.txt
drwxr-xr-x 3 apluser apluser   4096 Jun  7 09:38 web_project
apluser@FengYeHong-HP:helloworld-django$
apluser@FengYeHong-HP:helloworld-django$ cat Dockerfile
# 安装python环境, 指定基础镜像
FROM python:3.11-slim
# 创建一个名为 app 的工作目录
WORKDIR /app
# 将当前目录下的 requirements.txt 复制到app工作目录中
COPY requirements.txt .# 运行pip命令, 安装python项目所需的依赖
RUN pip install --no-cache-dir -r requirements.txt
# 将当前目录下的所有内容都复制到app工作目录中
COPY . /app# 指定8000端口
EXPOSE 8000
# 启动python项目
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
  • -t参数用来指定 image 文件的名字,后面还可以用冒号指定标签。如果不指定,默认的标签就是latest
  • 最后的那个.表示Dockerfile文件所在的路径,因为当前路径在Dockerfile文件所在的目录,所示是一个.
docker image build -t helloworld-django .
# 或者
docker image build -t helloworld-django:0.0.1 .

2.2 image镜像

2.2.1 docker image ls 查看所有镜像

apluser@FengYeHong-HP:~$ docker image ls
REPOSITORY          TAG       IMAGE ID       CREATED        SIZE
helloworld-django   latest    51fedeaf85ff   2 days ago     363MB
hello-world         latest    0b6a027b5cf3   4 months ago   20.4kB

2.2.2 docker image rm 镜像ID 删除指定镜像

apluser@FengYeHong-HP:~$ docker image rm 51fedeaf85ff
Untagged: helloworld-django:latest
Deleted: sha256:51fedeaf85ffdc569edae785cce00602eb90b4a7a12766c6f671a517f0c4f199
apluser@FengYeHong-HP:~$
apluser@FengYeHong-HP:~$ docker image ls
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    0b6a027b5cf3   4 months ago   20.4kB

2.3 container容器

2.3.1 docker run 创建并启动容器

  • -it:容器的 Shell 映射到当前的 Shell,然后你在本机窗口输入的命令,就会传入容器
  • --rm:容器一旦停止就会自动删除(仅在临时测试时使用)
  • -p:容器的 8000 端口映射到本机的 8100 端口
  • helloworld-django:latest:指定要启动的容器
apluser@FengYeHong-HP:~$ docker run -it --rm -p 8100:8000 helloworld-django:latest
Watching for file changes with StatReloader
Performing system checks...System check identified no issues (0 silenced).You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
June 14, 2025 - 00:12:19
Django version 3.2.25, using settings 'web_project.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.

⏹容器启动之后,在浏览器中就可以看到如下所示的界面

在这里插入图片描述

2.3.2 docker container ls --all 查看所有容器

  • docker container ls:查看正在运行的容器
  • docker container ls --all:查看正在所有容器,包括已经停止运行的容器

在这里插入图片描述

docker ps 的作用和docker container相同,只不过从语义化上看来,docker container更好。

在这里插入图片描述

2.3.3 容器的停止

2.3.3.1 docker stop

docker stop 容器ID:停止正在运行的容器。注意:停止运行的容器并不会被删除。

  • docker stop <容器ID或名称> 会向容器发送 SIGTERM 信号,让其优雅退出,如果在默认的 10 秒内还没退出,则发送 SIGKILL 强制终止。
  • docker kill <容器ID或名称> 会立即强制终止容器(不等待)
apluser@FengYeHong-HP:~$ docker container ls
CONTAINER ID   IMAGE                      COMMAND                  CREATED          STATUS          PORTS                    NAMES
d32995d7a305   helloworld-django:latest   "python manage.py ru…"   22 minutes ago   Up 22 minutes   0.0.0.0:8100->8000/tcp   kind_bassi
apluser@FengYeHong-HP:~$
apluser@FengYeHong-HP:~$ docker stop d32995d7a305
d32995d7a305
2.3.3.2 docker container stop
apluser@FengYeHong-HP:~$ docker container ls
CONTAINER ID   IMAGE                      COMMAND                  CREATED          STATUS          PORTS                    NAMES
783e1ad29407   helloworld-django:latest   "python manage.py ru…"   16 minutes ago   Up 16 minutes   0.0.0.0:8100->8000/tcp   reverent_lalande
apluser@FengYeHong-HP:~$
apluser@FengYeHong-HP:~$ docker container stop 783e1ad29407
783e1ad29407

2.3.4 容器的删除

2.3.4.1 docker rm

⏹如果你不只是要停止容器,还想连容器一起删除(比如临时容器),可以用docker rm -f-f 相当于先 stoprm

apluser@FengYeHong-HP:~$ docker container ls
CONTAINER ID   IMAGE                      COMMAND                  CREATED          STATUS         PORTS                    NAMES
4c07319bbebc   helloworld-django:latest   "python manage.py ru…"   11 seconds ago   Up 9 seconds   0.0.0.0:8100->8000/tcp   infallible_sammet
apluser@FengYeHong-HP:~$
apluser@FengYeHong-HP:~$ docker rm -f 4c07319bbebc
4c07319bbebc
2.3.4.2 docker container rm

⏹语义化更好

apluser@FengYeHong-HP:~$ docker container ls --all
CONTAINER ID   IMAGE                      COMMAND                  CREATED          STATUS                      PORTS                    NAMES
6380b917ff0c   helloworld-django:latest   "python manage.py ru…"   44 seconds ago   Up 42 seconds               0.0.0.0:8100->8000/tcp   determined_boyd
f0e58479ba3d   helloworld-django          "python manage.py ru…"   54 minutes ago   Exited (0) 54 minutes ago                            vigorous_leavitt
cca37d72e4ba   helloworld-django          "python manage.py ru…"   54 minutes ago   Exited (0) 54 minutes ago                            musing_franklin
f51614fe80d9   helloworld-django:latest   "python manage.py ru…"   55 minutes ago   Exited (0) 54 minutes ago                            unruffled_franklin
bb11c3bbaf5f   helloworld-django          "python manage.py ru…"   56 minutes ago   Exited (0) 56 minutes ago                            relaxed_banach
apluser@FengYeHong-HP:~$
apluser@FengYeHong-HP:~$ docker container rm bb11c3bbaf5f
bb11c3bbaf5f
apluser@FengYeHong-HP:~$

2.3.5 docker exec进入容器内部

apluser@FengYeHong-HP:~$ docker container ls
CONTAINER ID   IMAGE                      COMMAND                  CREATED          STATUS          PORTS                    NAMES
783e1ad29407   helloworld-django:latest   "python manage.py ru…"   12 seconds ago   Up 11 seconds   0.0.0.0:8100->8000/tcp   reverent_lalande
apluser@FengYeHong-HP:~$
apluser@FengYeHong-HP:~$ docker exec -it 783e1ad29407 bash
root@783e1ad29407:/app# ls -l
total 20
-rw-r--r-- 1 root root  483 Jun 11 11:48 Dockerfile
-rw-r--r-- 1 root root    0 Jun 13 23:58 db.sqlite3
drwxr-xr-x 4 root root 4096 Jun  7 00:38 hello
-rwxr-xr-x 1 root root  667 Jun  7 00:38 manage.py
-rw-r--r-- 1 root root   16 Jun  7 00:38 requirements.txt
drwxr-xr-x 3 root root 4096 Jun  7 00:38 web_project

2.3.6 docker container start 启动一个既存的容器

docker run的方式会创建并启动一个容器,同样的命令运行两次,就会生成两个一模一样的容器文件。
如果希望重复使用容器,就要使用docker container start命令,它用来启动已经生成、已经停止运行的容器文件。

在这里插入图片描述

2.3.7 docker container logs 查看 docker 容器的输出

⏹docker 容器的输出,即容器里面 Shell 的标准输出。如果

  • docker run 命令运行容器的时候,没有使用-it参数
  • docker container start 直接启动既存容器时

就要用这个命令查看输出。

在这里插入图片描述

2.3.8 docker container cp 复制容器内的文件到本地

⏹将容器内的requirements.txt文件复制到本地的指定路径中

apluser@FengYeHong-HP:~$ docker exec -it f0e58479ba3d bash
root@f0e58479ba3d:/app#
root@f0e58479ba3d:/app# ls -l
total 20
-rw-r--r-- 1 root root  483 Jun 11 11:48 Dockerfile
-rw-r--r-- 1 root root    0 Jun 13 23:58 db.sqlite3
drwxr-xr-x 4 root root 4096 Jun  7 00:38 hello
-rwxr-xr-x 1 root root  667 Jun  7 00:38 manage.py
-rw-r--r-- 1 root root   16 Jun  7 00:38 requirements.txt
drwxr-xr-x 3 root root 4096 Jun  7 00:38 web_project
root@f0e58479ba3d:/app#
root@f0e58479ba3d:/app# exit
exit
apluser@FengYeHong-HP:~$ docker container cp f0e58479ba3d:/app/requirements.txt /home/apluser/work/
Successfully copied 2.05kB to /home/apluser/work/
apluser@FengYeHong-HP:~$
apluser@FengYeHong-HP:~$ ls -l /home/apluser/work/requirements.txt
-rw-r--r-- 1 apluser apluser 16 Jun  7 09:38 /home/apluser/work/requirements.txt

2.4 registry仓库

Docker Registry 是 Docker 提供的镜像仓库服务,用于 存储、分发和管理 Docker 镜像。可使用 Docker Registry 来

  • 上传(push)镜像
  • 下载(pull)镜像
  • 搭建私有镜像仓库

Docker Registry 常与 docker login, docker push, docker pull 命令配合使用。

2.4.1 docker pull 镜像拉取

⏹镜像拉取语法:docker pull <registry>/<仓库>:<标签>

# 从docker的官网仓库拉取nginx镜像
docker pull nginx:latest
# 从私人仓库拉取镜像
docker pull myregistry.com:5000/myimage:latest

2.4.2 docker push 镜像推送

⏹在推送镜像之前,你需要为镜像添加仓库地址和标签。

# docker tag <本地镜像ID或名称> <registry>/<镜像名称>:<标签>
docker tag myapp:latest myregistry.com:5000/myapp:latest

⏹向指定的仓库推送镜像

# docker push <registry>/<镜像名称>:<标签>
docker push myregistry.com:5000/myapp:latest

三. docker-compose

3.1 遇到的问题

💦当我们直接使用docker run -it --rm -p 8100:8000 helloworld-django:latest命令创建并运行容器的时候,django工程会出现下面的提示,原因就在于我们在并没有进行数据迁移。

You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.

⏹我们可以通过下面的方式进行数据迁移

docker run -it \
-v $(pwd)/db.sqlite3:/app/db.sqlite3 \
-w /app \
helloworld-django \
python manage.py migrate

💥注意,在此案例中数据迁移之后的有数据的db.sqlite3文件并不在容器中,而是在本地的路径下。
因此,之后真正启动容器的时候,必须要将本地目录下的db.sqlite3文件挂载到容器中才行,也就是说容器中的程序读取的是本地目录中的db.sqlite3文件

在这里插入图片描述

⏹使用挂载的数据的同时,启动容器

  • -v /主机路径文件:/容器路径文件 这会让容器内部使用主机上的文件,从而让 db.sqlite3 的内容得以持久保存。
  • -w /app 设置容器内的工作目录是 /app,这个要与你 Dockerfile 中 WORKDIR 设置一致(通常也是 /app
docker run -it -p 8100:8000 \
-v $(pwd)/db.sqlite3:/app/db.sqlite3 \
-w /app \
helloworld-django

在这里插入图片描述

💦但是输入这么长的命令,不仅繁琐,还很容器出错,有没有什么更好的办法?

3.2 docker-compose.yml 配置文件

⏹将命令行中的配置命令,通过yml文件的方式简化到配置文件中

apluser@FengYeHong-HP:helloworld-django$ ls -l
total 152
-rw-r--r-- 1 apluser apluser    483 Jun 11 20:48 Dockerfile
-rw-r--r-- 1 apluser apluser 131072 Jun 14 14:49 db.sqlite3
-rw-r--r-- 1 apluser apluser    259 Jun 14 15:14 docker-compose.yml
drwxr-xr-x 4 apluser apluser   4096 Jun  7 09:38 hello
-rwxr-xr-x 1 apluser apluser    667 Jun  7 09:38 manage.py
-rw-r--r-- 1 apluser apluser     16 Jun  7 09:38 requirements.txt
drwxr-xr-x 3 apluser apluser   4096 Jun  7 09:38 web_project
apluser@FengYeHong-HP:helloworld-django$
apluser@FengYeHong-HP:helloworld-django$ cat docker-compose.yml
services:web:image: helloworld-djangobuild:context: .dockerfile: Dockerfileports:- "8100:8000"volumes:- ./db.sqlite3:/app/db.sqlite3working_dir: /appcommand: python manage.py runserver 0.0.0.0:8000

3.3 docker-compose build 构建镜像

在这里插入图片描述

3.4 数据迁移

docker-compose run web python manage.py migrate

  • 执行命令进行数据迁移
  • 此处的web应当和docker-compose.yml文件中的services对应的名称相同

在这里插入图片描述

💥需要注意的是,这种 docker-compose run 会启动一个一次性容器,它不会被 docker-compose up 管理到。

在这里插入图片描述

3.5 docker-compose up 运行容器

# --remove-orphans 在启动的时候,删除被遗漏的容器
docker-compose up --remove-orphans
# 在后台启动容器
docker-compose up -d

⏹如下图所示,容器启动成功,页面也能正常访问。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/diannao/87162.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

函数指针与指针函数:本质区别与高级应用

目录 一、概念本质解析 1. 函数指针&#xff08;Function Pointer&#xff09; 2. 指针函数&#xff08;Pointer Function&#xff09; 二、函数指针深度剖析 1. 基础用法示例 2. 高级应用&#xff1a;回调函数 3. 函数指针数组 三、指针函数深入探讨 1. 基础实现模式 …

【python】基于pycharm的海康相机SDK二次开发

海康威视二次开发相机管理 这段代码基于python开发的&#xff0c;用了opencv的一些库函数。实现了一个完整的海康机器人相机管理工具&#xff0c;支持多相机连接、参数配置、图像采集和实时显示功能。目前USB相机测试无误&#xff0c;除了丢一些包。 1. 主要类结构 HKCameraM…

HTTP 协议各个主要版本的功能特点、核心原理、使用场景总结

我们来系统总结一下 HTTP 协议各个主要版本的功能特点、核心原理&#xff08;用图示辅助说明&#xff09;以及典型使用场景。 核心演进目标&#xff1a; 提升性能、安全性、效率和灵活性。 1. HTTP/0.9 (1991) - 远古雏形 功能特点: 极其简单&#xff1a; 只支持 GET 方法。无…

Linux编程:3、进程通信-信号

一、进程通信概述 &#xff08;一&#xff09;进程通信的目的 在企业开发中&#xff0c;一个项目常常需要多个进程共同协作&#xff0c;而这些进程之间需要进行通信&#xff08;交换信息&#xff09;以便协作。本章内容主要围绕信号讲解&#xff0c;其它进程通信的常用方式请…

深度解析Vue.js组件开发与实战案例

一、Vue.js组件化思想 Vue.js的核心思想之一就是组件化开发。组件系统是Vue的一个重要概念,它允许我们使用小型、独立和通常可复用的组件构建大型应用。在Vue中,组件本质上是一个拥有预定义选项的Vue实例。 1.1 为什么需要组件化 代码复用:避免重复造轮子,提高开发效率可…

TensorFlow 2.0 与 Python 3.11 兼容性

TensorFlow 2.0 与 Python 3.11 兼容性 TensorFlow 2.0 官方版本对 Python 3.11 的支持有限&#xff0c;可能出现兼容性问题。建议使用 TensorFlow 2.10 或更高版本&#xff0c;这些版本已适配 Python 3.11。若需强制运行&#xff0c;可通过以下方式解决依赖冲突&#xff1a; …

MyBatisPlus 全面学习路径

MyBatisPlus 全面学习路径 学习目录 第一部分&#xff1a;MyBatisPlus 基础 MyBatisPlus 简介与核心特性快速入门与环境搭建核心功能&#xff1a;BaseMapper 与 CRUD 接口条件构造器&#xff08;Wrapper&#xff09;详解ActiveRecord 模式主键策略与通用枚举 第二部分&…

React16,17,18,19更新对比

文章目录 前言一、16更新二、17更新三、18更新四、19更新总结 前言 总结react 16&#xff0c;17&#xff0c;18&#xff0c;19所更新的内容&#xff0c;并且部分会涉及到原理讲解。 一、16更新 1、在16.8之前更新&#xff0c;还是基于class组件的升级和维护更新。并且更新了一…

【git】有两个远程仓库时的推送、覆盖、合并问题

当你执行 git pull origin develop(或默认的 git pull)时,Git 会把远端 origin/develop 的提交合并到你本地的 develop,如果远端已经丢掉(或从未包含)你之前在私库(priv)里提交过的改动,那这些改动就会被「覆盖」,看起来就像「本地修改没了」。 要解决这个问题,分…

Spring Boot 集成国内AI,包含文心一言、通义千问和讯飞星火平台实战教程

Spring Boot 集成国内AI&#xff0c;包含文心一言、通义千问和讯飞星火平台实战教程 一、项目结构二、添加Maven依赖三、配置API密钥 (application.yml)四、配置类1. AI配置类 (AiProperties.java)2. 启用配置类 (AiConfig.java) 五、服务层实现1. 文心一言服务 (WenxinService…

Elastic Search 学习笔记

1. Elasticsearch 是什么&#xff1f;有哪些应用场景&#xff1f; Elasticsearch 整体原理流程&#xff1f; Elasticsearch 是一个为海量数据提供近实时搜索和分析能力的分布式搜索引擎&#xff0c;广泛应用于全文检索、日志分析和大数据处理场景中。 Elasticsearch 整体原理…

动态规划之斐波那契数(一)

解法一&#xff1a;递归 class Solution { public:int fib(int n) {if(n<2) return n;return fib(n-1)fib(n-2);} }; 解法二&#xff1a;dp class Solution { public:int fib(int N) {if (N < 1) return N;int dp[2];dp[0] 0;dp[1] 1;for (int i 2; i < N; i) {…

如何设置爬虫的访问频率?

设置爬虫的访问频率是爬虫开发中的一个重要环节&#xff0c;尤其是在爬取大型网站&#xff08;如1688&#xff09;时&#xff0c;合理的访问频率可以避免对目标网站造成过大负担&#xff0c;同时也能降低被封禁的风险。以下是一些常见的方法和建议&#xff0c;帮助你合理设置爬…

前端面试六之axios

一、axios简介 Axios 是一个基于 Promise 的 HTTP 客户端&#xff0c;用于浏览器和 Node.js 环境。在浏览器端&#xff0c;Axios 的底层实现是基于原生的 XMLHttpRequest&#xff08;XHR&#xff09;。它对 XHR 进行了封装&#xff0c;增加了 Promise 支持、自动转换 JSON 数据…

模板方法模式Template Method Pattern

模式定义 定义一个操作中算法的骨架&#xff0c;而将一些步骤延迟到子类中&#xff0c;模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤 类行为型模式 模式结构 AbstractClass&#xff1a;抽象类ConcreteClass&#xff1a;具体子类 只有类之间的继…

【行云流水AI笔记】游戏里面的强化学习使用场景

强化学习在游戏中的应用已从早期的棋类博弈扩展到现代复杂游戏的全流程优化&#xff0c;以下是结合最新技术进展的核心应用场景及典型案例&#xff1a; 一、竞技游戏的策略突破 1. 策略博弈类游戏 代表案例&#xff1a;AlphaGo/AlphaZero&#xff08;围棋&#xff09;、Alph…

使用Python和PyTorch框架,基于RetinaNet模型进行目标检测,包含数据准备、模型训练、评估指标计算和可视化

下面是一个完整的实现方案,使用Python和PyTorch框架,基于RetinaNet模型进行目标检测,包含数据准备、模型训练、评估指标计算和可视化。 import os import numpy as np import matplotlib.pyplot as plt import torch import torchvision from torchvision.models.detection…

springboot服务如何获取pod当前ip方案及示例

在 Kubernetes 集群中&#xff0c;Spring Boot 服务获取 Pod 当前 IP 的方案主要有两种&#xff1a;通过环境变量注入 或 通过 Java 代码动态获取网络接口 IP。以下是两种方案的详细说明及示例&#xff1a; 方案一&#xff1a;通过 Kubernetes Downward API 注入环境变量 原理…

1.MySQL三层结构

1.所谓安装的Mysql数据库&#xff0c;就是在电脑上安装了一个数据库管理系统&#xff08;【DBMS】database manage system&#xff09;&#xff0c;这个管理程序可以管理多个数据库。 2.一个数据库中可以创建多个表&#xff0c;以保存数据&#xff08;信息&#xff09;。【数据…

[深度学习]目标检测基础

目录 一、实验目的 二、实验环境 三、实验内容 3.1 LM_BoundBox 3.1.1 实验代码 3.1.2 实验结果 3.2 LM_Anchor 3.2.1 实验代码 3.2.2 实验结果 3.3 LM_Multiscale-object-detection 3.3.1 实验代码 3.3.2 实验结果 四、实验小结 一、实验目的 了解python语…