0.在CentOS中,启动docker :

sudo systemctl start docker

1.在 CentOS 中,要删除一个文件夹及其内容,可以使用 rm 命令的 -r 或 --recursive 选项。以下是命令示例:

rm -r /path/to/folder

请确保在执行删除操作之前确认你要删除的文件夹路径是正确的,因为删除后无法恢复。此命令将递归地删除指定路径下的文件夹及其内容。

如果要删除文件夹时不显示任何提示,请使用 rm 命令的 -f 或 --force 选项,如下所示:

rm -rf /path/to/folder

这个命令会强制删除文件夹及其内容,而不会询问确认。请谨慎使用该选项,因为它会永久删除文件夹,而无法恢复。

2.Upstart和systemd都是Linux系统中的初始化(init)系统。它们负责在系统引导过程中启动和管理系统服务、进程和其他系统组件。

Upstart(传统的init系统):

Upstart最初由Ubuntu开发,是一个事件驱动的init系统。

它使用基于事件的启动方式,允许系统在特定事件发生时自动启动和停止服务。

Upstart使用基于shell脚本的配置文件(通常是/etc/init/目录下的.conf文件)来定义和管理系统服务。

在Upstart中,每个服务都可以定义其启动条件、依赖关系和执行命令等。

systemd:

systemd是一个较新的init系统,目前已被广泛采用,包括许多主流Linux发行版,如Fedora、CentOS、Debian等。

systemd采用并行启动方式,可以更快地启动系统服务,并具有更好的性能和可靠性。

它使用基于单元(unit)的配置文件(通常是/etc/systemd/system/目录下的.service文件)来定义和管理系统服务。

systemd提供了更多功能,如进程监控、日志记录、资源控制等,并且允许对系统进行更精细的控制和管理。

总的来说,Upstart和systemd都是Linux系统中的init系统,用于管理系统服务和进程。systemd在当前的Linux发行版中更为普遍使用,并提供更丰富的功能和性能优化。

3.systemctl 是一个用于管理 systemd 服务的命令行工具。systemd 是一种在现代 Linux 系统中常见的初始化(init)系统,而 systemctl 则是与之交互的主要工具之一。

systemctl 命令用于启动、停止、重启、重载或查询系统服务的状态。它还可以管理单位文件(unit files),这些文件描述了系统服务、套接字、设备、挂载点等等。通过 systemctl 命令,你可以管理系统的各种操作和服务。

以下是一些常用的 systemctl 命令示例:

启动一个服务:

systemctl start servicename

停止一个服务:

systemctl stop servicename

重启一个服务:

systemctl restart servicename

重新加载一个服务的配置:

systemctl reload servicename

查询一个服务的状态:

systemctl status servicename

启用一个服务,使其在系统启动时自动启动:

systemctl enable servicename

禁用一个服务,使其在系统启动时不自动启动:

systemctl disable servicename

请注意,上述命令中的 "servicename" 是你要管理的具体服务的名称。systemctl 命令提供了丰富的选项和功能,可以更全面地管理和控制系统服务。

systemctl 的全称是 "System Control"。它是一个在 systemd 初始化系统中用于管理系统服务的命令行工具。systemctl 提供了对系统服务的启动、停止、重启、重载、查询状态等操作的控制功能。此工具允许管理员管理和监控系统中运行的服务,并与 systemd 协同工作以确保系统的正常运行。

4.docker 的hello-world

(1)必须开启docker服务,并且是sudo身份:

sudo systemctl start docker

(2)以sudo身份,运行docker run hello-world

sudo docker run hello-world

5.dockerfile的详细解释

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443 FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["publishDemo.csproj", "."]
RUN dotnet restore "./publishDemo.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "publishDemo.csproj" -c Release -o /app/build FROM build AS publish
RUN dotnet publish "publishDemo.csproj" -c Release -o /app/publish FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "publishDemo.dll"]

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base

使用 mcr.microsoft.com/dotnet/aspnet:6.0 作为基础镜像。这是一个官方提供的包含 ASP.NET Core 运行时的镜像。

将其命名为 base,以便在后续的构建阶段引用。

WORKDIR /app

在Dockerfile中,WORKDIR 指令用于设置后续执行的指令在Docker镜像中的工作目录。它决定了像 RUN、CMD、COPY 和 ADD 这样的命令将在哪个目录下执行。

WORKDIR /app 将工作目录设置为容器内的 /app 目录。这意味着Dockerfile中后续的命令将在 /app 目录下执行。如果镜像中不存在该目录,Docker会在容器内创建它。

例如,如果有一个 RUN 指令用于安装一些依赖包:

RUN apt-get install -y some-package

它将在 /app 目录下执行,并在该目录中安装相应的软件包。

这是非常有用的,因为它可以使Dockerfile更加简洁,并帮助避免在多个指令中重复写长路径。此外,它有助于组织文件并保持容器内部文件系统的整洁。

设置容器内的工作目录为 /app。接下来的命令将在该目录下执行。

EXPOSE 80

声明容器将监听的端口号为 80。

这是可选的,用于指示容器的网络行为。实际的端口映射需要在运行容器时指定。

EXPOSE 443

声明容器将监听的端口号为 443(用于 HTTPS)。

这也是可选的,根据你的应用程序需求决定是否需要。

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build

使用 mcr.microsoft.com/dotnet/sdk:6.0 作为构建镜像的基础镜像。这是一个包含 .NET Core SDK 的官方镜像。

将其命名为 build,以便在后续的构建阶段引用。

WORKDIR /src

设置容器内的工作目录为 /src。

COPY ["publishDemo.csproj", "."]

将当前目录下的 publishDemo.csproj 文件复制到容器内的当前工作目录。

RUN dotnet restore "./publishDemo.csproj"

在容器内执行 dotnet restore 命令,还原项目的依赖项。

在Docker容器内执行 dotnet restore 命令是指在运行Docker镜像创建的容器时,通过该命令还原项目的依赖项。这通常用于构建包含 .NET Core 或 .NET 5+ 应用程序的Docker镜像。

当你构建一个 .NET Core 或 .NET 5+ 项目时,通常会依赖一些NuGet包(包含项目所需的各种库和工具)。这些依赖项通常在项目的 *.csproj 文件中定义。在构建过程中,如果使用了新的依赖项或更改了依赖项的版本,你需要还原这些依赖项,以确保在构建项目时使用正确的包。

通过 dotnet restore 命令还原项目的依赖项。这样,即使项目的 *.csproj 文件有更新,镜像构建过程中也会得到最新的依赖项。

dotnet restore 命令会读取项目文件中的依赖项描述,并根据描述从NuGet存储库中下载相应的包。完成后,依赖项将保存在容器中,以供后续的构建、发布或运行步骤使用。

COPY . .

将当前目录下的所有文件复制到容器内的当前工作目录。

WORKDIR "/src/."

设置容器内的工作目录为 /src。

RUN dotnet build "publishDemo.csproj" -c Release -o /app/build

在容器内执行 dotnet build 命令,构建项目。

-c Release 表示使用 Release 配置进行构建。

-o /app/build 表示将构建输出放置在容器内的 /app/build 目录。

FROM build AS publish

使用 build 阶段构建的镜像作为基础镜像。

将其命名为 publish,以便在后续的构建阶段引用。

RUN dotnet publish "publishDemo.csproj" -c Release -o /app/publish

在容器内执行 dotnet publish 命令,发布项目。

-c Release 表示使用 Release 配置进行发布。

-o /app/publish 表示将发布输出放

FROM base AS final

使用之前定义的 base 阶段的镜像作为基础镜像。

将其命名为 final,以便在最终的容器中引用。

WORKDIR /app

设置容器内的工作目录为 /app。

COPY --from=publish /app/publish .

从之前定义的 publish 阶段复制 /app/publish 目录中的内容到当前容器的 /app 目录。

这将复制已经发布的应用程序文件到最终的容器中。

ENTRYPOINT ["dotnet", "publishDemo.dll"]

定义容器启动时执行的命令。

在这种情况下,它会使用 dotnet 命令来运行 publishDemo.dll,即应用程序的入口点。

在Dockerfile中,RUN 和 CMD 是两个不同的指令,它们在构建Docker镜像和运行容器时有不同的作用。

RUN 指令:

RUN 指令用于在Docker镜像的构建过程中执行命令。这些命令通常是用于安装软件包、配置环境、下载文件等操作。每个RUN 指令都会在Docker镜像的一个新的临时容器中执行,然后将结果保存为一个新的镜像层。

例如,在Dockerfile中使用 RUN 安装软件包:

RUN apt-get update && apt-get install -y some-package

每个RUN 指令都会导致一个新的镜像层,因此可以使用RUN 指令链式地执行多个命令,但要注意避免过度增加镜像层,以减少镜像大小。

CMD 指令:

CMD 指令用于设置容器启动时的默认命令和参数。一个Dockerfile中只能有一个CMD指令,多次使用只会执行最后一个。

当你通过docker run命令启动容器时,可以覆盖CMD指令提供的默认命令。如果在docker run命令中指定了其他命令,那些命令会替代CMD指令中设置的默认命令。

例如,在Dockerfile中设置CMD来启动应用程序:

CMD ["python", "app.py"]

当运行容器时,如果没有提供其他命令,容器将使用CMD中指定的命令来启动应用程序。

总结:

RUN 用于在构建Docker镜像的过程中执行命令,影响镜像的内容。

CMD 用于设置容器启动时的默认命令和参数,影响容器的启动行为。

6.docker 在windows中实操

  • 方式一:通过cmd

    (1)切换到csproj中目录中,执行docker build -t <yourappname> .,选项-t给映像七个名字,默认tag是latest。注意最后有一个.,表示文件地址。

    (2)执行docker run -p 8002:80 <yourappname>

    (3)浏览器或者postman访问成功:

  • 方式二:通过docker desktop



    必须选择端号:



    运行成功!



    访问成功!

5* vs向docker hub发布遇到的坑:

(1)Microsoft.WebTools.Shared.Exceptions.WebToolsException: 发布时遇到错误。

用命令行方式解决,在项目文件夹下,在控制台中运行:dotnet publish -r linux-x64

(2)Microsoft.WebTools.Azure.Publish.Docker.DockerCommandException: 运行 docker.exe push 命令失败。

Get "https://registry-1.docker.io/v2/": EOF

解决方法:用everything 找到daemon.json的位置,打开加入科大加速器源。

7.Win10安装docker

https://www.runoob.com/docker/windows-docker-install.html

https://learn.microsoft.com/zh-cn/windows/wsl/install-manual

从microsoft store下载的ubuntu会报错:slRegisterDistribution failed with error: 0x800701bc 错误

解决方案:使用管理员权限运行powershell,并输入wsl --update 执行



下载完成后,需要搜索daemon.json,打开,并添加科大的加速器地址,否则docker desktop的login登不上去

8.nginx配置

https://cloud.tencent.com/document/product/214/33413

在CentOS中配置Nginx可以按照以下步骤进行:

安装Nginx:

运行以下命令安装Nginx:

sudo yum install nginx

启动Nginx:

安装完成后,运行以下命令启动Nginx服务:

sudo systemctl start nginx

配置防火墙规则(如果需要):

如果您启用了防火墙,您需要配置防火墙以允许HTTP(80端口)和HTTPS(443端口)流量通过。运行以下命令添加防火墙规则:

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

配置Nginx站点:

Nginx的主要配置文件位于/etc/nginx/nginx.conf,您可以使用文本编辑器(如vi或nano)打开该文件进行编辑。

在http块中添加或修改相关配置,例如:

server {
listen 80;
server_name example.com; location / {
root /path/to/your/website;
index index.html;
}
}

上述示例中,监听80端口,将所有请求转发到/path/to/your/website目录,并使用index.html作为默认页面。

检查Nginx配置是否正确:

运行以下命令检查Nginx配置文件的语法是否正确:

sudo nginx -t

重新加载Nginx配置:

如果配置文件检查通过,请运行以下命令重新加载Nginx配置以使更改生效:

sudo systemctl reload nginx

如果您在运行sudo firewall-cmd --permanent --add-service=http命令时收到"FirewallD is not running"的提示,这意味着防火墙服务FirewallD没有在您的系统上运行。

在CentOS中,有两种常见的防火墙解决方案:FirewallD和iptables。您可以根据您的系统设置确定所使用的防火墙。

如果您确定要使用FirewallD,并且它当前没有运行,您可以尝试启动FirewallD服务并添加防火墙规则。请按照以下步骤操作:

启动FirewallD服务:

运行以下命令以启动FirewallD服务:

sudo systemctl start firewalld

添加防火墙规则:

一旦FirewallD服务正在运行,您可以运行您之前提到的命令以添加HTTP服务的防火墙规则:

sudo firewall-cmd --permanent --add-service=http

重新加载防火墙规则:

运行以下命令以重新加载防火墙规则,使更改生效:

sudo firewall-cmd --reload

这样,您应该能够成功添加HTTP服务的防火墙规则。

如果您不想使用FirewallD,您也可以考虑使用iptables作为防火墙解决方案。请注意,iptables和FirewallD是两种不同的防火墙工具,具体使用哪种取决于您的系统配置和偏好。

9.详解docker run -it ubuntu /bin/bash命令的含义

运行 docker run -it ubuntu /bin/bash 命令时,它将执行以下操作:

docker run 是用于创建和运行 Docker 容器的命令。

-it 选项告诉 Docker 在交互模式下运行容器,并分配一个终端(TTY)。这使你能够与容器进行交互,并在容器的终端上执行命令。

ubuntu 是指要使用的镜像名称。在这种情况下,它指定了使用 Ubuntu 镜像作为容器的基础。

/bin/bash 是在容器中要执行的命令。它告诉 Docker 在容器中启动一个 Bash 终端。

因此,docker run -it ubuntu /bin/bash 命令将创建一个基于 Ubuntu 镜像的容器,并在容器内部启动一个交互式的 Bash 终端。这样你就可以与容器进行交互,并在 Bash 终端中执行命令,就像你在本地计算机的终端中一样。

Bash(Bourne Again SHell)是一个广泛使用的命令行解释器或终端,它是许多Linux和Unix系统默认的Shell。终端是计算机用户与操作系统进行交互的界面,允许用户输入命令并接收系统的响应。

Bash终端提供了一个命令行界面(CLI),用户可以在其中输入各种命令来执行各种任务。它是一个功能强大的工具,提供了很多用于管理文件和目录、运行程序、配置系统和进行各种操作的命令。

使用Bash终端,你可以执行以下操作:

浏览文件系统并操作文件和目录

运行各种命令和程序

设置环境变量

编写和执行脚本

管理进程和服务

进行网络操作

配置系统和用户设置

进行包管理和软件安装等

Bash终端具有丰富的命令语法和功能,可以通过命令和选项的组合来完成各种任务。它还提供了命令历史记录、自动补全和各种快捷键等功能,以提高工作效率。

在Linux和Unix系统中,/bin/bash 是 Bash Shell 可执行文件的路径。当你在终端或命令行中执行 /bin/bash 命令时,它会启动一个新的 Bash Shell 实例。

Bash Shell 是一种命令行解释器,它能够解释和执行用户在终端中输入的命令。通过执行 /bin/bash 命令,你启动了一个新的 Bash Shell 会话,你可以在其中输入命令并与系统进行交互。

/bin/bash 路径指定了 Bash Shell 的位置,它是由操作系统提供的默认Shell。这意味着当你执行 /bin/bash 命令时,你将使用系统中的 Bash 版本来运行终端。

需要注意的是,/bin/bash 只是其中一种可能的Shell选项。不同的操作系统和发行版可能使用不同的Shell,默认情况下可能是Bash或其他Shell(如/bin/sh 或 /bin/zsh)。/bin/bash 用于示例只是常见的一种情况。

10.which 命令用于查找给定命令的可执行文件的路径。

它可以帮助你确定特定命令在系统中的位置。

例如which ls,这将返回 ls 命令的路径,例如 /bin/ls。

如果找不到命令或命令没有可执行文件,which 命令将不会返回任何输出。

which 命令在确定命令的完整路径时非常有用,尤其是当你需要知道在终端中输入的命令实际上是哪个可执行文件。它可以帮助你解决命令是否存在、解决命令冲突和检查命令所在的位置等问题。

11.查询文件的路径

在Linux中,你可以使用以下命令来查询文件的路径:

which:用于查询可执行命令的路径。例如,which ls 将返回 ls 命令的路径。

whereis:用于查询命令、源代码文件和帮助文档的路径。例如,whereis python 将返回与 Python 相关的二进制文件、源代码和帮助文档的路径。

locate:用于基于文件名快速搜索文件。它使用预生成的文件数据库进行搜索,因此速度较快。例如,locate myfile.txt 将搜索并返回名为 myfile.txt 的文件的路径。



可以发现没有找到的时候,有红色提示,暗示可以升级数据,然后再查找,然后升级后,果然全部查找到了。

locate 命令依赖于一个称为 "locate database" 的索引文件,其中包含了系统中所有文件和目录的信息。如果你最近安装了新的文件或修改了文件名,但没有更新 locate 数据库,那么 locate 命令可能无法找到最新的文件。你可以使用 sudo updatedb 命令更新 locate 数据库,然后再次运行 locate nginx.conf。

find:用于在指定目录下递归搜索文件。可以根据不同的条件进行搜索,如文件名、文件类型、权限等。例如,find /home -name myfile.txt 将在 /home 目录下查找名为 myfile.txt 的文件,并返回其路径。

realpath:用于获取给定文件的绝对路径。例如,realpath myfile.txt 将返回 myfile.txt 的绝对路径。

这些命令提供了不同的方式来查询文件的路径,你可以根据具体的需求选择适合的命令来查找文件。

12.nano的基本使用

Nano是一款轻量级的文本编辑器,常用于Linux系统。下面是几种常用的基本用法:1、启动Nano:在命令行中输入nano,回车即可启动。

2、打开文件:使用命令nano file_name即可打开文件。

3、保存文件:按Ctrl + O即可保存文件。

4、退出Nano:按Ctrl + X即可退出Nano。

5、撤销:按Ctrl + U即可撤销最近的操作。

6、搜索:按Ctrl + W即可搜索文本。

7、替换:按Ctrl + R即可替换文本。

8、移动光标:您可以使用方向键来移动光标。

9、复制和粘贴:您可以使用Ctrl + K来复制当前行,使用Ctrl + U来粘贴。

10、拆分和合并行:您可以使用Ctrl + J来拆分当前行,使用Ctrl + O来合并当前行和下一行。

11、修改文件名:在保存文件时,您可以使用Ctrl + O打开“保存文件”对话框,在对话框中输入新文件名即可修改文件名。

12、在文件末尾插入新行:您可以使用Ctrl + O打开“保存文件”对话框,然后在对话框中输入+$即可在文件末尾插入新行。

Ctrl + G:显示帮助文档,提供有关 Nano 命令的详细信息。

Ctrl + O:保存文件。在保存文件时,你可以指定文件名和路径。

Ctrl + X:退出 Nano 编辑器。如果有未保存的更改,它会提示你保存或放弃更改。

Ctrl + W:搜索文本。你可以输入要搜索的关键字,并在文件中进行搜索。

Ctrl + K:剪切一行或选定的文本。

Ctrl + U:粘贴剪切的文本。

Ctrl + A:跳转到行首。

Ctrl + E:跳转到行尾。

Ctrl + Y:向上滚动一页。

Ctrl + V:向下滚动一页。

Ctrl + _:跳转到指定行号。

Ctrl + C:显示当前光标位置的行号。

Ctrl + G:G 可以理解为 "Guide",按下 Ctrl + G 可以获取编辑器的指导(帮助)文档。
Ctrl + O:O 可以理解为 "Output" 或 "Overwrite",按下 Ctrl + O 可以将你的编辑内容输出(保存)到文件中。
Ctrl + X:X 可以理解为 "Exit",按下 Ctrl + X 可以退出编辑器。
Ctrl + W:W 可以理解为 "Search Word",按下 Ctrl + W 可以搜索文件中的关键字。
Ctrl + K:K 可以理解为 "Kill",按下 Ctrl + K 可以剪切(删除)一行或选定的文本。
Ctrl + U:U 可以理解为 "Unite" 或 "Undo",按下 Ctrl + U 可以粘贴(恢复)剪切的文本。
Ctrl + A:A 可以理解为 "Beginning",按下 Ctrl + A 可以跳转到行首。
Ctrl + E:E 可以理解为 "End",按下 Ctrl + E 可以跳转到行尾。
Ctrl + Y:Y 可以理解为 "Up",按下 Ctrl + Y 可以向上滚动一页。
Ctrl + V:V 可以理解为 "Down",按下 Ctrl + V 可以向下滚动一页。
Ctrl + _:_ 可以理解为 "Line number",按下 Ctrl + _ 可以跳转到指定行号。
Ctrl + C:C 可以理解为 "Cursor position",按下 Ctrl + C 可以显示当前光标所在行的行号。

这些关联提示可以帮助你记忆 Nano 编辑器的常用命令。你也可以结合自己的记忆方式来记忆这些快捷键,选择最适合自己的关键词或提示。随着使用的经验增加,你会逐渐熟悉和掌握这些命令。

这些是nano的基本用法,但是nano还有很多其他的功能和用法。您可以在使用nano时按Ctrl + G来查看帮助文档,了解更多的用法和功能。

13.linux创建新文件

在 Linux 中,你可以使用以下命令来创建新文件:

  • touch:touch 命令用于创建空白文件或更新现有文件的访问和修改时间戳。如果文件不存在,touch 命令将创建一个新的空白文件。语法如下:

    touch <filename>这将创建一个名为 的空白文件。
  • echo:echo 命令通常用于在终端输出文本,但也可以用来创建包含文本内容的文件。语法如下:

    echo "Text content" > <filename>这将创建一个名为 的文件,并将 "Text content" 写入该文件。
  • cat:cat 命令也可以用于创建文件并将文本写入文件。语法如下:

    cat > <filename>然后,在新的一行中输入文本内容,按下 Ctrl + D 结束输入并保存文件。"concatenate"(连接)
  • vi 或 vim 是一个强大的文本编辑器,可以用于创建和编辑文件。语法如下:

    vi <filename>

    nano提示file name to write,怎么处理:

    当你在 Nano 编辑器中看到 "File Name to Write"(要写入的文件名)的提示时,这意味着你尚未指定要保存文件的名称或路径。

要处理这个提示,你需要执行以下步骤:

在提示符后面,输入你要保存的文件名。你可以使用任何有效的文件名。例如,你可以输入 myfile.txt 来保存文件为 "myfile.txt"。

如果你希望将文件保存到特定的路径下,可以在文件名前面添加路径信息。例如,要将文件保存在 /path/to/directory/ 目录下,可以输入 /path/to/directory/myfile.txt。

按下回车键确认文件名。

如果文件不存在,Nano 将会创建一个新文件并将其命名为你指定的文件名。如果文件已经存在,Nano 将会覆盖现有文件。

在保存文件后,你可以继续在 Nano 编辑器中编辑文件或选择退出编辑器。

请注意,如果你不指定文件名或路径并按下回车键,Nano 编辑器可能会默认将文件保存在当前工作目录下,并使用一个默认的临时文件名。

确保根据你的需求提供正确的文件名和路径信息,以便将文件保存到你想要的位置。

14.docker start和restart有什么区别

docker start:docker start 命令用于启动已经停止的容器。如果容器处于停止状态,它将从停止状态启动,并保持在后台运行。该命令只能用于已经存在的容器。

docker restart:docker restart 命令用于重新启动正在运行的容器。无论容器的状态是运行中还是停止,它都会被停止然后重新启动。该命令只能用于已经存在且正在运行的容器。

15.进入容器

在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:

docker attach

docker exec:推荐使用 docker exec 命令,因为此命令会退出容器终端,但不会导致容器的停止。



验证了exec退出后,容器并不会停止。

16PaaS环境是什么

PaaS(Platform as a Service)是云计算服务模型之一,它提供了一个完整的应用开发和部署平台,开发人员可以在这个平台上构建、测试、部署和管理应用程序,而无需关注底层的基础设施层面。

PaaS环境提供了一个预配置的开发框架,包括操作系统、数据库、开发工具和应用程序运行时环境等。开发人员可以利用这些工具和环境来开发和部署自己的应用程序,而无需自己搭建和配置基础设施。

PaaS环境通常提供了一系列的服务和功能,例如应用程序托管、自动扩展、负载均衡、数据库集成、安全性管理和日志记录等。这些功能使开发人员能够专注于应用程序的开发和功能实现,而无需花费太多精力在基础设施的管理上。

总之,PaaS环境为开发人员提供了一个方便、高效的应用开发和部署平台,使他们能够更专注于应用程序的开发和创新。

17.更新服务器上的docker

构建新的Docker镜像:在本地开发环境中,确保您已经完成了ASP.NET Core程序的更新,并且可以成功构建和运行该程序。然后,使用Docker命令或Docker Compose文件,构建一个新的Docker镜像,该镜像包含了更新后的ASP.NET Core程序。

推送镜像到Docker仓库:将更新后的Docker镜像推送到一个Docker仓库,例如Docker Hub或私有的Docker仓库。这将使得云服务器可以从该仓库中拉取最新的镜像。

在云服务器上拉取并运行新的镜像:登录到云服务器,在服务器上运行以下命令,拉取并运行最新的Docker镜像:

sudo docker pull <镜像名称>:<标签>
sudo docker stop <容器名称或ID>
sudo docker rm <容器名称或ID>
sudo docker run -d --name <容器名称> -p <主机端口>:<容器端口> <镜像名称>:<标签>

请将<镜像名称>替换为您推送到仓库的Docker镜像名称,<标签>替换为相应的标签。同时,将<容器名称>替换为您想要为容器指定的名称,<主机端口>和<容器端口>替换为适当的端口映射设置。

这将拉取最新的镜像,并停止并删除之前运行的容器,然后运行一个新的容器,该容器基于更新后的镜像。

18.删除容器

比如:

docker rm -f 1e560fca3906

docker rm 是 Docker 命令用于删除容器的部分。rm 是 "remove" 的缩写。

-f 是一个选项,用于强制删除容器。如果容器正在运行,使用 -f 选项将会强制停止并删除容器。

1e560fca3906 是要删除的容器的标识符,它可以是容器的短 ID 或完整的长 ID。每个 Docker 容器都有一个唯一的标识符,用于在操作容器时进行引用。

通过执行 docker rm -f 1e560fca3906 命令,Docker 会尝试停止并删除标识为 1e560fca3906 的容器。如果容器正在运行,将会被强制停止并删除。如果容器已经停止,它将被直接删除。

下面的命令可以清理掉所有处于终止状态的容器。

$ docker container prune

19.导出容器到本地

导入容器快照

以使用 docker import 从容器快照文件中再导入为镜像,以下实例将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1:

cat docker/ubuntu.tar | docker import - test/ubuntu:v1

该命令 cat docker/ubuntu.tar | docker import - test/ubuntu:v1 的含义如下:

cat docker/ubuntu.tar:使用 cat 命令读取名为 docker/ubuntu.tar 的文件。cat 是一个常见的命令行工具,用于显示文件内容。

|:管道操作符,将前一个命令的输出作为后一个命令的输入。在这个命令中,它将 cat 命令的输出传递给下一个命令。

docker import - test/ubuntu:v1:docker import 是 Docker 的命令之一,用于将文件系统打包为 Docker 镜像。- 表示将从标准输入读取输入数据。test/ubuntu:v1 是要创建的新镜像的名称和标签。

综合起来,该命令的目的是从名为 docker/ubuntu.tar 的文件中读取文件系统,然后使用 Docker 的 import 命令将其打包为一个名为 test/ubuntu:v1 的新镜像。通过使用管道操作符 |,将文件内容传递给 docker import 命令,而不是从文件路径直接导入。

此外,也可以通过指定 URL 或者某个目录来导入,例如:

docker import http://example.com/exampleimage.tgz example/imagerepo

20.docker run再认识

在docker容器中运行一个 Python Flask 应用来运行一个web应用。

runoob@runoob:~# docker pull training/webapp  # 载入镜像
runoob@runoob:~# docker run -d -P training/webapp python app.py

training/webapp是镜像名称,python app.py是命令,正如help中所描述![]是可选项,[options]是可选项,options是占位符,command也是占位符.

21.docker删除镜像

使用 docker rmi 命令。下面是删除镜像的步骤:

查看已有镜像:首先,使用以下命令查看当前已有的镜像列表:

docker images

选择要删除的镜像:根据您想要删除的镜像的仓库名称、标签或 ID,选择要删除的镜像。

执行删除命令:使用以下命令删除选定的镜像。将 替换为镜像的仓库名称、标签或 ID。

docker rmi <IMAGE>

如果要删除多个镜像,可以在命令中指定多个 参数,或者使用空格分隔多个镜像的标识符。

例如,删除单个镜像的命令可能如下所示:

docker rmi my-image:tag

而删除多个镜像的命令可能如下所示:

docker rmi my-image1:tag1 my-image2:tag2

22.docker显示日志

例如:

docker logs -f bf08b7f2cd89

docker logs -f bf08b7f2cd89 是一个 Docker 命令,用于查看指定容器的日志。下面是对该命令的详细解释:

docker logs 是 Docker 命令的一部分,用于查看容器的日志。通过该命令,您可以获取容器在运行过程中输出的日志信息。

-f 是一个选项,代表 follow,用于持续跟踪容器的日志输出。当指定 -f 选项时,docker logs 命令会实时显示容器的最新日志,并不会退出。

bf08b7f2cd89 是要查看日志的容器的标识符,它可以是容器的短 ID 或完整的长 ID。每个 Docker 容器都有一个唯一的标识符,用于在操作容器时进行引用。

通过执行 docker logs -f bf08b7f2cd89 命令,您可以实时地查看标识为 bf08b7f2cd89 的容器的日志输出。这对于监控容器的运行状态、调试容器中的问题或查看应用程序的日志非常有用。

22.ocker inspect 来查看 Docker 的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息。

23.如何在docker hub上更改为私有镜像

要将 Docker Hub 上的仓库从公开更改为私有,请按照以下步骤进行操作:

打开浏览器并访问 Docker Hub 网站:https://hub.docker.com/

使用您的 Docker Hub 帐户登录。

在页面的顶部导航栏中,点击 "Repositories"(仓库)。

找到您要更改为私有的仓库,并点击它。

进入仓库页面后,在仓库概述信息的右侧,您会看到一个 "Settings"(设置)按钮。点击它。

在仓库设置页面中,您会看到一个 "Visibility"(可见性)部分。

点击 "Change visibility"(更改可见性)链接。

在弹出的对话框中,选择 "Private"(私有)选项。

确认更改后,点击 "Save"(保存)按钮。

此时,您的仓库将从公开更改为私有。现在,仓库中的镜像将只对授权用户可见。

请注意,将仓库更改为私有后,除授权用户外的人将无法查看或拉取该仓库中的镜像。只有那些您明确添加到仓库的用户才能访问其中的镜像。确保您已经正确管理访问权限,以便只有需要访问的人才能够看到和使用您的镜像。

24.docker更新镜像

  • 对于镜像开发者:

    (1)进行更改并构建新镜像:根据您的需求,在本地环境中进行更改和更新,例如更新软件包、添加新功能等。一旦您完成了更改,您需要构建新的镜像。确保在构建过程中使用了适当的标签来标识新版本。

例如,如果您的镜像名称为 <your_username>/<your_image_name>,可以使用以下命令构建新的镜像:

docker build -t <your_username>/<your_image_name>:<new_tag> <path_to_dockerfile>

-t :指定要创建的目标镜像名

<path_to_dockerfile>:Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径.

(2)登录到 Docker Hub 或其他镜像仓库:如果您计划将镜像发布到 Docker Hub 或其他镜像仓库,您需要登录到相应的账户。运行以下命令并按照提示输入您的凭据:

docker login

(3)推送新镜像:一旦您登录成功,您可以使用以下命令将新构建的镜像推送到仓库:

docker push <your_username>/<your_image_name>:<new_tag>

(a)错误:对于vs,推送,如果提示如下错误:

Microsoft.WebTools.Azure.Publish.Docker.DockerCommandException: 运行 docker.exe login 命令失败。

WARNING! Using --password via the CLI is insecure. Use --password-stdin.

可以在配置发布到docker hub的时候不填写密码,只填写账号,但要确保docker desktop是登录状态。

发布成功:



(b)错误:

Microsoft.WebTools.Shared.Exceptions.WebToolsException

防火墙添加docker,即可。

  • 对于镜像用户

    (1)拉取最新镜像:使用以下命令拉取最新版本的镜像:

    docker pull <your_username>/<your_image_name>:<new_tag>

    (2)更新容器:如果使用旧版本的容器,您可以停止、删除旧容器,并使用新的镜像创建一个新容器。

停止和删除容器的命令如下:

docker stop <container_id>
docker rm <container_id>

然后,使用新镜像创建一个新容器:

docker run <your_username>/<your_image_name>:<new_tag> <additional_options>

25.docker网络端口映射



即表示服务器端口号8080映射到容器内部的80端口号,所以通过访问服务器的8080,才能访问到容器内的80端口号,而这种指定,可以

在docker run 中通过-p 8080:80来指定。



表示该容器的80端口映射为外部服务器的8080端口。

26.创建容器时,对容器进行命名

例如:

docker run -d -P --name runoob training/webapp python app.py

-d:后台模式

-P:映射随机端口

--name:指定容器名称,后面跟上容器的名称

training/webapp:是镜像名称

python app.py:是创建好容器后,运行的命令

27.docker网络

在 Docker 中,网络是用于连接容器的一种机制,它使得容器可以相互通信、共享资源和服务。Docker网络允许容器在隔离的环境中建立网络连接,就像它们在同一个局域网中一样。

Docker网络的主要目的是为容器提供网络通信的能力,使得容器可以与其他容器、主机和外部网络进行交互。通过使用Docker网络,可以实现以下功能和好处:

  • 容器之间的通信:使用Docker网络,可以创建一个容器网络,将多个容器连接在同一个网络中。这样,容器可以使用IP地址和端口号相互通信,共享数据和服务。容器可以通过网络进行请求和响应,从而形成分布式应用或服务架构。
  • 容器与主机的通信:Docker网络还允许容器与宿主机进行通信。宿主机可以提供外部服务和资源,容器可以通过网络连接到宿主机上的服务。这使得容器可以访问宿主机的文件系统、硬件设备或其他主机上运行的服务。
  • 容器与外部网络的通信:Docker网络可以将容器连接到外部网络,使得容器可以与互联网或其他外部网络中的服务进行通信。这使得容器可以访问外部资源,如数据库、API服务或其他云服务。
  • 网络隔离和安全性:Docker网络提供了一定程度的隔离和安全性,使得容器之间的通信相对独立和受限。每个容器都有自己的网络命名空间,容器之间的网络通信受到网络配置和安全策略的限制,从而减少了潜在的安全风险。

网络类型:

Docker 提供了多种网络类型,每种类型具有不同的特点和适用场景。下面是对 Docker 的每个网络类型的详细介绍:

桥接网络(Bridge Network):

桥接网络是 Docker 默认创建的网络类型。它将容器连接到宿主机的物理网络接口,并使用桥接设备在容器之间创建虚拟网络。容器可以通过桥接网络进行通信。

桥接网络允许容器通过网络互相发现和连接,但容器与外部网络之间的通信需要进行端口映射。

桥接网络适用于在单个主机上运行独立的容器应用,并希望容器之间可以相互通信。

主机网络(Host Network):

主机网络将容器与宿主机的网络栈共享,容器直接使用宿主机的网络接口和 IP 地址。这意味着容器与宿主机共享同一个网络命名空间,容器可以使用宿主机的 IP 地址进行通信。

主机网络可以提供更高的网络性能,但容器之间的隔离性较差,容器与宿主机共享相同的网络配置和端口空间。

主机网络适用于需要容器与宿主机共享网络栈的场景,如网络性能要求较高或需要容器访问宿主机上的服务。

覆盖网络(Overlay Network):

覆盖网络是一种跨主机的容器网络,允许不同主机上的容器进行通信。它使用覆盖网络驱动程序和 VXLAN(Virtual Extensible LAN)技术来创建一个虚拟网络。

覆盖网络可以跨越多个 Docker 宿主机,容器可以通过虚拟网络进行直接通信,无需进行端口映射。覆盖网络还提供了服务发现和负载均衡等功能。

覆盖网络适用于构建跨主机的容器集群,如容器编排工具(如 Docker Swarm 和 Kubernetes)所需的容器间通信和服务发现。

MACVLAN 网络:

MACVLAN 网络允许容器直接使用宿主机的 MAC 地址,并分配独立的 IP 地址。这使得容器可以直接与网络中的其他设备进行通信,就像它们是网络中的独立物理设备一样。

MACVLAN 网络提供了更高的网络性能和更好的隔离性,但配置相对复杂。它适用于需要容器与物理网络中其他设备直接通信的场景,如网络应用和服务的部署。

docker network create -d bridge test-net

docker network create -d bridge test-net 是用于在 Docker 中创建一个桥接网络的命令。下面是对该命令的详细介绍:

docker network create 是 Docker 命令用于创建网络的语法。

-d bridge 参数指定了网络驱动程序为桥接模式。桥接模式是 Docker 默认的网络驱动程序,用于将容器连接到主机上的物理网络接口,并通过网桥实现容器之间的通信。

test-net 是网络的名称。您可以根据需要指定自己的网络名称。命名网络有助于在多个容器之间建立关联和引用。

docker network create -d bridge test-net 是用于在 Docker 中创建一个桥接网络的命令。下面是对该命令的详细介绍:

docker network create 是 Docker 命令用于创建网络的语法。

-d bridge 参数指定了网络驱动程序为桥接模式。桥接模式是 Docker 默认的网络驱动程序,用于将容器连接到主机上的物理网络接口,并通过网桥实现容器之间的通信。

test-net 是网络的名称。您可以根据需要指定自己的网络名称。命名网络有助于在多个容器之间建立关联和引用。

当您执行 docker network create -d bridge test-net 命令时,Docker 将执行以下操作:

检查当前系统中是否已经存在名为 test-net 的网络。如果不存在,Docker 将创建一个新的桥接网络。

Docker 为该网络分配一个唯一的网络标识符(Network ID)。

Docker 创建一个虚拟的网桥设备,用于连接容器和主机网络接口。

Docker 配置网络的 IP 地址范围和子网掩码,以便容器可以在该网络中分配和使用 IP 地址。

Docker 设置网络的默认网关,以便容器可以与主机和其他网络通信。

Docker 完成网络创建后,您可以使用 test-net 这个名称在容器中指定所使用的网络。

通过创建桥接网络,您可以在 Docker 中创建多个容器,并使用网络名称将它们连接在同一个网络中。这样,容器之间就可以通过网络进行通信,共享数据和服务。

28.ping

Ping 是一种网络工具,用于测试主机之间的连通性和测量网络延迟。它发送一个小的数据包(ICMP Echo Request)到目标主机,并等待目标主机返回一个相应的数据包(ICMP Echo Reply)。

Ping 命令可以在不同的操作系统(如 Windows、Linux、macOS)的命令行界面中使用。下面是 Ping 命令的基本语法和用法示例:

ping [选项] 目标主机

-c count:指定发送的 ICMP 请求次数。

-i interval:指定发送 ICMP 请求的间隔时间(单位为秒)。

-t timeout:指定等待响应的超时时间(单位为秒)。

-s packetsize:指定发送的数据包大小(字节)。

-q:静默模式,仅显示结果摘要。

正在 Ping 43.136.232.100 具有 32 字节的数据:
来自 43.136.232.100 的回复: 字节=32 时间=9ms TTL=55

这是一个典型的 Ping 响应结果。让我们逐个解释每个部分的含义:

"正在 Ping 43.136.232.100 具有 32 字节的数据":表示正在对 IP 地址为 43.136.232.100 的主机执行 Ping 测试,并且每个 ICMP 数据包的大小为 32 字节。

"来自 43.136.232.100 的回复":表示这是从目标主机 43.136.232.100 收到的 Ping 响应。

"字节=32":表示每个 ICMP Echo Request 数据包的大小为 32 字节。

"时间=9ms":表示从发送 ICMP Echo Request 数据包到接收到 ICMP Echo Reply 数据包的时间延迟为 9 毫秒(ms)。这是从源主机到目标主机的往返时间(Round Trip Time,RTT)。

"TTL=55":表示 IP 数据包的生存时间(Time To Live,TTL)值为 55。TTL 是 IP 协议中的一个字段,它表示 IP 数据包在网络中可以经过的最大跃点数。每经过一个路由器,TTL 值会减少,直到达到零,此时数据包将被丢弃。

综上所述,该 Ping 响应表示从您的主机发送 ICMP Echo Request 数据包到目标主机 43.136.232.100,经过了 9 毫秒的往返时间,目标主机正确响应了该请求,并且 TTL 值为 55,表示数据包可以经过至少 55 个网络跃点。

27.配置DNS服务器

我们可以在宿主机的 /etc/docker/daemon.json 文件中增加以下内容来设置全部容器的 DNS:

{
"dns" : [
"114.114.114.114",
"8.8.8.8"
]
}



为什么要配置 DNS 呢?

DNS(Domain Name System)是用于将域名转换为对应 IP 地址的系统。在 Docker 容器中,应用程序通常需要通过域名来访问其他服务或资源。当容器内的应用程序发起 DNS 查询时,它会使用容器的默认 DNS 设置。但有时默认的 DNS 设置可能无法满足特定需求,例如:

访问受限制的域名:某些网络环境可能限制了对特定 DNS 服务器的访问。通过配置自定义 DNS,可以绕过这些限制并访问所需的域名。

性能和可靠性:默认的 DNS 服务器可能不够稳定或响应时间较长。通过配置更快速或可靠的 DNS 服务器,可以提高容器内应用程序的域名解析性能。

自定义内部域名解析:在特定的容器化环境中,可能需要自定义内部域名解析,以便容器能够通过容器名称或服务名称相互访问。

28.docker中设置环境变量

  • 通过dockerfile



    exec进入docker内,查看环境变量,发现已经设置成功。

  • 在运行容器通过命令行设置

docker run -e VARIABLE_NAME=new_value your_image

或者将环境变量的值指定为某个文件中的内容,可以使用 Docker 的 --env-file 参数来实现。

首先,将包含环境变量值的文件准备好,假设文件名为 env_file.txt,内容如下:

VARIABLE_NAME=value_from_file

然后,您可以使用 --env-file 参数来指定这个文件:

docker run --env-file env_file.txt your_image

上述命令将在容器中设置名为 VARIABLE_NAME 的环境变量,并将其值设置为 value_from_file,这个值来自于 env_file.txt 文件。

请确保 env_file.txt 文件存在于您运行命令的当前工作目录中,或者您可以使用绝对路径指定文件的位置。

29.docker容器与宿主文件互拷:

docker从容器里面拷文件到宿主机或从宿主机拷文件到docker容器里面

1、从容器里面拷文件到宿主机?

答:在宿主机里面执行以下命令

docker cp 容器名:要拷贝的文件在容器里面的路径 要拷贝到宿主机的相应路径

示例: 假设容器名为testtomcat,要从容器里面拷贝的文件路为:/usr/local/tomcat/webapps/test/js/test.js, 现在要将test.js从容器里面拷到宿主机的/opt路径下面,那么命令应该怎么写呢?

答案:在宿主机上面执行命令

docker cp testtomcat:/usr/local/tomcat/webapps/test/js/test.js /opt

2、从宿主机拷文件到容器里面

答:在宿主机里面执行如下命令

docker cp 要拷贝的文件路径 容器名:要拷贝到容器里面对应的路径

示例:假设容器名为testtomcat,现在要将宿主机/opt/test.js文件拷贝到容器里面的/usr/local/tomcat/webapps/test/js路径下面,那么命令该怎么写呢?

答案:在宿主机上面执行如下命令

docker cp /opt/test.js testtomcat:/usr/local/tomcat/webapps/test/js

30.docker run -e A='B'

必须用单引号,特别针对特殊字符。

31.ubuntuHTTP端口

要开放HTTP端口80,请在终端中运行以下命令:

sudo ufw allow http

要开放HTTPS端口443,请在终端中运行以下命令:

sudo ufw allow https

如果您的服务器上运行了其他服务,例如SSH或SMTP,则可以使用以下命令查看当前ufw规则:

sudo ufw status

如果您想禁用ufw,请使用以下命令:

sudo ufw disable

如果您想重新启用ufw,请使用以下命令:

sudo ufw enable

32.docker run 传入命令行参数

直接在最后面加上需要加的参数即可。



33.docker 发布提示:找到了多个具有相同相对路径的发布输出文件:

项目文件加

false

linux与docker知识积累的更多相关文章

  1. Linux常用命令知识积累

    基本操作 Linux关机,重启 # 关机 shutdown -h now # 重启 shutdown -r now 查看系统,CPU信息 # 查看系统内核信息 uname -a # 查看系统内核版本 ...

  2. Linux 脚本点滴知识积累

    1.以openwrt中的/etc/hotplug.d/button/00-button为例 . /lib/functions.sh do_button () { local button   ---- ...

  3. 【Python】 零碎知识积累 II

    [Python] 零碎知识积累 II ■ 函数的参数默认值在函数定义时确定并保存在内存中,调用函数时不会在内存中新开辟一块空间然后用参数默认值重新赋值,而是单纯地引用这个参数原来的地址.这就带来了一个 ...

  4. Kali Linux渗透基础知识整理(四):维持访问

    Kali Linux渗透基础知识整理系列文章回顾 维持访问 在获得了目标系统的访问权之后,攻击者需要进一步维持这一访问权限.使用木马程序.后门程序和rootkit来达到这一目的.维持访问是一种艺术形式 ...

  5. Kali Linux渗透基础知识整理(二)漏洞扫描

    Kali Linux渗透基础知识整理系列文章回顾 漏洞扫描 网络流量 Nmap Hping3 Nessus whatweb DirBuster joomscan WPScan 网络流量 网络流量就是网 ...

  6. 使用VS把ASP.NET 5的应用发布到Linux的Docker上

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:我相信未来应用程序的部署模式首选一定会是Docker,所以.NET社区的朋友也不应该忽 ...

  7. WinRT知识积累1之读xml数据

    前述:这个知识是在Windows8.1或WP8.1中运用Linq to xml获取一个xml文件里的数据.(网上也很多类似的知识,可以借鉴参考) 平台:windows8.1 metro 或者WP8.1 ...

  8. Winform开发几个常用的开发经验及知识积累(一)

    本人做Winform开发多年,孜孜不倦,略有小成,其中收集或者自己开发一些常用的东西,基本上在各个项目都能用到的一些开发经验及知识积累,现逐步介绍一些,以飨读者,共同进步. 1.窗口[×]关闭按钮变为 ...

  9. Asp.net MVC知识积累

    一.知识积累 http://yuangang.cnblogs.com/ 跟蓝狐学mvc教程专题目录:http://www.lanhusoft.com/Article/169.html 依赖注入:htt ...

  10. Linux进程管理知识整理

    Linux进程管理知识整理 1.进程有哪些状态?什么是进程的可中断等待状态?进程退出后为什么要等待调度器删除其task_struct结构?进程的退出状态有哪些? TASK_RUNNING(可运行状态) ...

随机推荐

  1. maven - [01] 概述

    Maven -- 项目管理及自动构建工具 001 || maven是什么   Maven 是一个由Apache软件基金会提供的项目管理及自动构建工具,主要用于Java编程.它基于项目对象模型(POM) ...

  2. P4688 [Ynoi Easy Round 2016] 掉进兔子洞

    莫队可以维护种类数 但是无法维护出现次数 考虑离散化以后我们后面腾出了一些空位 那么我们就可以填进那些坑里面 这样做我们就可以用 bitset 直接做与运算 那么 莫队 + bitset 即可

  3. python基础-函数(lambda表达式、函数作参数、内置函数、推导式)和pip

    函数进阶 今日概要: 函数名就是一个变量(扩展) 匿名函数(lambda表达式) 重点内置函数--python内置函数 推导式(一行代码生成数据) 1. 函数名就是变量 def func(): pas ...

  4. 深入理解C++ 空类大小

    在C++中,规定空类(即类中没有任何数据成员.成员函数.虚函数等成员的类)的大小为1字节,这背后主要有以下几方面的原因: 保证对象的唯一性和可区分性 在C++的面向对象编程模型中,对象是类的实例化结果 ...

  5. 【P0】Logisim部件级实验/有限状态机

    课上 过得十分狼狈.经鉴定孩子可能脑子拗 T1 投票决议 组内投票,赞成>反对,则通过:组长拥有一票否决权. 信号名 方向 描述 [1:0] s Input 2'b00 赞成2'b01 反对2' ...

  6. 题解:CF2077B Finding OR Sum

    本文发布于博客园和洛谷,若您在其他平台阅读到此文,请前往博客园获得更好的阅读体验. 跳转链接:https://www.cnblogs.com/TianTianChaoFangDe/p/18771334 ...

  7. 小了 60,500 倍,但更强;AI 的“深度诅咒”

    作者:Ignacio de Gregorio 图片来自 Unsplash 的 Bahnijit Barman 几周前,我们看到 Anthropic 尝试训练 Claude 去通关宝可梦.模型是有点进展 ...

  8. SRAM的读、写操作、信息保持原理

    \(Vcc\)会使得\(T_3\)和\(T_4\)导通,但是哪个先导通是随机的,那么当\(T3\)先导通的时候,\(a\)点变为高电平,此时电流经由 \(a\) 点导通\(T2\),\(T2\)导通, ...

  9. 聊聊智商税:AI知识库

    提供AI咨询+AI项目陪跑服务,有需要回复1 DeepSeek一体机是一种神奇的存在,很多公司跟风购买后发现一个尴尬的事情:用不起来,于是一体机厂家或者中间商便需要在其中叠加AI场景,这里最常见的场景 ...

  10. Python科学计算系列8—矩阵

    1.矩阵构造 代码如下: from sympy import * m1 = Matrix([[1, 2], [2, 0], [3, 4]]) # 构造单位矩阵 m2 = eye(3) # 构造零矩阵 ...