linux与docker知识积累
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 发布提示:找到了多个具有相同相对路径的发布输出文件:
项目文件加