Initial commit

This commit is contained in:
Dichgrem 2024-04-21 14:45:32 +08:00
parent 1b248bc0e0
commit e3a5750250
24 changed files with 2558 additions and 220 deletions

190
content/docker-learn-6.md Normal file
View File

@ -0,0 +1,190 @@
+++
title = "Docker学习笔记(六)"
date = 2024-03-30
[taxonomies]
tags = ["Docker"]
+++
前言 容器映像是可执行包,其中包含运行应用程序所需的所有内容:代码、运行时、系统工具、库和设置。通过构建自定义映像,您可以在任何 Docker 支持的平台上无缝部署应用程序及其所有依赖项。
<!-- more -->
## **Dockerfile**
构建容器镜像的关键组件是 Dockerfile。它本质上是一个脚本其中包含有关如何组装 Docker 映像的说明。Dockerfile 中的每条指令都会在映像中创建一个新图层,从而更轻松地跟踪更改并最小化映像大小。下面是 Dockerfile 的简单示例:
```
# Use an official Python runtime as a parent image
FROM python:3.7-slim
# Set the working directory to /app
WORKDIR /app
# Copy the current directory contents into the container at /app
COPY . /app
# Install any needed packages specified in requirements.txt
RUN pip install --trusted-host pypi.python.org -r requirements.txt
# Make port 80 available to the world outside this container
EXPOSE 80
# Define environment variable
ENV NAME World
# Run app.py when the container launches
CMD ["python", "app.py"]
```
## **Building an Image 构建映像**
创建 Dockerfile 后,可以使用 docker build 命令生成映像。在包含 Dockerfile 的目录中的终端中执行以下命令:
```
docker build -t your-image-name .
```
此命令告诉 Docker 使用当前目录 . 中的 Dockerfile 构建映像,并为其分配名称 -t your-image-name
检查镜像和图层
成功构建后,可以使用 docker image 命令检查创建的映像:
```
docker image ls
```
要仔细查看镜像的各个图层,请使用 docker history 命令:
```
docker history your-image-name
```
要查看镜像的图层,还可以使用 docker inspect 命令:
```
docker inspect your-image-name
```
要删除镜像,请使用 docker image rm 命令:
```
docker image rm your-image-name
```
将映像推送到注册表
构建映像后,可以将其推送到容器注册表(例如 Docker Hub、Google Container Registry 等),以便轻松分发和部署应用程序。首先,使用您的凭据登录注册表:
```
docker login
```
然后,使用注册表 URL 标记映像:
```
docker tag your-image-name username/repository:tag
```
最后,将标记的映像推送到注册表:
```
docker push username/repository:tag
```
构建容器映像是使用 Docker 的一个关键方面,因为它使你能够轻松打包和部署应用程序。通过创建具有精确指令的 Dockerfile您可以毫不费力地在各种平台上构建和分发映像。
Dockerfile
Dockerfile 是一个文本文档,其中包含 Docker 引擎用于构建映像的指令列表。Dockerfile 中的每条指令都会向映像添加一个新层。Docker 将根据这些说明生成映像然后您可以从映像运行容器。Dockerfile 是基础结构即代码的主要元素之一。
## **常见 Dockerfile 说明**
以下是一些常见的 Dockerfile 指令及其用途的列表:
```
FROM 设置基础映像的开始。必须将 FROM 作为 Dockerfile 中的第一条指令。
WORKDIR 设置任何 RUN、CMD、ENTRYPOINT、COPY 或 ADD 指令的工作目录。如果该目录不存在,则会自动创建该目录。
COPY 将文件或目录从主机复制到容器的文件系统中。
ADD 类似于 COPY但也可以处理远程 URL 并自动解压缩存档。
RUN 在镜像中作为新图层执行命令。
CMD 定义从映像运行容器时要执行的默认命令。
ENTRYPOINT 类似于 CMD但它旨在允许容器作为具有自己参数的可执行文件。
EXPOSE 通知 Docker 容器将在运行时侦听指定的网络端口。
ENV 为容器设置环境变量。
# 若要从 Dockerfile 生成映像,请使用 docker build 命令,指定生成上下文(通常为当前目录)和映像的可选标记。
```
```
docker build -t my-image:tag .
```
运行此命令后Docker 将按顺序执行 Dockerfile 中的每条指令,并为每个指令创建一个新层。
## **高效的层缓存**
构建容器镜像时Docker 会缓存新创建的层。然后,这些图层可以在以后构建其他映像时使用,从而减少构建时间并最大限度地减少带宽使用。但是,要充分利用此缓存机制,您应该了解如何有效地使用图层缓存。
Docker 层缓存的工作原理
Docker 为 Dockerfile 中的每条指令(例如 RUN、COPY、ADD 等)创建一个新层。如果指令自上次生成以来未更改,则 Docker 将重用现有层。
例如,请考虑以下 Dockerfile
```
FROM node:14
WORKDIR /app
COPY package.json /app/
RUN npm install
COPY . /app/
CMD ["npm", "start"]
```
首次构建镜像时Docker 将执行每条指令并为每条指令创建一个新层。如果对应用程序进行一些更改并重新生成映像Docker 将检查更改的指令是否影响任何层。如果任何层均不受更改的影响,则 Docker 将重用缓存的层。
- 高效图层缓存的技巧
- 尽量减少 Dockerfile 中的更改:尽量减少 Dockerfile 中更改的频率,并以最常更改的行显示在底部的方式构建指令。
- 生成上下文优化:使用 .dockerignore 文件从生成上下文中排除可能导致缓存失效的不必要文件。
- 使用较小的基础映像:较小的基础映像可减少提取基础映像所需的时间以及需要缓存的图层数.
- 利用 Docker 的 --cache-from 标志:如果使用的是 CI/CD 管道,则可以指定要用作缓存源的镜像。
- 合并多个指令:在某些情况下,合并指令(例如 RUN有助于最大限度地减少层数从而提高缓存效率。
- 通过遵循这些最佳实践,您可以优化层缓存过程并减少 Docker 映像的构建时间,从而提高开发和部署过程的效率。
## **镜像大小和安全性**
生成容器映像时,必须注意映像大小和安全性。映像的大小会影响容器的生成和部署速度。较小的映像可以加快构建速度,并降低下载映像时的网络开销。安全性至关重要,因为容器映像可能包含可能使应用程序面临风险的漏洞。
Reducing Image Size 减小镜像尺寸
使用适当的基础映像:选择更小、更轻量级的基础映像,该基础映像仅包含应用程序所需的组件。例如,请考虑使用官方镜像的 alpine 变体(如果可用),因为它的尺寸通常要小得多。
FROM node:14-alpine
在单个 RUN 语句中运行多个命令:每个 RUN 语句在镜像中创建一个新图层,该图层会影响镜像大小。使用 && 将多个命令合并为一个 RUN 语句,以最小化图层数并减小最终镜像大小。
```
RUN apt-get update && \
apt-get install -y some-required-package
```
删除同一层中不必要的文件:在映像构建过程中安装包或添加文件时,请删除同一层中的临时或未使用的文件,以减小最终映像大小。
```
RUN apt-get update && \
apt-get install -y some-required-package && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
```
使用多阶段构建:使用多阶段构建创建较小的映像。多阶段构建允许您在 Dockerfile 中使用多个 FROM 语句。每个 FROM 语句在构建过程中创建一个新阶段。您可以使用 COPY --from 语句将文件从一个阶段复制到另一个阶段。
```
FROM node:14-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
FROM node:14-alpine
WORKDIR /app
COPY --from=build /app/dist ./dist
COPY package*.json ./
RUN npm install --production
CMD ["npm", "start"]
```
使用 .dockerignore 文件:使用 .dockerignore 文件从生成上下文中排除可能导致缓存失效并增加最终映像大小的不必要文件。
```
node_modules
npm-debug.log
```
## **Enhancing Security 增强安全性**
保持基本映像更新:定期更新您在 Dockerfile 中使用的基本映像,以确保它们包含最新的安全补丁。
- 避免以 root 身份运行容器:运行容器时始终使用非 root 用户,以最大程度地降低潜在风险。在运行应用程序之前创建用户并切换到该用户。
```
RUN addgroup -g 1000 appuser && \
adduser -u 1000 -G appuser -D appuser
USER appuser
```
- 限制 COPY 或 ADD 指令的范围:具体说明要复制到容器映像中的文件或目录。避免使用 COPY . .,因为它可能会无意中包含敏感文件。
```
COPY package*.json ./
COPY src/ src/
```
- 扫描映像中的漏洞:使用 Anchore 或 Clair 等工具扫描映像中的漏洞,并在部署前修复它们。

220
content/docker-learn-7.md Normal file
View File

@ -0,0 +1,220 @@
+++
title = "Docker学习笔记(七)"
date = 2024-03-31
[taxonomies]
tags = ["Docker"]
+++
前言 容器镜像仓库是 Docker 容器镜像的集中存储和分发系统。它允许开发人员以这些映像的形式轻松共享和部署应用程序。容器镜像仓库在容器化应用程序的部署中起着至关重要的作用,因为它们提供了一种快速、可靠且安全的方式来跨各种生产环境分发容器映像。
<!-- more -->
## **Container Registries 容器镜像仓库**
以下是当今可用的常用容器镜像仓库列表:
- Docker HubDocker Hub 是公共 Docker 映像的默认注册表,用作在开发人员之间共享和分发映像的平台。
- Google Container Registry GCRGCR 是 Google Cloud Platform 提供的托管、安全且高度可用的注册表,非常适合托管私有容器镜像。
- Amazon Elastic Container Registry ECRAmazon ECR 是由 Amazon Web Services 提供的完全托管的 Docker 容器镜像仓库,为存储、管理和部署容器映像提供高可扩展性和性能。
- Azure 容器镜像仓库 ACRACR 是 Microsoft Azure 提供的托管注册表,提供异地复制、访问控制以及与其他 Azure 服务的集成。
**DockerHub**
DockerHub 是 Docker Inc. 提供的基于云的注册服务。它是默认的公共容器镜像仓库,您可以在其中存储、管理和分发 Docker 映像。DockerHub 使其他用户可以轻松查找和使用您的映像,或者与 Docker 社区共享他们自己的映像。
**DockerHub的功能**
- 公共和私有存储库:将映像存储在每个人都可以访问的公共存储库中,或者选择仅限您的团队或组织访问的私有存储库。
- 自动构建DockerHub 与 GitHub 和 Bitbucket 等常用代码存储库集成,允许您为 Docker 映像设置自动构建。每当您将代码推送到存储库时DockerHub 都会自动创建一个包含最新更改的新映像。
- WebhookDockerHub 允许您配置 Webhook以便在构建或更新映像时通知其他应用程序或服务。
- 组织和团队:通过创建组织和团队来管理对映像和存储库的访问,使协作变得容易。
- 官方镜像DockerHub 为 MongoDB、Node.js、Redis 等流行软件提供了一组精选的官方镜像。这些映像由 Docker Inc. 和上游软件供应商维护,确保它们是最新且安全的。
要开始使用 DockerHub您需要在他们的网站上创建一个免费帐户。注册后您可以创建存储库、管理组织和团队以及浏览可用映像。
当您准备好共享自己的映像时,可以使用 docker 命令行工具将本地映像推送到 DockerHub
```
docker login
docker tag your-image your-username/your-repository:your-tag
docker push your-username/your-repository:your-tag
```
要从 DockerHub 拉取镜像,可以使用 docker pull 命令:
```
docker pull your-username/your-repository:your-tag
```
DockerHub 对于分发和共享 Docker 映像至关重要,使开发人员能够更轻松地部署应用程序和管理容器基础架构。
## **镜像标记最佳实践**
正确标记 Docker 映像对于高效的容器管理和部署至关重要。在本节中,我们将讨论镜像标记的一些最佳实践。
**使用语义版本控制**
标记镜像时建议遵循语义版本控制指南。语义版本控制是一种广受认可的方法可以帮助更好地维护应用程序。Docker 镜像标签应具有以下结构 <major_version>.<minor_version>.<patch>。示例3.2.1。
**标记最新版本**
除了版本号之外Docker 还允许您将映像标记为“最新”。通常的做法是将映像的最新稳定版本标记为“最新”,以便用户无需指定版本号即可快速访问它。但是,在发布新版本时保持此标记更新非常重要。
```
docker build -t your-username/app-name:latest .
```
**具有描述性和一致性**
选择清晰且描述性的标签名称,以传达镜像的用途或与先前版本相比的更改。您的标签还应该在映像和存储库中保持一致,以便更好地组织和易用。
**包括生成和 Git 信息(可选)**
在某些情况下,在镜像标记中包含有关构建和 Git 提交的信息可能会有所帮助。这有助于识别用于生成映像的源代码和环境。示例app-name-1.2.3-b567-d1234efg。
**使用特定于环境和体系结构的标签**
如果应用程序部署在不同的环境生产、暂存、开发或具有多个体系结构amd64、arm64则可以使用指定这些变体的标记。示例your-username/app-name:1.2.3-production-amd64。
**需要时重新标记镜像**
有时,您可能需要在将映像推送到注册表后重新标记映像。例如,如果您已经为应用程序发布了补丁,则可能需要使用与以前版本相同的标记重新标记新的补丁版本。这样可以更顺畅地更新应用程序,并减少需要应用补丁的用户的手动工作。
**使用自动生成和标记工具**
请考虑使用 CI/CD 工具Jenkins、GitLab CI、Travis-CI根据提交、分支或其他规则自动生成映像和标记。这确保了一致性并减少了人工干预导致错误的可能性。
通过遵循这些映像标记的最佳做法,可以确保 Docker 映像的容器注册表更有条理、更可维护且用户友好。
## **Running Containers 运行容器**
要启动一个新容器,我们使用 docker run 命令,后跟映像名称。基本语法如下:
```
docker run [options] IMAGE [COMMAND] [ARG...]
```
例如,要运行官方的 Nginx 镜像,我们将使用:
```
docker run -d -p 8080:80 nginx
```
这将启动一个新容器,并将主机的端口 8080 映射到容器的端口 80。
**Listing Containers 列出容器**
要列出所有正在运行的容器,请使用 docker ps 命令。要查看所有容器(包括已停止的容器),请使用 -a 标志:
```
docker container ls -a
```
**Accessing Containers 访问容器**
要访问正在运行的容器的 shell请使用 docker exec 命令:
```
docker exec -it CONTAINER_ID bash
```
将 CONTAINER_ID 替换为所需容器的 ID 或名称。您可以在 docker ps 的输出中找到它。
**Stopping Containers 停止容器**
若要停止正在运行的容器,请使用 docker stop 命令,后跟容器 ID 或名称:
```
docker container stop CONTAINER_ID
```
**Removing Containers 移除容器**
容器停止后,我们可以使用 docker rm 命令后跟容器 ID 或名称将其删除:
```
docker container rm CONTAINER_ID
```
若要在容器退出时自动删除容器,请在运行容器时添加 --rm 标志:
```
docker run --rm IMAGE
```
**使用 docker run 运行容器**
在本节中,我们将讨论 docker run 命令,该命令使你能够运行 Docker 容器。docker run 命令从指定映像创建一个新容器并启动它。
docker run 命令的基本语法如下:
```
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS这些是命令行标志可用于调整容器的设置如内存约束、端口、环境变量等。
IMAGE容器将运行的 Docker 映像。这可以是 Docker Hub 中的映像,也可以是存储在本地的您自己的映像。
COMMAND这是容器启动时将在容器内执行的命令。如果未指定则将使用映像的默认入口点。
ARG...:这些是可选参数,可以传递给正在执行的命令。
```
**常用选项**
以下是一些常用的 docker run 选项:
```
--name为容器分配名称使其更易于识别和管理。
-p, --publish将容器的端口发布到主机。当您想要从容器外部访问容器内运行的服务时这很有用。
-e, --env在容器内设置环境变量。您可以多次使用此选项来设置多个变量。
-d, --detach在分离模式下运行容器在后台运行容器并且不在控制台中显示日志。
-v, --volume将卷从主机绑定挂载到容器。这有助于持久保存容器生成的数据或在主机和容器之间共享文件。
```
**下面是一些示例命令,可帮助您了解如何使用 docker run**
```
运行 Ubuntu 容器的交互式会话:
docker run -it --name=my-ubuntu ubuntu
运行 Nginx Web 服务器并在主机上发布端口 80
docker run -d --name=my-nginx -p 80:80 nginx
使用自定义环境变量运行 MySQL 容器以配置数据库:
docker run -d --name=my-mysql -e MYSQL_ROOT_PASSWORD=secret -e MYSQL_DATABASE=mydb -p 3306:3306 mysql
使用绑定挂载卷运行容器:
docker run -d --name=my-data -v /path/on/host:/path/in/container some-image
```
## **Docker Compose**
Docker Compose 是用于定义和运行多容器 Docker 应用程序的工具。它允许您使用名为 docker-compose.yml 的简单 YAML 文件创建、管理和运行应用程序。此文件描述了应用程序的服务、网络和卷,使您只需使用一个命令即可轻松运行和管理容器。
使用 Docker Compose 的一些好处包括:
- 简化的容器管理Docker Compose 允许您在一个地方定义和配置所有服务、网络和卷,使其易于管理和维护。
- 可重现版本:与他人共享您的 docker-compose.yml 文件,以确保他们与您运行相同的环境和服务。
- 版本控制支持:可以对 Docker Compose 文件进行版本控制,以便更轻松地兼容不同版本的 Docker Compose 工具本身。
**创建 Docker Compose 文件:**
若要创建 docker-compose.yml 文件,请首先指定要使用的 Docker Compose 版本,然后指定要定义的服务。下面是基本 docker-compose.yml 文件的示例:
```
version: "3.9"
services:
web:
image: nginx:latest
ports:
- "80:80"
db:
image: mysql:latest
environment:
MYSQL_ROOT_PASSWORD: mysecretpassword
```
在此示例中,我们指定了两个服务:运行最新版本的 nginx 映像的 Web 服务器 web 和运行 MySQL 的数据库服务器 db。Web 服务器将其端口 80 公开给主机,并且数据库服务器为 root 密码设置了环境变量。
**运行 Docker Compose**
要运行 Docker Compose 应用程序,只需导航到包含 docker-compose.yml 文件的目录并运行以下命令:
```
docker-compose up
Docker Compose 将读取文件并按指定顺序启动定义的服务。
```
**其他有用的命令:**
```
docker-compose down停止并删除 docker-compose.yml 文件中定义的所有正在运行的容器、网络和卷。
docker-compose ps列出 docker-compose.yml 文件中定义的所有容器的状态。
docker-compose logs显示 docker-compose.yml 文件中定义的所有容器的日志。
docker-compose build构建 docker-compose.yml 文件中定义的所有映像。
```
## **运行时配置选项**
运行时配置选项允许您在运行 Docker 容器时自定义它们的行为和资源。这些选项有助于管理容器资源、安全性和网络。以下是一些常用运行时配置选项的简要摘要:
**Resource Management 资源管理**
CPU您可以使用 --cpus 和 --cpu-shares 选项限制容器的 CPU 使用率。--cpus 限制容器可以使用的 CPU 内核数,而 --cpu-shares 为容器分配 CPU 时间的相对份额。
```
docker run --cpus=2 --cpu-shares=512 your-image
```
内存:您可以使用 --memory 和 --memory-reservation 选项限制和保留容器的内存。这有助于防止容器消耗过多的系统资源。
```
docker run --memory=1G --memory-reservation=500M your-image
```
**Security 安全**
用户:默认情况下,容器以 root 用户身份运行。为了提高安全性,您可以使用 --user 选项以其他用户或 UID 身份运行容器。
```
docker run --user 1000 your-image
```
只读根文件系统:为防止对容器文件系统进行不必要的更改,可以使用 --read-only 选项将根文件系统挂载为只读。
```
docker run --read-only your-image
```
**Networking 联网**
发布端口:可以使用 --publish或 -p选项将容器的端口发布到主机系统。这允许外部系统访问容器化服务。
```
docker run -p 80:80 your-image
```
主机名和 DNS您可以使用 --hostname 和 --dns 选项自定义容器的主机名和 DNS 设置。
```
docker run --hostname=my-container --dns=8.8.8.8 your-image
```
包含这些运行时配置选项将使你能够有效地管理容器的资源、安全性和网络需求。有关可用运行时配置选项的完整列表,请参阅 Docker 的官方文档。

138
content/docker-learn-8.md Normal file
View File

@ -0,0 +1,138 @@
+++
title = "Docker学习笔记(八)"
date = 2024-04-01
[taxonomies]
tags = ["Docker"]
+++
前言 容器安全是实现和管理容器技术(如 Docker的关键方面。它包含一组实践、工具和技术旨在保护容器化应用程序及其运行的基础结构。在本节中我们将讨论一些关键的容器安全注意事项、最佳做法和建议。
<!-- more -->
## **Container Security 容器安全**
**Container Isolation 容器隔离**
隔离对于确保容器化环境的稳健性和安全性至关重要。容器应彼此隔离并与主机系统隔离,以防止未经授权的访问,并在攻击者设法破坏一个容器时减轻潜在的损害。
- 命名空间Docker 使用命名空间技术为运行容器提供隔离环境。命名空间限制容器在更广泛的系统中可以查看和访问的内容,包括进程和网络资源。
- C组控制组 cgroups 用于限制容器消耗的资源,例如 CPU、内存和 I/O。 正确使用 cgroups 有助于防止 DoS 攻击和资源耗尽情况。
**安全模式和做法**
在容器的开发、部署和操作过程中实施最佳实践和特定安全模式对于维护安全环境至关重要。
- 最小权限:应以尽可能低的权限运行容器,仅授予应用程序所需的最低权限。
- 不可变的基础架构:容器应被视为不可变单元 - 一旦构建,就不应更改它们。任何更改都应通过从更新的映像部署新容器来实现。
- 版本控制:映像应进行版本控制,并存储在安全的容器注册表中。
**安全访问控制**
应将访问控制应用于容器管理和容器数据,以保护敏感信息并维护整体安全态势。
- 容器管理:使用基于角色的访问控制 RBAC 来限制对容器管理平台(例如 Kubernetes的访问并确保用户仅具有所需的最低权限。
- 容器数据:对静态数据和传输中的数据进行加密,尤其是在处理敏感信息时。
**容器漏洞管理**
容器容易受到攻击,因为它们的映像依赖于各种包和库。为了降低这些风险,应将漏洞管理包含在容器生命周期中。
- 镜像扫描:使用自动扫描工具识别容器和镜像中的漏洞。这些工具应集成到开发管道中,以便在潜在风险进入生产环境之前发现它们。
- 安全基础映像:使用最小且安全的基础映像创建容器,从而减少攻击面和潜在漏洞。
- 定期更新:使用最新的安全补丁和更新使基础映像和容器保持最新状态。
## **Image Security 镜像安全**
映像安全是在环境中部署 Docker 容器的一个关键方面。确保您使用的镜像是安全的、最新的且没有漏洞至关重要。在本节中,我们将回顾用于保护和管理 Docker 映像的最佳实践和工具。
**使用受信任的映像源**
从公共存储库中提取映像时,请始终使用受信任的官方映像作为容器化应用程序的起点。官方映像由 Docker 审查,并定期更新安全修复程序。可以在 Docker Hub 或其他受信任的注册表上找到这些映像。
Official Images: https://hub.docker.com/explore/
从其他用户下载镜像或创建自己的镜像时,请务必验证源,并检查 Dockerfile 和其他提供的文件,以确保它们遵循最佳实践并且不会引入漏洞。
**使镜像保持最新状态**
持续监控您的镜像并定期更新它们。这有助于最大程度地减少已知漏洞的风险,因为更新通常包含安全补丁。
您可以使用以下工具扫描和检查映像的更新:
Docker Hubhttps://hub.docker.com/
Anchore: https://anchore.com/
Clair: https://github.com/quay/clair
**使用最少的基础映像**
最小基础映像仅包含运行容器化应用程序所需的基本要素。基础映像中存在的组件越少,潜在漏洞的攻击面就越小。
最小基础映像的一个示例是 Alpine Linux 发行版,由于其占用空间小和安全功能,它通常用于 Docker 映像。
Alpine Linux: https://alpinelinux.org/
Alpine Linuxhttps://alpinelinux.org/
**扫描镜像以查找漏洞**
使用 Clair 或 Anchore 等工具定期扫描镜像以查找已知漏洞。这些工具可以检测映像和容器配置中的潜在风险,从而允许您在将映像推送到注册表或在生产环境中部署映像之前解决这些风险。
**对映像进行签名和验证**
若要确保映像的完整性和真实性,请始终使用 Docker 内容信任 DCT 对映像进行签名。DCT 使用数字签名来保证您拉取或推送的镜像是您期望的镜像,并且在传输过程中未被篡改。
Enable DCT for your Docker environment by setting the following environment variable:
通过设置以下环境变量为 Docker 环境启用 DCT
```
export DOCKER_CONTENT_TRUST=1
```
**利用多阶段构建**
多阶段构建允许您在同一个 Dockerfile 中使用多个 FROM 指令。每个阶段可以具有不同的基础映像或指令集,但只有最终阶段才能确定最终映像的内容。通过使用多阶段构建,您可以最大程度地减少最终映像的大小和复杂性,从而降低漏洞风险。
下面是一个使用多阶段构建的示例 Dockerfile
```
# Build stage
FROM node:12-alpine AS build
WORKDIR /app
COPY . .
RUN npm ci --production
# Final stage
FROM node:12-alpine
COPY --from=build /app /app
CMD ["npm", "start"]
```
通过遵循这些映像安全最佳实践,您可以最大限度地降低漏洞风险,并确保容器化应用程序的安全。
## **Runtime Security 运行时安全性**
运行时安全性侧重于确保 Docker 容器在生产环境中运行时的安全性。这是容器安全的一个关键方面,因为威胁可能会在部署容器后到达或被发现。适当的运行时安全措施有助于最大程度地减少漏洞被利用时可能造成的损害。
**最小特权原则**
确保您的容器遵循最小权限原则,这意味着它们应该只具有执行其预期功能所需的最低权限。这有助于限制容器受损时的潜在损坏。
**尽可能以非 root 用户身份运行容器**
避免运行特权容器,因为这些容器可以访问主机的所有资源。
使用 Linux 功能从容器中剥离不必要的权限。
**只读文件系统**
通过将容器的文件系统设置为只读,可以防止攻击者修改关键文件或在容器中植入恶意软件。
在启动容器时使用 --read-only 标志,使其文件系统为只读。
为需要写入访问权限的位置实施卷装载或 tmpfs 装载。
**安全扫描和监控**
确保定期扫描容器中的漏洞,包括映像本身和运行时环境中的漏洞。
**使用容器扫描工具检测和修补映像中的漏洞。**
实施运行时监视以检测和响应安全事件,例如未经授权的访问尝试或意外的进程启动。
**Resource Isolation 资源隔离**
隔离容器的资源(如 CPU、内存和网络以防止单个受感染的容器影响其他容器或主机系统。
使用 Docker 的内置资源约束来限制容器可以使用的资源。
使用网络分段和防火墙来隔离容器并限制其通信。
**Audit Logs 审核日志**
维护容器活动的审核日志,以帮助进行事件响应、故障排除和合规性。
使用 Docker 的日志记录功能捕获容器日志,并将其输出到集中式日志记录解决方案。
实施日志分析工具以监控可疑活动,并在检测到潜在事件时自动发出警报。

216
content/docker-learn-9.md Normal file
View File

@ -0,0 +1,216 @@
+++
title = "Docker学习笔记(九)"
date = 2024-04-02
[taxonomies]
tags = ["Docker"]
+++
前言 Docker CLI命令行界面是一个强大的工具允许您与 Docker 容器、映像、卷和网络进行交互和管理。它为用户提供了广泛的命令,用于在开发和生产工作流中创建、运行和管理 Docker 容器和其他 Docker 资源。
<!-- more -->
在本主题中,我们将深入探讨 Docker CLI 的一些关键方面,包括以下内容:
**1. 安装**
要开始使用 Docker CLI您需要在计算机上安装 Docker。您可以按照 Docker 文档中相应操作系统的官方安装指南进行操作。
**2. 基本命令**
以下是一些需要熟悉的基本 Docker CLI 命令:
```
docker run从 Docker 镜像创建并启动容器
docker container列出正在运行的容器
docker image列出系统上所有可用的镜像
docker pull从 Docker Hub 或其他注册表拉取映像
docker push将映像推送到 Docker Hub 或其他注册表
docker build从 Dockerfile 构建映像
docker exec在正在运行的容器中运行命令
docker logs显示容器的日志
```
**3. Docker 运行选项**
docker run 是 Docker CLI 中最重要的命令之一。您可以使用各种选项自定义容器的行为,例如:
```
-d, --detach在后台运行容器
-e, --env为容器设置环境变量
-v, --volume绑定挂载卷
-p, --publish将容器的端口发布到主机
--name为容器分配名称
--restart指定容器的重启策略
--rm容器退出时自动移除容器
```
**4. Dockerfile**
Dockerfile 是一个脚本,其中包含用于构建 Docker 映像的指令。您可以使用 Docker CLI 通过 Dockerfile 构建、更新和管理 Docker 映像。
下面是 Dockerfile 的简单示例:
```
# Set the base image to use
FROM alpine:3.7
# Update the system and install packages
RUN apk update && apk add curl
# Set the working directory
WORKDIR /app
# Copy the application file
COPY app.sh .
# Set the entry point
ENTRYPOINT ["./app.sh"]
```
若要生成映像,请使用以下命令:
```
docker build -t my-image .
```
**5. Docker Compose**
Docker Compose 是一个 CLI 工具,用于使用 YAML 文件定义和管理多容器 Docker 应用程序。它与 Docker CLI 协同工作,提供一种一致的方式来管理多个容器及其依赖项。
使用官方安装指南安装 Docker Compose然后您可以创建一个 docker-compose.yml 文件来定义和运行多容器应用程序:
```
version: '3'
services:
web:
image: webapp-image
ports:
- "80:80"
database:
image: mysql
environment:
- MYSQL_ROOT_PASSWORD=my-secret-pw
```
使用以下命令运行应用程序:
```
docker-compose up
```
## **Docker Images Docker 镜像**
Docker 映像是轻量级、独立且可执行的包,其中包含运行应用程序所需的一切。这些映像包含所有必要的依赖项、库、运行时、系统工具和代码,使应用程序能够在不同的环境中一致地运行。
Docker 映像是使用 Dockerfile 构建和管理的。Dockerfile 是一个脚本,其中包含用于创建 Docker 映像的指令,提供设置应用程序环境的分步指南。
**使用 Docker 映像**
Docker CLI 提供了多个命令来管理和处理 Docker 映像。一些基本命令包括:
```
docker image ls: List all available images on your local system.
docker image ls列出本地系统上所有可用的镜像。
docker build: Build an image from a Dockerfile.
docker build从 Dockerfile 构建映像。
docker image rm: Remove one or more images.
docker image rm删除一个或多个镜像。
docker pull: Pull an image from a registry (e.g., Docker Hub) to your local system.
docker pull将映像从注册表例如 Docker Hub拉取到本地系统。
docker push: Push an image to a repository.
docker push将镜像推送到存储库。
```
例如,要从 Docker Hub 拉取官方 Ubuntu 映像,可以运行以下命令:
```
docker pull ubuntu:latest
```
拉取映像后,可以使用该映像和 docker run 命令创建并运行容器:
```
docker run -it ubuntu:latest /bin/bash
```
此命令创建一个新容器,并使用 /bin/bash shell 在容器内启动交互式会话。
**Sharing Images 共享镜像**
可以使用容器注册表(如 Docker Hub、Google Container Registry 或 Amazon Elastic Container Registry ECR共享和分发 Docker 映像。将映像推送到注册表后,其他人可以轻松访问和使用它们。
要共享您的镜像,您首先需要使用正确的命名格式对其进行标记:
```
docker tag <image-id> <username>/<repository>:<tag>
```
然后,您可以使用以下命令将标记的映像推送到注册表:
```
docker push <username>/<repository>:<tag>
```
**Containers 容器**
容器可以被认为是轻量级、独立和可执行的软件包,其中包括运行软件所需的一切,包括代码、运行时、库、环境变量和配置文件。容器将软件与其周围环境隔离开来,确保它在不同的环境中统一工作。
**为什么要使用容器?**
- 可移植性:容器确保应用程序在不同平台上一致地工作,无论是开发人员的笔记本电脑还是生产服务器。这消除了“它在我的机器上工作”的问题。
- 效率:容器是轻量级的,因为它们使用共享资源,而没有成熟操作系统的开销。这样可以缩短启动时间并减少资源使用。
- 可扩展性:容器可以根据工作负载轻松扩展或缩减,使其成为分布式应用程序和微服务的理想选择。
- 一致性容器使开发人员、QA 和运营团队能够在整个应用程序生命周期中拥有一致的环境,从而实现更快、更顺畅的部署管道。
- 安全性:容器提供与其他容器和底层主机系统的隔离级别,这有助于维护应用程序安全性。
**使用 Docker CLI 处理容器**
Docker CLI 提供了多个命令来帮助你创建、管理容器并与之交互。一些常用命令包括:
```
docker run用于创建和启动新容器。
docker container ls列出正在运行的容器。
docker container stop停止正在运行的容器。
docker container rm删除已停止的容器。
docker exec在正在运行的容器内执行命令。
docker logs获取容器的日志可用于调试问题。
```
## **Docker Volumes**
Docker 卷是一种用于保存 Docker 容器生成和使用的数据的机制。它们允许您将数据与容器本身分开,从而轻松备份、迁移和管理持久性数据。
**为什么卷很重要**
Docker 容器本质上是短暂的,这意味着它们可以很容易地停止、删除或替换。虽然这对于应用程序开发和部署非常有用,但在处理持久性数据时会带来挑战。这就是销量的来源。它们提供了一种独立于容器生命周期存储和管理数据的方法。
**Types of Volumes 卷的类型**
Docker 中有三种类型的卷:
- 主机卷 Host Volumes它们存储在主机的文件系统中通常位于 /var/lib/docker/volumes 目录中。这些可以很容易地访问,但可能会带来可移植性或文件系统兼容性的问题。
- 匿名卷 Anonymous Volumes这些卷是在运行容器时自动创建的无需指定卷。它们的 ID 由 Docker 生成,也存储在主机的文件系统中。
- 命名卷 Named Volumes与匿名卷类似命名卷存储在主机的文件系统中。但是您可以提供自定义名称以便于在其他容器或备份中引用。
**使用 Docker CLI 进行卷管理**
Docker CLI 提供了各种命令来管理卷:
```
docker volume create创建具有给定名称的新卷。
docker volume ls列出系统上的所有卷。
docker volume inspect提供有关特定卷的详细信息。
docker volume rm删除卷。
docker volume prune删除所有未使用的卷。
```
若要在容器中使用卷,可以在 docker run 命令中使用 -v 或 --volume 标志。例如:
```
docker run -d --name my-container -v my-named-volume:/var/lib/data my-image
```
此命令使用“my-image”映像创建名为“my-container”的新容器并将“my-named-volume”卷挂载到容器内的 /var/lib/data 路径处。
## **Docker Networks Docker 网络**
Docker 网络提供了管理容器通信的基本方法。它允许容器使用各种网络驱动程序相互通信以及与主机通信。通过了解和利用不同类型的网络驱动程序,可以设计容器网络以适应特定方案或应用程序要求。
**Network Drivers 网络驱动程序**
Docker 中提供了多个网络驱动程序。在这里,我们将介绍四种最常见的:
- bridge容器的默认网络驱动程序。它创建一个专用网络容器可以在其中相互通信并与主机通信。此网络上的容器可以通过主机的网络访问外部资源。
- host此驱动程序删除网络隔离并允许容器共享主机的网络。它适用于网络性能至关重要的情况因为它可以最大程度地减少容器网络的开销。
- none此网络驱动程序禁用容器网络。使用此驱动程序的容器在隔离环境中运行无需任何网络访问。
- overlay此网络驱动程序使部署在不同主机上的容器能够相互通信。它旨在与 Docker Swarm 配合使用,非常适合多主机或基于集群的容器部署。
**管理 Docker 网络**
Docker CLI 提供了各种命令来管理网络。以下是一些有用的命令:
```
列出所有网络docker network ls
检查网络docker network inspect <network_name>
创建新网络docker network create --driver <driver_type> <network_name>
将容器连接到网络docker network connect <network_name> <container_name>
断开容器与网络的连接docker network disconnect <network_name> <container_name>
移除网络docker network rm <network_name>
```

View File

@ -199,7 +199,7 @@ Archlinux`sudo pacman -S git`
git目前默认的主分支为 master和 github 默认分支 main 不同,这使得默认配置下 git 往往连接失败。可以通过下两种方法改变默认分支。在本地 git init 时将默认分支修改成main git目前默认的主分支为 master和 github 默认分支 main 不同,这使得默认配置下 git 往往连接失败。可以通过下两种方法改变默认分支。在本地 git init 时将默认分支修改成main
```csharp ```
1. git --version //查看版本 1. git --version //查看版本
2. git config --global init.defaultBranch main //将默认分支修改成main 2. git config --global init.defaultBranch main //将默认分支修改成main
3. git init //本地项目文件夹内创建.git文件夹 3. git init //本地项目文件夹内创建.git文件夹

View File

@ -81,6 +81,46 @@
<ul><li class="post-list"> <ul><li class="post-list">
<a href="https://blog.dich.ink/docker-learn-9/">
<span class="post-date">2024-04-02</span>
:: <span class="post-list-title">Docker学习笔记(九)</span></a>
<span class="post-tags-inline">
::
<a class="post-tag" href="https://blog.dich.ink/tags/docker/">#Docker</a></span>
</li>
<li class="post-list">
<a href="https://blog.dich.ink/docker-learn-8/">
<span class="post-date">2024-04-01</span>
:: <span class="post-list-title">Docker学习笔记(八)</span></a>
<span class="post-tags-inline">
::
<a class="post-tag" href="https://blog.dich.ink/tags/docker/">#Docker</a></span>
</li>
<li class="post-list">
<a href="https://blog.dich.ink/docker-learn-7/">
<span class="post-date">2024-03-31</span>
:: <span class="post-list-title">Docker学习笔记(七)</span></a>
<span class="post-tags-inline">
::
<a class="post-tag" href="https://blog.dich.ink/tags/docker/">#Docker</a></span>
</li>
<li class="post-list">
<a href="https://blog.dich.ink/docker-learn-6/">
<span class="post-date">2024-03-30</span>
:: <span class="post-list-title">Docker学习笔记(六)</span></a>
<span class="post-tags-inline">
::
<a class="post-tag" href="https://blog.dich.ink/tags/docker/">#Docker</a></span>
</li>
<li class="post-list">
<a href="https://blog.dich.ink/docker-learn-5/"> <a href="https://blog.dich.ink/docker-learn-5/">
<span class="post-date">2024-03-29</span> <span class="post-date">2024-03-29</span>
:: <span class="post-list-title">Docker学习笔记(五)</span></a> :: <span class="post-list-title">Docker学习笔记(五)</span></a>

View File

@ -5,8 +5,88 @@
<link rel="self" type="application/atom+xml" href="https://blog.dich.ink/atom.xml"/> <link rel="self" type="application/atom+xml" href="https://blog.dich.ink/atom.xml"/>
<link rel="alternate" type="text/html" href="https://blog.dich.ink"/> <link rel="alternate" type="text/html" href="https://blog.dich.ink"/>
<generator uri="https://www.getzola.org/">Zola</generator> <generator uri="https://www.getzola.org/">Zola</generator>
<updated>2024-03-29T00:00:00+00:00</updated> <updated>2024-04-02T00:00:00+00:00</updated>
<id>https://blog.dich.ink/atom.xml</id> <id>https://blog.dich.ink/atom.xml</id>
<entry xml:lang="en">
<title>Docker学习笔记(九)</title>
<published>2024-04-02T00:00:00+00:00</published>
<updated>2024-04-02T00:00:00+00:00</updated>
<author>
<name>
Unknown
</name>
</author>
<link rel="alternate" type="text/html" href="https://blog.dich.ink/docker-learn-9/"/>
<id>https://blog.dich.ink/docker-learn-9/</id>
<summary type="html">&lt;p&gt;前言 Docker CLI命令行界面是一个强大的工具允许您与 Docker 容器、映像、卷和网络进行交互和管理。它为用户提供了广泛的命令,用于在开发和生产工作流中创建、运行和管理 Docker 容器和其他 Docker 资源。&lt;&#x2F;p&gt;
</summary>
</entry>
<entry xml:lang="en">
<title>Docker学习笔记(八)</title>
<published>2024-04-01T00:00:00+00:00</published>
<updated>2024-04-01T00:00:00+00:00</updated>
<author>
<name>
Unknown
</name>
</author>
<link rel="alternate" type="text/html" href="https://blog.dich.ink/docker-learn-8/"/>
<id>https://blog.dich.ink/docker-learn-8/</id>
<summary type="html">&lt;p&gt;前言 容器安全是实现和管理容器技术(如 Docker的关键方面。它包含一组实践、工具和技术旨在保护容器化应用程序及其运行的基础结构。在本节中我们将讨论一些关键的容器安全注意事项、最佳做法和建议。&lt;&#x2F;p&gt;
</summary>
</entry>
<entry xml:lang="en">
<title>Docker学习笔记(七)</title>
<published>2024-03-31T00:00:00+00:00</published>
<updated>2024-03-31T00:00:00+00:00</updated>
<author>
<name>
Unknown
</name>
</author>
<link rel="alternate" type="text/html" href="https://blog.dich.ink/docker-learn-7/"/>
<id>https://blog.dich.ink/docker-learn-7/</id>
<summary type="html">&lt;p&gt;前言 容器镜像仓库是 Docker 容器镜像的集中存储和分发系统。它允许开发人员以这些映像的形式轻松共享和部署应用程序。容器镜像仓库在容器化应用程序的部署中起着至关重要的作用,因为它们提供了一种快速、可靠且安全的方式来跨各种生产环境分发容器映像。&lt;&#x2F;p&gt;
</summary>
</entry>
<entry xml:lang="en">
<title>Docker学习笔记(六)</title>
<published>2024-03-30T00:00:00+00:00</published>
<updated>2024-03-30T00:00:00+00:00</updated>
<author>
<name>
Unknown
</name>
</author>
<link rel="alternate" type="text/html" href="https://blog.dich.ink/docker-learn-6/"/>
<id>https://blog.dich.ink/docker-learn-6/</id>
<summary type="html">&lt;p&gt;前言 容器映像是可执行包,其中包含运行应用程序所需的所有内容:代码、运行时、系统工具、库和设置。通过构建自定义映像,您可以在任何 Docker 支持的平台上无缝部署应用程序及其所有依赖项。&lt;&#x2F;p&gt;
</summary>
</entry>
<entry xml:lang="en"> <entry xml:lang="en">
<title>Docker学习笔记(五)</title> <title>Docker学习笔记(五)</title>
<published>2024-03-29T00:00:00+00:00</published> <published>2024-03-29T00:00:00+00:00</published>

View File

@ -193,6 +193,13 @@ Docker 映像中提供了许多命令行实用程序,包括但不限于:</p>
</a> </a>
</span> </span>
<span class="button next">
<a href="https://blog.dich.ink/docker-learn-6/">
<span class="button__text">Docker学习笔记(六)</span>&nbsp;
<span class="button__icon"></span>
</a>
</span>
</div> </div>
</div> </div>

View File

@ -0,0 +1,296 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Dich&#x27;blog</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=5">
<meta name="robots" content="noodp"/>
<link rel="stylesheet" href="https://blog.dich.ink/style.css">
<link rel="stylesheet" href="https://blog.dich.ink/color/blue.css">
<link rel="stylesheet" href="https://blog.dich.ink/color/background_dark.css">
<link rel="stylesheet" href="https://blog.dich.ink/font-hack-subset.css">
<meta name="description" content="">
<meta property="og:description" content="">
<meta property="og:title" content="Dich'blog">
<meta property="og:type" content="article">
<meta property="og:url" content="https://blog.dich.ink/docker-learn-6/">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:description" content="">
<meta name="twitter:title" content="Dich'blog">
<meta property="twitter:domain" content="blog.dich.ink">
<meta property="twitter:url" content="https://blog.dich.ink/docker-learn-6/">
<link rel="alternate" type="application/atom+xml" title="RSS" href="https://blog.dich.ink/atom.xml">
</head>
<body class="">
<div class="container">
<header class="header">
<div class="header__inner">
<div class="header__logo">
<a href="https://blog.dich.ink" style="text-decoration: none;">
<div class="logo">
Dich&#x27;blog
</div>
</a>
</div>
</div>
<nav class="menu">
<ul class="menu__inner">
<li class="active"><a href="https://blog.dich.ink">blog</a></li>
<li><a href="https://blog.dich.ink/tags">tags</a></li>
<li><a href="https://blog.dich.ink/archive">archive</a></li>
<li><a href="https://blog.dich.ink/about">about me</a></li>
<li><a href="https://blog.dich.ink/links">links</a></li>
<li><a href="https://github.com/Dichgrem" target="_blank" rel="noopener noreferrer">github</a></li>
</ul>
</nav>
</header>
<div class="content">
<div class="post">
<h1 class="post-title"><a href="https://blog.dich.ink/docker-learn-6/">Docker学习笔记(六)</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2024-03-30
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/docker/">#Docker</a></span>
<div class="post-content">
<p>前言 容器映像是可执行包,其中包含运行应用程序所需的所有内容:代码、运行时、系统工具、库和设置。通过构建自定义映像,您可以在任何 Docker 支持的平台上无缝部署应用程序及其所有依赖项。</p>
<span id="continue-reading"></span><h2 id="dockerfile"><strong>Dockerfile</strong></h2>
<p>构建容器镜像的关键组件是 Dockerfile。它本质上是一个脚本其中包含有关如何组装 Docker 映像的说明。Dockerfile 中的每条指令都会在映像中创建一个新图层,从而更轻松地跟踪更改并最小化映像大小。下面是 Dockerfile 的简单示例:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span># Use an official Python runtime as a parent image
</span><span>FROM python:3.7-slim
</span><span>
</span><span># Set the working directory to /app
</span><span>WORKDIR /app
</span><span>
</span><span># Copy the current directory contents into the container at /app
</span><span>COPY . /app
</span><span>
</span><span># Install any needed packages specified in requirements.txt
</span><span>RUN pip install --trusted-host pypi.python.org -r requirements.txt
</span><span>
</span><span># Make port 80 available to the world outside this container
</span><span>EXPOSE 80
</span><span>
</span><span># Define environment variable
</span><span>ENV NAME World
</span><span>
</span><span># Run app.py when the container launches
</span><span>CMD [&quot;python&quot;, &quot;app.py&quot;]
</span></code></pre>
<h2 id="building-an-image-gou-jian-ying-xiang"><strong>Building an Image 构建映像</strong></h2>
<p>创建 Dockerfile 后,可以使用 docker build 命令生成映像。在包含 Dockerfile 的目录中的终端中执行以下命令:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker build -t your-image-name .
</span></code></pre>
<p>此命令告诉 Docker 使用当前目录 . 中的 Dockerfile 构建映像,并为其分配名称 -t your-image-name</p>
<p>检查镜像和图层
成功构建后,可以使用 docker image 命令检查创建的映像:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker image ls
</span></code></pre>
<p>要仔细查看镜像的各个图层,请使用 docker history 命令:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker history your-image-name
</span></code></pre>
<p>要查看镜像的图层,还可以使用 docker inspect 命令:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker inspect your-image-name
</span></code></pre>
<p>要删除镜像,请使用 docker image rm 命令:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker image rm your-image-name
</span></code></pre>
<p>将映像推送到注册表
构建映像后,可以将其推送到容器注册表(例如 Docker Hub、Google Container Registry 等),以便轻松分发和部署应用程序。首先,使用您的凭据登录注册表:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker login
</span></code></pre>
<p>然后,使用注册表 URL 标记映像:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker tag your-image-name username/repository:tag
</span></code></pre>
<p>最后,将标记的映像推送到注册表:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker push username/repository:tag
</span></code></pre>
<p>构建容器映像是使用 Docker 的一个关键方面,因为它使你能够轻松打包和部署应用程序。通过创建具有精确指令的 Dockerfile您可以毫不费力地在各种平台上构建和分发映像。</p>
<p>Dockerfile
Dockerfile 是一个文本文档,其中包含 Docker 引擎用于构建映像的指令列表。Dockerfile 中的每条指令都会向映像添加一个新层。Docker 将根据这些说明生成映像然后您可以从映像运行容器。Dockerfile 是基础结构即代码的主要元素之一。</p>
<h2 id="chang-jian-dockerfile-shuo-ming"><strong>常见 Dockerfile 说明</strong></h2>
<p>以下是一些常见的 Dockerfile 指令及其用途的列表:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>FROM 设置基础映像的开始。必须将 FROM 作为 Dockerfile 中的第一条指令。
</span><span>WORKDIR 设置任何 RUN、CMD、ENTRYPOINT、COPY 或 ADD 指令的工作目录。如果该目录不存在,则会自动创建该目录。
</span><span>COPY 将文件或目录从主机复制到容器的文件系统中。
</span><span>ADD 类似于 COPY但也可以处理远程 URL 并自动解压缩存档。
</span><span>RUN 在镜像中作为新图层执行命令。
</span><span>CMD 定义从映像运行容器时要执行的默认命令。
</span><span>ENTRYPOINT 类似于 CMD但它旨在允许容器作为具有自己参数的可执行文件。
</span><span>EXPOSE 通知 Docker 容器将在运行时侦听指定的网络端口。
</span><span>ENV 为容器设置环境变量。
</span><span>
</span><span># 若要从 Dockerfile 生成映像,请使用 docker build 命令,指定生成上下文(通常为当前目录)和映像的可选标记。
</span></code></pre>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker build -t my-image:tag .
</span></code></pre>
<p>运行此命令后Docker 将按顺序执行 Dockerfile 中的每条指令,并为每个指令创建一个新层。</p>
<h2 id="gao-xiao-de-ceng-huan-cun"><strong>高效的层缓存</strong></h2>
<p>构建容器镜像时Docker 会缓存新创建的层。然后,这些图层可以在以后构建其他映像时使用,从而减少构建时间并最大限度地减少带宽使用。但是,要充分利用此缓存机制,您应该了解如何有效地使用图层缓存。</p>
<p>Docker 层缓存的工作原理
Docker 为 Dockerfile 中的每条指令(例如 RUN、COPY、ADD 等)创建一个新层。如果指令自上次生成以来未更改,则 Docker 将重用现有层。</p>
<p>例如,请考虑以下 Dockerfile</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>FROM node:14
</span><span>
</span><span>WORKDIR /app
</span><span>
</span><span>COPY package.json /app/
</span><span>RUN npm install
</span><span>
</span><span>COPY . /app/
</span><span>
</span><span>CMD [&quot;npm&quot;, &quot;start&quot;]
</span></code></pre>
<p>首次构建镜像时Docker 将执行每条指令并为每条指令创建一个新层。如果对应用程序进行一些更改并重新生成映像Docker 将检查更改的指令是否影响任何层。如果任何层均不受更改的影响,则 Docker 将重用缓存的层。</p>
<ul>
<li>高效图层缓存的技巧</li>
<li>尽量减少 Dockerfile 中的更改:尽量减少 Dockerfile 中更改的频率,并以最常更改的行显示在底部的方式构建指令。</li>
<li>生成上下文优化:使用 .dockerignore 文件从生成上下文中排除可能导致缓存失效的不必要文件。</li>
<li>使用较小的基础映像:较小的基础映像可减少提取基础映像所需的时间以及需要缓存的图层数.</li>
<li>利用 Docker 的 --cache-from 标志:如果使用的是 CI/CD 管道,则可以指定要用作缓存源的镜像。</li>
<li>合并多个指令:在某些情况下,合并指令(例如 RUN有助于最大限度地减少层数从而提高缓存效率。</li>
<li>通过遵循这些最佳实践,您可以优化层缓存过程并减少 Docker 映像的构建时间,从而提高开发和部署过程的效率。</li>
</ul>
<h2 id="jing-xiang-da-xiao-he-an-quan-xing"><strong>镜像大小和安全性</strong></h2>
<p>生成容器映像时,必须注意映像大小和安全性。映像的大小会影响容器的生成和部署速度。较小的映像可以加快构建速度,并降低下载映像时的网络开销。安全性至关重要,因为容器映像可能包含可能使应用程序面临风险的漏洞。</p>
<p>Reducing Image Size 减小镜像尺寸
使用适当的基础映像:选择更小、更轻量级的基础映像,该基础映像仅包含应用程序所需的组件。例如,请考虑使用官方镜像的 alpine 变体(如果可用),因为它的尺寸通常要小得多。</p>
<p>FROM node:14-alpine
在单个 RUN 语句中运行多个命令:每个 RUN 语句在镜像中创建一个新图层,该图层会影响镜像大小。使用 &amp;&amp; 将多个命令合并为一个 RUN 语句,以最小化图层数并减小最终镜像大小。</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>RUN apt-get update &amp;&amp; \
</span><span> apt-get install -y some-required-package
</span></code></pre>
<p>删除同一层中不必要的文件:在映像构建过程中安装包或添加文件时,请删除同一层中的临时或未使用的文件,以减小最终映像大小。</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>RUN apt-get update &amp;&amp; \
</span><span> apt-get install -y some-required-package &amp;&amp; \
</span><span> apt-get clean &amp;&amp; \
</span><span> rm -rf /var/lib/apt/lists/*
</span></code></pre>
<p>使用多阶段构建:使用多阶段构建创建较小的映像。多阶段构建允许您在 Dockerfile 中使用多个 FROM 语句。每个 FROM 语句在构建过程中创建一个新阶段。您可以使用 COPY --from 语句将文件从一个阶段复制到另一个阶段。</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>FROM node:14-alpine AS build
</span><span>WORKDIR /app
</span><span>COPY package*.json ./
</span><span>RUN npm install
</span><span>COPY . .
</span><span>RUN npm run build
</span><span>
</span><span>FROM node:14-alpine
</span><span>WORKDIR /app
</span><span>COPY --from=build /app/dist ./dist
</span><span>COPY package*.json ./
</span><span>RUN npm install --production
</span><span>CMD [&quot;npm&quot;, &quot;start&quot;]
</span></code></pre>
<p>使用 .dockerignore 文件:使用 .dockerignore 文件从生成上下文中排除可能导致缓存失效并增加最终映像大小的不必要文件。</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>node_modules
</span><span>npm-debug.log
</span></code></pre>
<h2 id="enhancing-security-zeng-qiang-an-quan-xing"><strong>Enhancing Security 增强安全性</strong></h2>
<p>保持基本映像更新:定期更新您在 Dockerfile 中使用的基本映像,以确保它们包含最新的安全补丁。</p>
<ul>
<li>避免以 root 身份运行容器:运行容器时始终使用非 root 用户,以最大程度地降低潜在风险。在运行应用程序之前创建用户并切换到该用户。</li>
</ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>RUN addgroup -g 1000 appuser &amp;&amp; \
</span><span> adduser -u 1000 -G appuser -D appuser
</span><span>USER appuser
</span></code></pre>
<ul>
<li>限制 COPY 或 ADD 指令的范围:具体说明要复制到容器映像中的文件或目录。避免使用 COPY . .,因为它可能会无意中包含敏感文件。</li>
</ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>COPY package*.json ./
</span><span>COPY src/ src/
</span></code></pre>
<ul>
<li>扫描映像中的漏洞:使用 Anchore 或 Clair 等工具扫描映像中的漏洞,并在部署前修复它们。</li>
</ul>
</div>
<div class="pagination">
<div class="pagination__title">
<span class="pagination__title-h">Thanks for reading! Read other posts?</span>
<hr />
</div>
<div class="pagination__buttons">
<span class="button previous">
<a href="https://blog.dich.ink/docker-learn-5/">
<span class="button__icon"></span>&nbsp;
<span class="button__text">Docker学习笔记(五)</span>
</a>
</span>
<span class="button next">
<a href="https://blog.dich.ink/docker-learn-7/">
<span class="button__text">Docker学习笔记(七)</span>&nbsp;
<span class="button__icon"></span>
</a>
</span>
</div>
</div>
</div>
</div>
<footer class="footer">
<div class="footer__inner">
<div class="copyright">
<span>©
2024
Dichgrem</span>
<span class="copyright-theme">
<span class="copyright-theme-sep">:: </span>
Theme: <a href="https://github.com/pawroman/zola-theme-terminimal/">Terminimal</a> by pawroman
</span>
</div>
</div>
</footer>
<script async defer src="http://173.249.208.93:12345/tracker.js" data-website-id="cluckwxwg0005qf4n55m737sz"></script>
</div>
</body>
</html>

View File

@ -0,0 +1,306 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Dich&#x27;blog</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=5">
<meta name="robots" content="noodp"/>
<link rel="stylesheet" href="https://blog.dich.ink/style.css">
<link rel="stylesheet" href="https://blog.dich.ink/color/blue.css">
<link rel="stylesheet" href="https://blog.dich.ink/color/background_dark.css">
<link rel="stylesheet" href="https://blog.dich.ink/font-hack-subset.css">
<meta name="description" content="">
<meta property="og:description" content="">
<meta property="og:title" content="Dich'blog">
<meta property="og:type" content="article">
<meta property="og:url" content="https://blog.dich.ink/docker-learn-7/">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:description" content="">
<meta name="twitter:title" content="Dich'blog">
<meta property="twitter:domain" content="blog.dich.ink">
<meta property="twitter:url" content="https://blog.dich.ink/docker-learn-7/">
<link rel="alternate" type="application/atom+xml" title="RSS" href="https://blog.dich.ink/atom.xml">
</head>
<body class="">
<div class="container">
<header class="header">
<div class="header__inner">
<div class="header__logo">
<a href="https://blog.dich.ink" style="text-decoration: none;">
<div class="logo">
Dich&#x27;blog
</div>
</a>
</div>
</div>
<nav class="menu">
<ul class="menu__inner">
<li class="active"><a href="https://blog.dich.ink">blog</a></li>
<li><a href="https://blog.dich.ink/tags">tags</a></li>
<li><a href="https://blog.dich.ink/archive">archive</a></li>
<li><a href="https://blog.dich.ink/about">about me</a></li>
<li><a href="https://blog.dich.ink/links">links</a></li>
<li><a href="https://github.com/Dichgrem" target="_blank" rel="noopener noreferrer">github</a></li>
</ul>
</nav>
</header>
<div class="content">
<div class="post">
<h1 class="post-title"><a href="https://blog.dich.ink/docker-learn-7/">Docker学习笔记(七)</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2024-03-31
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/docker/">#Docker</a></span>
<div class="post-content">
<p>前言 容器镜像仓库是 Docker 容器镜像的集中存储和分发系统。它允许开发人员以这些映像的形式轻松共享和部署应用程序。容器镜像仓库在容器化应用程序的部署中起着至关重要的作用,因为它们提供了一种快速、可靠且安全的方式来跨各种生产环境分发容器映像。</p>
<span id="continue-reading"></span><h2 id="container-registries-rong-qi-jing-xiang-cang-ku"><strong>Container Registries 容器镜像仓库</strong></h2>
<p>以下是当今可用的常用容器镜像仓库列表:</p>
<ul>
<li>Docker HubDocker Hub 是公共 Docker 映像的默认注册表,用作在开发人员之间共享和分发映像的平台。</li>
<li>Google Container Registry GCRGCR 是 Google Cloud Platform 提供的托管、安全且高度可用的注册表,非常适合托管私有容器镜像。</li>
<li>Amazon Elastic Container Registry ECRAmazon ECR 是由 Amazon Web Services 提供的完全托管的 Docker 容器镜像仓库,为存储、管理和部署容器映像提供高可扩展性和性能。</li>
<li>Azure 容器镜像仓库 ACRACR 是 Microsoft Azure 提供的托管注册表,提供异地复制、访问控制以及与其他 Azure 服务的集成。</li>
</ul>
<p><strong>DockerHub</strong>
DockerHub 是 Docker Inc. 提供的基于云的注册服务。它是默认的公共容器镜像仓库,您可以在其中存储、管理和分发 Docker 映像。DockerHub 使其他用户可以轻松查找和使用您的映像,或者与 Docker 社区共享他们自己的映像。</p>
<p><strong>DockerHub的功能</strong></p>
<ul>
<li>公共和私有存储库:将映像存储在每个人都可以访问的公共存储库中,或者选择仅限您的团队或组织访问的私有存储库。</li>
<li>自动构建DockerHub 与 GitHub 和 Bitbucket 等常用代码存储库集成,允许您为 Docker 映像设置自动构建。每当您将代码推送到存储库时DockerHub 都会自动创建一个包含最新更改的新映像。</li>
<li>WebhookDockerHub 允许您配置 Webhook以便在构建或更新映像时通知其他应用程序或服务。</li>
<li>组织和团队:通过创建组织和团队来管理对映像和存储库的访问,使协作变得容易。</li>
<li>官方镜像DockerHub 为 MongoDB、Node.js、Redis 等流行软件提供了一组精选的官方镜像。这些映像由 Docker Inc. 和上游软件供应商维护,确保它们是最新且安全的。</li>
</ul>
<p>要开始使用 DockerHub您需要在他们的网站上创建一个免费帐户。注册后您可以创建存储库、管理组织和团队以及浏览可用映像。</p>
<p>当您准备好共享自己的映像时,可以使用 docker 命令行工具将本地映像推送到 DockerHub</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker login
</span><span>docker tag your-image your-username/your-repository:your-tag
</span><span>docker push your-username/your-repository:your-tag
</span></code></pre>
<p>要从 DockerHub 拉取镜像,可以使用 docker pull 命令:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker pull your-username/your-repository:your-tag
</span></code></pre>
<p>DockerHub 对于分发和共享 Docker 映像至关重要,使开发人员能够更轻松地部署应用程序和管理容器基础架构。</p>
<h2 id="jing-xiang-biao-ji-zui-jia-shi-jian"><strong>镜像标记最佳实践</strong></h2>
<p>正确标记 Docker 映像对于高效的容器管理和部署至关重要。在本节中,我们将讨论镜像标记的一些最佳实践。</p>
<p><strong>使用语义版本控制</strong>
标记镜像时建议遵循语义版本控制指南。语义版本控制是一种广受认可的方法可以帮助更好地维护应用程序。Docker 镜像标签应具有以下结构 &lt;major_version&gt;.&lt;minor_version&gt;.<patch>。示例3.2.1。</p>
<p><strong>标记最新版本</strong>
除了版本号之外Docker 还允许您将映像标记为“最新”。通常的做法是将映像的最新稳定版本标记为“最新”,以便用户无需指定版本号即可快速访问它。但是,在发布新版本时保持此标记更新非常重要。</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker build -t your-username/app-name:latest .
</span></code></pre>
<p><strong>具有描述性和一致性</strong>
选择清晰且描述性的标签名称,以传达镜像的用途或与先前版本相比的更改。您的标签还应该在映像和存储库中保持一致,以便更好地组织和易用。</p>
<p><strong>包括生成和 Git 信息(可选)</strong>
在某些情况下,在镜像标记中包含有关构建和 Git 提交的信息可能会有所帮助。这有助于识别用于生成映像的源代码和环境。示例app-name-1.2.3-b567-d1234efg。</p>
<p><strong>使用特定于环境和体系结构的标签</strong>
如果应用程序部署在不同的环境生产、暂存、开发或具有多个体系结构amd64、arm64则可以使用指定这些变体的标记。示例your-username/app-name:1.2.3-production-amd64。</p>
<p><strong>需要时重新标记镜像</strong>
有时,您可能需要在将映像推送到注册表后重新标记映像。例如,如果您已经为应用程序发布了补丁,则可能需要使用与以前版本相同的标记重新标记新的补丁版本。这样可以更顺畅地更新应用程序,并减少需要应用补丁的用户的手动工作。</p>
<p><strong>使用自动生成和标记工具</strong>
请考虑使用 CI/CD 工具Jenkins、GitLab CI、Travis-CI根据提交、分支或其他规则自动生成映像和标记。这确保了一致性并减少了人工干预导致错误的可能性。</p>
<p>通过遵循这些映像标记的最佳做法,可以确保 Docker 映像的容器注册表更有条理、更可维护且用户友好。</p>
<h2 id="running-containers-yun-xing-rong-qi"><strong>Running Containers 运行容器</strong></h2>
<p>要启动一个新容器,我们使用 docker run 命令,后跟映像名称。基本语法如下:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker run [options] IMAGE [COMMAND] [ARG...]
</span></code></pre>
<p>例如,要运行官方的 Nginx 镜像,我们将使用:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker run -d -p 8080:80 nginx
</span></code></pre>
<p>这将启动一个新容器,并将主机的端口 8080 映射到容器的端口 80。</p>
<p><strong>Listing Containers 列出容器</strong>
要列出所有正在运行的容器,请使用 docker ps 命令。要查看所有容器(包括已停止的容器),请使用 -a 标志:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker container ls -a
</span></code></pre>
<p><strong>Accessing Containers 访问容器</strong>
要访问正在运行的容器的 shell请使用 docker exec 命令:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker exec -it CONTAINER_ID bash
</span></code></pre>
<p>将 CONTAINER_ID 替换为所需容器的 ID 或名称。您可以在 docker ps 的输出中找到它。</p>
<p><strong>Stopping Containers 停止容器</strong>
若要停止正在运行的容器,请使用 docker stop 命令,后跟容器 ID 或名称:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker container stop CONTAINER_ID
</span></code></pre>
<p><strong>Removing Containers 移除容器</strong>
容器停止后,我们可以使用 docker rm 命令后跟容器 ID 或名称将其删除:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker container rm CONTAINER_ID
</span></code></pre>
<p>若要在容器退出时自动删除容器,请在运行容器时添加 --rm 标志:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker run --rm IMAGE
</span></code></pre>
<p><strong>使用 docker run 运行容器</strong>
在本节中,我们将讨论 docker run 命令,该命令使你能够运行 Docker 容器。docker run 命令从指定映像创建一个新容器并启动它。</p>
<p>docker run 命令的基本语法如下:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
</span><span>OPTIONS这些是命令行标志可用于调整容器的设置如内存约束、端口、环境变量等。
</span><span>IMAGE容器将运行的 Docker 映像。这可以是 Docker Hub 中的映像,也可以是存储在本地的您自己的映像。
</span><span>COMMAND这是容器启动时将在容器内执行的命令。如果未指定则将使用映像的默认入口点。
</span><span>ARG...:这些是可选参数,可以传递给正在执行的命令。
</span></code></pre>
<p><strong>常用选项</strong>
以下是一些常用的 docker run 选项:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>--name为容器分配名称使其更易于识别和管理。
</span><span>-p, --publish将容器的端口发布到主机。当您想要从容器外部访问容器内运行的服务时这很有用。
</span><span>-e, --env在容器内设置环境变量。您可以多次使用此选项来设置多个变量。
</span><span>-d, --detach在分离模式下运行容器在后台运行容器并且不在控制台中显示日志。
</span><span>-v, --volume将卷从主机绑定挂载到容器。这有助于持久保存容器生成的数据或在主机和容器之间共享文件。
</span></code></pre>
<p><strong>下面是一些示例命令,可帮助您了解如何使用 docker run</strong></p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>运行 Ubuntu 容器的交互式会话:
</span><span>docker run -it --name=my-ubuntu ubuntu
</span><span>运行 Nginx Web 服务器并在主机上发布端口 80
</span><span>docker run -d --name=my-nginx -p 80:80 nginx
</span><span>使用自定义环境变量运行 MySQL 容器以配置数据库:
</span><span>docker run -d --name=my-mysql -e MYSQL_ROOT_PASSWORD=secret -e MYSQL_DATABASE=mydb -p 3306:3306 mysql
</span><span>使用绑定挂载卷运行容器:
</span><span>docker run -d --name=my-data -v /path/on/host:/path/in/container some-image
</span></code></pre>
<h2 id="docker-compose"><strong>Docker Compose</strong></h2>
<p>Docker Compose 是用于定义和运行多容器 Docker 应用程序的工具。它允许您使用名为 docker-compose.yml 的简单 YAML 文件创建、管理和运行应用程序。此文件描述了应用程序的服务、网络和卷,使您只需使用一个命令即可轻松运行和管理容器。</p>
<p>使用 Docker Compose 的一些好处包括:</p>
<ul>
<li>简化的容器管理Docker Compose 允许您在一个地方定义和配置所有服务、网络和卷,使其易于管理和维护。</li>
<li>可重现版本:与他人共享您的 docker-compose.yml 文件,以确保他们与您运行相同的环境和服务。</li>
<li>版本控制支持:可以对 Docker Compose 文件进行版本控制,以便更轻松地兼容不同版本的 Docker Compose 工具本身。</li>
</ul>
<p><strong>创建 Docker Compose 文件:</strong>
若要创建 docker-compose.yml 文件,请首先指定要使用的 Docker Compose 版本,然后指定要定义的服务。下面是基本 docker-compose.yml 文件的示例:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>version: &quot;3.9&quot;
</span><span>services:
</span><span> web:
</span><span> image: nginx:latest
</span><span> ports:
</span><span> - &quot;80:80&quot;
</span><span> db:
</span><span> image: mysql:latest
</span><span> environment:
</span><span> MYSQL_ROOT_PASSWORD: mysecretpassword
</span></code></pre>
<p>在此示例中,我们指定了两个服务:运行最新版本的 nginx 映像的 Web 服务器 web 和运行 MySQL 的数据库服务器 db。Web 服务器将其端口 80 公开给主机,并且数据库服务器为 root 密码设置了环境变量。</p>
<p><strong>运行 Docker Compose</strong>
要运行 Docker Compose 应用程序,只需导航到包含 docker-compose.yml 文件的目录并运行以下命令:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker-compose up
</span><span>Docker Compose 将读取文件并按指定顺序启动定义的服务。
</span></code></pre>
<p><strong>其他有用的命令:</strong></p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker-compose down停止并删除 docker-compose.yml 文件中定义的所有正在运行的容器、网络和卷。
</span><span>docker-compose ps列出 docker-compose.yml 文件中定义的所有容器的状态。
</span><span>docker-compose logs显示 docker-compose.yml 文件中定义的所有容器的日志。
</span><span>docker-compose build构建 docker-compose.yml 文件中定义的所有映像。
</span></code></pre>
<h2 id="yun-xing-shi-pei-zhi-xuan-xiang"><strong>运行时配置选项</strong></h2>
<p>运行时配置选项允许您在运行 Docker 容器时自定义它们的行为和资源。这些选项有助于管理容器资源、安全性和网络。以下是一些常用运行时配置选项的简要摘要:</p>
<p><strong>Resource Management 资源管理</strong>
CPU您可以使用 --cpus 和 --cpu-shares 选项限制容器的 CPU 使用率。--cpus 限制容器可以使用的 CPU 内核数,而 --cpu-shares 为容器分配 CPU 时间的相对份额。</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker run --cpus=2 --cpu-shares=512 your-image
</span></code></pre>
<p>内存:您可以使用 --memory 和 --memory-reservation 选项限制和保留容器的内存。这有助于防止容器消耗过多的系统资源。</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker run --memory=1G --memory-reservation=500M your-image
</span></code></pre>
<p><strong>Security 安全</strong>
用户:默认情况下,容器以 root 用户身份运行。为了提高安全性,您可以使用 --user 选项以其他用户或 UID 身份运行容器。</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker run --user 1000 your-image
</span></code></pre>
<p>只读根文件系统:为防止对容器文件系统进行不必要的更改,可以使用 --read-only 选项将根文件系统挂载为只读。</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker run --read-only your-image
</span></code></pre>
<p><strong>Networking 联网</strong>
发布端口:可以使用 --publish或 -p选项将容器的端口发布到主机系统。这允许外部系统访问容器化服务。</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker run -p 80:80 your-image
</span></code></pre>
<p>主机名和 DNS您可以使用 --hostname 和 --dns 选项自定义容器的主机名和 DNS 设置。</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker run --hostname=my-container --dns=8.8.8.8 your-image
</span></code></pre>
<p>包含这些运行时配置选项将使你能够有效地管理容器的资源、安全性和网络需求。有关可用运行时配置选项的完整列表,请参阅 Docker 的官方文档。</p>
</div>
<div class="pagination">
<div class="pagination__title">
<span class="pagination__title-h">Thanks for reading! Read other posts?</span>
<hr />
</div>
<div class="pagination__buttons">
<span class="button previous">
<a href="https://blog.dich.ink/docker-learn-6/">
<span class="button__icon"></span>&nbsp;
<span class="button__text">Docker学习笔记(六)</span>
</a>
</span>
<span class="button next">
<a href="https://blog.dich.ink/docker-learn-8/">
<span class="button__text">Docker学习笔记(八)</span>&nbsp;
<span class="button__icon"></span>
</a>
</span>
</div>
</div>
</div>
</div>
<footer class="footer">
<div class="footer__inner">
<div class="copyright">
<span>©
2024
Dichgrem</span>
<span class="copyright-theme">
<span class="copyright-theme-sep">:: </span>
Theme: <a href="https://github.com/pawroman/zola-theme-terminimal/">Terminimal</a> by pawroman
</span>
</div>
</div>
</footer>
<script async defer src="http://173.249.208.93:12345/tracker.js" data-website-id="cluckwxwg0005qf4n55m737sz"></script>
</div>
</body>
</html>

View File

@ -0,0 +1,237 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Dich&#x27;blog</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=5">
<meta name="robots" content="noodp"/>
<link rel="stylesheet" href="https://blog.dich.ink/style.css">
<link rel="stylesheet" href="https://blog.dich.ink/color/blue.css">
<link rel="stylesheet" href="https://blog.dich.ink/color/background_dark.css">
<link rel="stylesheet" href="https://blog.dich.ink/font-hack-subset.css">
<meta name="description" content="">
<meta property="og:description" content="">
<meta property="og:title" content="Dich'blog">
<meta property="og:type" content="article">
<meta property="og:url" content="https://blog.dich.ink/docker-learn-8/">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:description" content="">
<meta name="twitter:title" content="Dich'blog">
<meta property="twitter:domain" content="blog.dich.ink">
<meta property="twitter:url" content="https://blog.dich.ink/docker-learn-8/">
<link rel="alternate" type="application/atom+xml" title="RSS" href="https://blog.dich.ink/atom.xml">
</head>
<body class="">
<div class="container">
<header class="header">
<div class="header__inner">
<div class="header__logo">
<a href="https://blog.dich.ink" style="text-decoration: none;">
<div class="logo">
Dich&#x27;blog
</div>
</a>
</div>
</div>
<nav class="menu">
<ul class="menu__inner">
<li class="active"><a href="https://blog.dich.ink">blog</a></li>
<li><a href="https://blog.dich.ink/tags">tags</a></li>
<li><a href="https://blog.dich.ink/archive">archive</a></li>
<li><a href="https://blog.dich.ink/about">about me</a></li>
<li><a href="https://blog.dich.ink/links">links</a></li>
<li><a href="https://github.com/Dichgrem" target="_blank" rel="noopener noreferrer">github</a></li>
</ul>
</nav>
</header>
<div class="content">
<div class="post">
<h1 class="post-title"><a href="https://blog.dich.ink/docker-learn-8/">Docker学习笔记(八)</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2024-04-01
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/docker/">#Docker</a></span>
<div class="post-content">
<p>前言 容器安全是实现和管理容器技术(如 Docker的关键方面。它包含一组实践、工具和技术旨在保护容器化应用程序及其运行的基础结构。在本节中我们将讨论一些关键的容器安全注意事项、最佳做法和建议。</p>
<span id="continue-reading"></span><h2 id="container-security-rong-qi-an-quan"><strong>Container Security 容器安全</strong></h2>
<p><strong>Container Isolation 容器隔离</strong>
隔离对于确保容器化环境的稳健性和安全性至关重要。容器应彼此隔离并与主机系统隔离,以防止未经授权的访问,并在攻击者设法破坏一个容器时减轻潜在的损害。</p>
<ul>
<li>命名空间Docker 使用命名空间技术为运行容器提供隔离环境。命名空间限制容器在更广泛的系统中可以查看和访问的内容,包括进程和网络资源。</li>
<li>C组控制组 cgroups 用于限制容器消耗的资源,例如 CPU、内存和 I/O。 正确使用 cgroups 有助于防止 DoS 攻击和资源耗尽情况。</li>
</ul>
<p><strong>安全模式和做法</strong>
在容器的开发、部署和操作过程中实施最佳实践和特定安全模式对于维护安全环境至关重要。</p>
<ul>
<li>最小权限:应以尽可能低的权限运行容器,仅授予应用程序所需的最低权限。</li>
<li>不可变的基础架构:容器应被视为不可变单元 - 一旦构建,就不应更改它们。任何更改都应通过从更新的映像部署新容器来实现。</li>
<li>版本控制:映像应进行版本控制,并存储在安全的容器注册表中。</li>
</ul>
<p><strong>安全访问控制</strong>
应将访问控制应用于容器管理和容器数据,以保护敏感信息并维护整体安全态势。</p>
<ul>
<li>容器管理:使用基于角色的访问控制 RBAC 来限制对容器管理平台(例如 Kubernetes的访问并确保用户仅具有所需的最低权限。</li>
<li>容器数据:对静态数据和传输中的数据进行加密,尤其是在处理敏感信息时。</li>
</ul>
<p><strong>容器漏洞管理</strong>
容器容易受到攻击,因为它们的映像依赖于各种包和库。为了降低这些风险,应将漏洞管理包含在容器生命周期中。</p>
<ul>
<li>镜像扫描:使用自动扫描工具识别容器和镜像中的漏洞。这些工具应集成到开发管道中,以便在潜在风险进入生产环境之前发现它们。</li>
<li>安全基础映像:使用最小且安全的基础映像创建容器,从而减少攻击面和潜在漏洞。</li>
<li>定期更新:使用最新的安全补丁和更新使基础映像和容器保持最新状态。</li>
</ul>
<h2 id="image-security-jing-xiang-an-quan"><strong>Image Security 镜像安全</strong></h2>
<p>映像安全是在环境中部署 Docker 容器的一个关键方面。确保您使用的镜像是安全的、最新的且没有漏洞至关重要。在本节中,我们将回顾用于保护和管理 Docker 映像的最佳实践和工具。</p>
<p><strong>使用受信任的映像源</strong>
从公共存储库中提取映像时,请始终使用受信任的官方映像作为容器化应用程序的起点。官方映像由 Docker 审查,并定期更新安全修复程序。可以在 Docker Hub 或其他受信任的注册表上找到这些映像。</p>
<p>Official Images: https://hub.docker.com/explore/</p>
<p>从其他用户下载镜像或创建自己的镜像时,请务必验证源,并检查 Dockerfile 和其他提供的文件,以确保它们遵循最佳实践并且不会引入漏洞。</p>
<p><strong>使镜像保持最新状态</strong>
持续监控您的镜像并定期更新它们。这有助于最大程度地减少已知漏洞的风险,因为更新通常包含安全补丁。</p>
<p>您可以使用以下工具扫描和检查映像的更新:</p>
<p>Docker Hubhttps://hub.docker.com/
Anchore: https://anchore.com/
Clair: https://github.com/quay/clair</p>
<p><strong>使用最少的基础映像</strong>
最小基础映像仅包含运行容器化应用程序所需的基本要素。基础映像中存在的组件越少,潜在漏洞的攻击面就越小。</p>
<p>最小基础映像的一个示例是 Alpine Linux 发行版,由于其占用空间小和安全功能,它通常用于 Docker 映像。</p>
<p>Alpine Linux: https://alpinelinux.org/
Alpine Linuxhttps://alpinelinux.org/</p>
<p><strong>扫描镜像以查找漏洞</strong>
使用 Clair 或 Anchore 等工具定期扫描镜像以查找已知漏洞。这些工具可以检测映像和容器配置中的潜在风险,从而允许您在将映像推送到注册表或在生产环境中部署映像之前解决这些风险。</p>
<p><strong>对映像进行签名和验证</strong>
若要确保映像的完整性和真实性,请始终使用 Docker 内容信任 DCT 对映像进行签名。DCT 使用数字签名来保证您拉取或推送的镜像是您期望的镜像,并且在传输过程中未被篡改。</p>
<p>Enable DCT for your Docker environment by setting the following environment variable:
通过设置以下环境变量为 Docker 环境启用 DCT</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>export DOCKER_CONTENT_TRUST=1
</span></code></pre>
<p><strong>利用多阶段构建</strong>
多阶段构建允许您在同一个 Dockerfile 中使用多个 FROM 指令。每个阶段可以具有不同的基础映像或指令集,但只有最终阶段才能确定最终映像的内容。通过使用多阶段构建,您可以最大程度地减少最终映像的大小和复杂性,从而降低漏洞风险。</p>
<p>下面是一个使用多阶段构建的示例 Dockerfile</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span># Build stage
</span><span>FROM node:12-alpine AS build
</span><span>WORKDIR /app
</span><span>COPY . .
</span><span>RUN npm ci --production
</span><span>
</span><span># Final stage
</span><span>FROM node:12-alpine
</span><span>COPY --from=build /app /app
</span><span>CMD [&quot;npm&quot;, &quot;start&quot;]
</span></code></pre>
<p>通过遵循这些映像安全最佳实践,您可以最大限度地降低漏洞风险,并确保容器化应用程序的安全。</p>
<h2 id="runtime-security-yun-xing-shi-an-quan-xing"><strong>Runtime Security 运行时安全性</strong></h2>
<p>运行时安全性侧重于确保 Docker 容器在生产环境中运行时的安全性。这是容器安全的一个关键方面,因为威胁可能会在部署容器后到达或被发现。适当的运行时安全措施有助于最大程度地减少漏洞被利用时可能造成的损害。</p>
<p><strong>最小特权原则</strong>
确保您的容器遵循最小权限原则,这意味着它们应该只具有执行其预期功能所需的最低权限。这有助于限制容器受损时的潜在损坏。</p>
<p><strong>尽可能以非 root 用户身份运行容器</strong>
避免运行特权容器,因为这些容器可以访问主机的所有资源。
使用 Linux 功能从容器中剥离不必要的权限。</p>
<p><strong>只读文件系统</strong>
通过将容器的文件系统设置为只读,可以防止攻击者修改关键文件或在容器中植入恶意软件。
在启动容器时使用 --read-only 标志,使其文件系统为只读。
为需要写入访问权限的位置实施卷装载或 tmpfs 装载。</p>
<p><strong>安全扫描和监控</strong>
确保定期扫描容器中的漏洞,包括映像本身和运行时环境中的漏洞。</p>
<p><strong>使用容器扫描工具检测和修补映像中的漏洞。</strong>
实施运行时监视以检测和响应安全事件,例如未经授权的访问尝试或意外的进程启动。</p>
<p><strong>Resource Isolation 资源隔离</strong>
隔离容器的资源(如 CPU、内存和网络以防止单个受感染的容器影响其他容器或主机系统。</p>
<p>使用 Docker 的内置资源约束来限制容器可以使用的资源。
使用网络分段和防火墙来隔离容器并限制其通信。</p>
<p><strong>Audit Logs 审核日志</strong>
维护容器活动的审核日志,以帮助进行事件响应、故障排除和合规性。
使用 Docker 的日志记录功能捕获容器日志,并将其输出到集中式日志记录解决方案。
实施日志分析工具以监控可疑活动,并在检测到潜在事件时自动发出警报。</p>
</div>
<div class="pagination">
<div class="pagination__title">
<span class="pagination__title-h">Thanks for reading! Read other posts?</span>
<hr />
</div>
<div class="pagination__buttons">
<span class="button previous">
<a href="https://blog.dich.ink/docker-learn-7/">
<span class="button__icon"></span>&nbsp;
<span class="button__text">Docker学习笔记(七)</span>
</a>
</span>
<span class="button next">
<a href="https://blog.dich.ink/docker-learn-9/">
<span class="button__text">Docker学习笔记(九)</span>&nbsp;
<span class="button__icon"></span>
</a>
</span>
</div>
</div>
</div>
</div>
<footer class="footer">
<div class="footer__inner">
<div class="copyright">
<span>©
2024
Dichgrem</span>
<span class="copyright-theme">
<span class="copyright-theme-sep">:: </span>
Theme: <a href="https://github.com/pawroman/zola-theme-terminimal/">Terminimal</a> by pawroman
</span>
</div>
</div>
</footer>
<script async defer src="http://173.249.208.93:12345/tracker.js" data-website-id="cluckwxwg0005qf4n55m737sz"></script>
</div>
</body>
</html>

View File

@ -0,0 +1,295 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Dich&#x27;blog</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=5">
<meta name="robots" content="noodp"/>
<link rel="stylesheet" href="https://blog.dich.ink/style.css">
<link rel="stylesheet" href="https://blog.dich.ink/color/blue.css">
<link rel="stylesheet" href="https://blog.dich.ink/color/background_dark.css">
<link rel="stylesheet" href="https://blog.dich.ink/font-hack-subset.css">
<meta name="description" content="">
<meta property="og:description" content="">
<meta property="og:title" content="Dich'blog">
<meta property="og:type" content="article">
<meta property="og:url" content="https://blog.dich.ink/docker-learn-9/">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:description" content="">
<meta name="twitter:title" content="Dich'blog">
<meta property="twitter:domain" content="blog.dich.ink">
<meta property="twitter:url" content="https://blog.dich.ink/docker-learn-9/">
<link rel="alternate" type="application/atom+xml" title="RSS" href="https://blog.dich.ink/atom.xml">
</head>
<body class="">
<div class="container">
<header class="header">
<div class="header__inner">
<div class="header__logo">
<a href="https://blog.dich.ink" style="text-decoration: none;">
<div class="logo">
Dich&#x27;blog
</div>
</a>
</div>
</div>
<nav class="menu">
<ul class="menu__inner">
<li class="active"><a href="https://blog.dich.ink">blog</a></li>
<li><a href="https://blog.dich.ink/tags">tags</a></li>
<li><a href="https://blog.dich.ink/archive">archive</a></li>
<li><a href="https://blog.dich.ink/about">about me</a></li>
<li><a href="https://blog.dich.ink/links">links</a></li>
<li><a href="https://github.com/Dichgrem" target="_blank" rel="noopener noreferrer">github</a></li>
</ul>
</nav>
</header>
<div class="content">
<div class="post">
<h1 class="post-title"><a href="https://blog.dich.ink/docker-learn-9/">Docker学习笔记(九)</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2024-04-02
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/docker/">#Docker</a></span>
<div class="post-content">
<p>前言 Docker CLI命令行界面是一个强大的工具允许您与 Docker 容器、映像、卷和网络进行交互和管理。它为用户提供了广泛的命令,用于在开发和生产工作流中创建、运行和管理 Docker 容器和其他 Docker 资源。</p>
<span id="continue-reading"></span>
<p>在本主题中,我们将深入探讨 Docker CLI 的一些关键方面,包括以下内容:</p>
<p><strong>1. 安装</strong></p>
<p>要开始使用 Docker CLI您需要在计算机上安装 Docker。您可以按照 Docker 文档中相应操作系统的官方安装指南进行操作。</p>
<p><strong>2. 基本命令</strong></p>
<p>以下是一些需要熟悉的基本 Docker CLI 命令:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker run从 Docker 镜像创建并启动容器
</span><span>docker container列出正在运行的容器
</span><span>docker image列出系统上所有可用的镜像
</span><span>docker pull从 Docker Hub 或其他注册表拉取映像
</span><span>docker push将映像推送到 Docker Hub 或其他注册表
</span><span>docker build从 Dockerfile 构建映像
</span><span>docker exec在正在运行的容器中运行命令
</span><span>docker logs显示容器的日志
</span></code></pre>
<p><strong>3. Docker 运行选项</strong></p>
<p>docker run 是 Docker CLI 中最重要的命令之一。您可以使用各种选项自定义容器的行为,例如:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>-d, --detach在后台运行容器
</span><span>-e, --env为容器设置环境变量
</span><span>-v, --volume绑定挂载卷
</span><span>-p, --publish将容器的端口发布到主机
</span><span>--name为容器分配名称
</span><span>--restart指定容器的重启策略
</span><span>--rm容器退出时自动移除容器
</span></code></pre>
<p><strong>4. Dockerfile</strong></p>
<p>Dockerfile 是一个脚本,其中包含用于构建 Docker 映像的指令。您可以使用 Docker CLI 通过 Dockerfile 构建、更新和管理 Docker 映像。</p>
<p>下面是 Dockerfile 的简单示例:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span># Set the base image to use
</span><span>FROM alpine:3.7
</span><span>
</span><span># Update the system and install packages
</span><span>RUN apk update &amp;&amp; apk add curl
</span><span>
</span><span># Set the working directory
</span><span>WORKDIR /app
</span><span>
</span><span># Copy the application file
</span><span>COPY app.sh .
</span><span>
</span><span># Set the entry point
</span><span>ENTRYPOINT [&quot;./app.sh&quot;]
</span></code></pre>
<p>若要生成映像,请使用以下命令:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker build -t my-image .
</span></code></pre>
<p><strong>5. Docker Compose</strong></p>
<p>Docker Compose 是一个 CLI 工具,用于使用 YAML 文件定义和管理多容器 Docker 应用程序。它与 Docker CLI 协同工作,提供一种一致的方式来管理多个容器及其依赖项。</p>
<p>使用官方安装指南安装 Docker Compose然后您可以创建一个 docker-compose.yml 文件来定义和运行多容器应用程序:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>version: &#39;3&#39;
</span><span>services:
</span><span> web:
</span><span> image: webapp-image
</span><span> ports:
</span><span> - &quot;80:80&quot;
</span><span> database:
</span><span> image: mysql
</span><span> environment:
</span><span> - MYSQL_ROOT_PASSWORD=my-secret-pw
</span></code></pre>
<p>使用以下命令运行应用程序:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker-compose up
</span></code></pre>
<h2 id="docker-images-docker-jing-xiang"><strong>Docker Images Docker 镜像</strong></h2>
<p>Docker 映像是轻量级、独立且可执行的包,其中包含运行应用程序所需的一切。这些映像包含所有必要的依赖项、库、运行时、系统工具和代码,使应用程序能够在不同的环境中一致地运行。</p>
<p>Docker 映像是使用 Dockerfile 构建和管理的。Dockerfile 是一个脚本,其中包含用于创建 Docker 映像的指令,提供设置应用程序环境的分步指南。</p>
<p><strong>使用 Docker 映像</strong></p>
<p>Docker CLI 提供了多个命令来管理和处理 Docker 映像。一些基本命令包括:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker image ls: List all available images on your local system.
</span><span>docker image ls列出本地系统上所有可用的镜像。
</span><span>docker build: Build an image from a Dockerfile.
</span><span>docker build从 Dockerfile 构建映像。
</span><span>docker image rm: Remove one or more images.
</span><span>docker image rm删除一个或多个镜像。
</span><span>docker pull: Pull an image from a registry (e.g., Docker Hub) to your local system.
</span><span>docker pull将映像从注册表例如 Docker Hub拉取到本地系统。
</span><span>docker push: Push an image to a repository.
</span><span>docker push将镜像推送到存储库。
</span></code></pre>
<p>例如,要从 Docker Hub 拉取官方 Ubuntu 映像,可以运行以下命令:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker pull ubuntu:latest
</span></code></pre>
<p>拉取映像后,可以使用该映像和 docker run 命令创建并运行容器:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker run -it ubuntu:latest /bin/bash
</span></code></pre>
<p>此命令创建一个新容器,并使用 /bin/bash shell 在容器内启动交互式会话。</p>
<p><strong>Sharing Images 共享镜像</strong></p>
<p>可以使用容器注册表(如 Docker Hub、Google Container Registry 或 Amazon Elastic Container Registry ECR共享和分发 Docker 映像。将映像推送到注册表后,其他人可以轻松访问和使用它们。</p>
<p>要共享您的镜像,您首先需要使用正确的命名格式对其进行标记:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker tag &lt;image-id&gt; &lt;username&gt;/&lt;repository&gt;:&lt;tag&gt;
</span></code></pre>
<p>然后,您可以使用以下命令将标记的映像推送到注册表:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker push &lt;username&gt;/&lt;repository&gt;:&lt;tag&gt;
</span></code></pre>
<p><strong>Containers 容器</strong></p>
<p>容器可以被认为是轻量级、独立和可执行的软件包,其中包括运行软件所需的一切,包括代码、运行时、库、环境变量和配置文件。容器将软件与其周围环境隔离开来,确保它在不同的环境中统一工作。</p>
<p><strong>为什么要使用容器?</strong></p>
<ul>
<li>可移植性:容器确保应用程序在不同平台上一致地工作,无论是开发人员的笔记本电脑还是生产服务器。这消除了“它在我的机器上工作”的问题。</li>
<li>效率:容器是轻量级的,因为它们使用共享资源,而没有成熟操作系统的开销。这样可以缩短启动时间并减少资源使用。</li>
<li>可扩展性:容器可以根据工作负载轻松扩展或缩减,使其成为分布式应用程序和微服务的理想选择。</li>
<li>一致性容器使开发人员、QA 和运营团队能够在整个应用程序生命周期中拥有一致的环境,从而实现更快、更顺畅的部署管道。</li>
<li>安全性:容器提供与其他容器和底层主机系统的隔离级别,这有助于维护应用程序安全性。</li>
</ul>
<p><strong>使用 Docker CLI 处理容器</strong>
Docker CLI 提供了多个命令来帮助你创建、管理容器并与之交互。一些常用命令包括:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker run用于创建和启动新容器。
</span><span>docker container ls列出正在运行的容器。
</span><span>docker container stop停止正在运行的容器。
</span><span>docker container rm删除已停止的容器。
</span><span>docker exec在正在运行的容器内执行命令。
</span><span>docker logs获取容器的日志可用于调试问题。
</span></code></pre>
<h2 id="docker-volumes"><strong>Docker Volumes</strong></h2>
<p>Docker 卷是一种用于保存 Docker 容器生成和使用的数据的机制。它们允许您将数据与容器本身分开,从而轻松备份、迁移和管理持久性数据。</p>
<p><strong>为什么卷很重要</strong> </p>
<p>Docker 容器本质上是短暂的,这意味着它们可以很容易地停止、删除或替换。虽然这对于应用程序开发和部署非常有用,但在处理持久性数据时会带来挑战。这就是销量的来源。它们提供了一种独立于容器生命周期存储和管理数据的方法。</p>
<p><strong>Types of Volumes 卷的类型</strong></p>
<p>Docker 中有三种类型的卷:</p>
<ul>
<li>主机卷 Host Volumes它们存储在主机的文件系统中通常位于 /var/lib/docker/volumes 目录中。这些可以很容易地访问,但可能会带来可移植性或文件系统兼容性的问题。</li>
<li>匿名卷 Anonymous Volumes这些卷是在运行容器时自动创建的无需指定卷。它们的 ID 由 Docker 生成,也存储在主机的文件系统中。</li>
<li>命名卷 Named Volumes与匿名卷类似命名卷存储在主机的文件系统中。但是您可以提供自定义名称以便于在其他容器或备份中引用。</li>
</ul>
<p><strong>使用 Docker CLI 进行卷管理</strong></p>
<p>Docker CLI 提供了各种命令来管理卷:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker volume create创建具有给定名称的新卷。
</span><span>docker volume ls列出系统上的所有卷。
</span><span>docker volume inspect提供有关特定卷的详细信息。
</span><span>docker volume rm删除卷。
</span><span>docker volume prune删除所有未使用的卷。
</span></code></pre>
<p>若要在容器中使用卷,可以在 docker run 命令中使用 -v 或 --volume 标志。例如:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>docker run -d --name my-container -v my-named-volume:/var/lib/data my-image
</span></code></pre>
<p>此命令使用“my-image”映像创建名为“my-container”的新容器并将“my-named-volume”卷挂载到容器内的 /var/lib/data 路径处。</p>
<h2 id="docker-networks-docker-wang-luo"><strong>Docker Networks Docker 网络</strong></h2>
<p>Docker 网络提供了管理容器通信的基本方法。它允许容器使用各种网络驱动程序相互通信以及与主机通信。通过了解和利用不同类型的网络驱动程序,可以设计容器网络以适应特定方案或应用程序要求。</p>
<p><strong>Network Drivers 网络驱动程序</strong></p>
<p>Docker 中提供了多个网络驱动程序。在这里,我们将介绍四种最常见的:</p>
<ul>
<li>bridge容器的默认网络驱动程序。它创建一个专用网络容器可以在其中相互通信并与主机通信。此网络上的容器可以通过主机的网络访问外部资源。</li>
<li>host此驱动程序删除网络隔离并允许容器共享主机的网络。它适用于网络性能至关重要的情况因为它可以最大程度地减少容器网络的开销。</li>
<li>none此网络驱动程序禁用容器网络。使用此驱动程序的容器在隔离环境中运行无需任何网络访问。</li>
<li>overlay此网络驱动程序使部署在不同主机上的容器能够相互通信。它旨在与 Docker Swarm 配合使用,非常适合多主机或基于集群的容器部署。</li>
</ul>
<p><strong>管理 Docker 网络</strong></p>
<p>Docker CLI 提供了各种命令来管理网络。以下是一些有用的命令:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>列出所有网络docker network ls
</span><span>检查网络docker network inspect &lt;network_name&gt;
</span><span>创建新网络docker network create --driver &lt;driver_type&gt; &lt;network_name&gt;
</span><span>将容器连接到网络docker network connect &lt;network_name&gt; &lt;container_name&gt;
</span><span>断开容器与网络的连接docker network disconnect &lt;network_name&gt; &lt;container_name&gt;
</span><span>移除网络docker network rm &lt;network_name&gt;
</span></code></pre>
</div>
<div class="pagination">
<div class="pagination__title">
<span class="pagination__title-h">Thanks for reading! Read other posts?</span>
<hr />
</div>
<div class="pagination__buttons">
<span class="button previous">
<a href="https://blog.dich.ink/docker-learn-8/">
<span class="button__icon"></span>&nbsp;
<span class="button__text">Docker学习笔记(八)</span>
</a>
</span>
</div>
</div>
</div>
</div>
<footer class="footer">
<div class="footer__inner">
<div class="copyright">
<span>©
2024
Dichgrem</span>
<span class="copyright-theme">
<span class="copyright-theme-sep">:: </span>
Theme: <a href="https://github.com/pawroman/zola-theme-terminimal/">Terminimal</a> by pawroman
</span>
</div>
</div>
</footer>
<script async defer src="http://173.249.208.93:12345/tracker.js" data-website-id="cluckwxwg0005qf4n55m737sz"></script>
</div>
</body>
</html>

View File

@ -215,7 +215,7 @@
<code>git reset --hard origin/master</code></p> <code>git reset --hard origin/master</code></p>
<h2 id="xiu-gai-mo-ren-fen-zhi">修改默认分支</h2> <h2 id="xiu-gai-mo-ren-fen-zhi">修改默认分支</h2>
<p>git目前默认的主分支为 master和 github 默认分支 main 不同,这使得默认配置下 git 往往连接失败。可以通过下两种方法改变默认分支。在本地 git init 时将默认分支修改成main</p> <p>git目前默认的主分支为 master和 github 默认分支 main 不同,这使得默认配置下 git 往往连接失败。可以通过下两种方法改变默认分支。在本地 git init 时将默认分支修改成main</p>
<pre data-lang="csharp" style="background-color:#151515;color:#e8e8d3;" class="language-csharp "><code class="language-csharp" data-lang="csharp"><span>1. git --version //查看版本 <pre style="background-color:#151515;color:#e8e8d3;"><code><span>1. git --version //查看版本
</span><span>2. git config --global init.defaultBranch main //将默认分支修改成main </span><span>2. git config --global init.defaultBranch main //将默认分支修改成main
</span><span>3. git init //本地项目文件夹内创建.git文件夹 </span><span>3. git init //本地项目文件夹内创建.git文件夹
</span><span>4. git add . //添加到暂存区 </span><span>4. git add . //添加到暂存区

View File

@ -78,11 +78,11 @@
<div class="posts"> <div class="posts">
<div class="post on-list"> <div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.ink/docker-learn-5/">Docker学习笔记(五)</a></h1> <h1 class="post-title"><a href="https://blog.dich.ink/docker-learn-9/">Docker学习笔记(九)</a></h1>
<div class="post-meta-inline"> <div class="post-meta-inline">
<span class="post-date"> <span class="post-date">
2024-03-29 2024-04-02
</span> </span>
</div> </div>
@ -96,12 +96,12 @@
<div class="post-content"> <div class="post-content">
<p>前言 第三方映像是预构建的 Docker 容器映像,可在 Docker Hub 或其他容器注册表上使用。这些映像由个人或组织创建和维护,可用作容器化应用程序的起点</p> <p>前言 Docker CLI命令行界面是一个强大的工具允许您与 Docker 容器、映像、卷和网络进行交互和管理。它为用户提供了广泛的命令,用于在开发和生产工作流中创建、运行和管理 Docker 容器和其他 Docker 资源</p>
</div> </div>
<div> <div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji --> <!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.ink/docker-learn-5/"> <a class="read-more button" href="https://blog.dich.ink/docker-learn-9/">
<span class="button__text">Read more</span>&nbsp; <span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span> <span class="button__icon">&#8617;&#xFE0E;</span>
</a> </a>
@ -112,11 +112,11 @@
<div class="post on-list"> <div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.ink/docker-learn-4/">Docker学习笔记(四)</a></h1> <h1 class="post-title"><a href="https://blog.dich.ink/docker-learn-8/">Docker学习笔记(八)</a></h1>
<div class="post-meta-inline"> <div class="post-meta-inline">
<span class="post-date"> <span class="post-date">
2024-03-28 2024-04-01
</span> </span>
</div> </div>
@ -130,12 +130,12 @@
<div class="post-content"> <div class="post-content">
<p>前言 Docker 使您能够运行与主机操作系统分离的隔离代码段包括应用程序及其依赖项的容器。默认情况下容器是临时的这意味着容器中存储的任何数据一旦终止就会丢失。为了克服这个问题并跨容器生命周期保留数据Docker 提供了多种数据持久化方法</p> <p>前言 容器安全是实现和管理容器技术(如 Docker的关键方面。它包含一组实践、工具和技术旨在保护容器化应用程序及其运行的基础结构。在本节中我们将讨论一些关键的容器安全注意事项、最佳做法和建议</p>
</div> </div>
<div> <div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji --> <!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.ink/docker-learn-4/"> <a class="read-more button" href="https://blog.dich.ink/docker-learn-8/">
<span class="button__text">Read more</span>&nbsp; <span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span> <span class="button__icon">&#8617;&#xFE0E;</span>
</a> </a>
@ -146,11 +146,11 @@
<div class="post on-list"> <div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.ink/docker-learn-3/">Docker学习笔记(三)</a></h1> <h1 class="post-title"><a href="https://blog.dich.ink/docker-learn-7/">Docker学习笔记(七)</a></h1>
<div class="post-meta-inline"> <div class="post-meta-inline">
<span class="post-date"> <span class="post-date">
2024-03-27 2024-03-31
</span> </span>
</div> </div>
@ -164,12 +164,12 @@
<div class="post-content"> <div class="post-content">
<p>前言 Docker 是一个平台,可简化在轻量级、可移植容器中构建、打包和部署应用程序的过程。在本节中,我们将介绍 Docker 的基础知识、其组件以及入门所需的关键命令</p> <p>前言 容器镜像仓库是 Docker 容器镜像的集中存储和分发系统。它允许开发人员以这些映像的形式轻松共享和部署应用程序。容器镜像仓库在容器化应用程序的部署中起着至关重要的作用,因为它们提供了一种快速、可靠且安全的方式来跨各种生产环境分发容器映像</p>
</div> </div>
<div> <div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji --> <!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.ink/docker-learn-3/"> <a class="read-more button" href="https://blog.dich.ink/docker-learn-7/">
<span class="button__text">Read more</span>&nbsp; <span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span> <span class="button__icon">&#8617;&#xFE0E;</span>
</a> </a>
@ -180,11 +180,11 @@
<div class="post on-list"> <div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.ink/docker-learn-2/">Docker学习笔记(二)</a></h1> <h1 class="post-title"><a href="https://blog.dich.ink/docker-learn-6/">Docker学习笔记(六)</a></h1>
<div class="post-meta-inline"> <div class="post-meta-inline">
<span class="post-date"> <span class="post-date">
2024-03-26 2024-03-30
</span> </span>
</div> </div>
@ -198,12 +198,12 @@
<div class="post-content"> <div class="post-content">
<p>前言 了解支持 Docker 的核心技术将有助于更深入地了解 Docker 的工作原理,并更有效地使用该平台</p> <p>前言 容器映像是可执行包,其中包含运行应用程序所需的所有内容:代码、运行时、系统工具、库和设置。通过构建自定义映像,您可以在任何 Docker 支持的平台上无缝部署应用程序及其所有依赖项</p>
</div> </div>
<div> <div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji --> <!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.ink/docker-learn-2/"> <a class="read-more button" href="https://blog.dich.ink/docker-learn-6/">
<span class="button__text">Read more</span>&nbsp; <span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span> <span class="button__icon">&#8617;&#xFE0E;</span>
</a> </a>

View File

@ -78,11 +78,11 @@
<div class="posts"> <div class="posts">
<div class="post on-list"> <div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.ink/docker-learn-1/">Docker学习笔记(一)</a></h1> <h1 class="post-title"><a href="https://blog.dich.ink/docker-learn-5/">Docker学习笔记(五)</a></h1>
<div class="post-meta-inline"> <div class="post-meta-inline">
<span class="post-date"> <span class="post-date">
2024-03-25 2024-03-29
</span> </span>
</div> </div>
@ -96,12 +96,12 @@
<div class="post-content"> <div class="post-content">
<p>前言 Docker 是一个开源平台,通过将应用程序隔离到轻量级、可移植的容器中,自动执行应用程序的部署、扩展和管理。容器是独立的可执行单元,它封装了应用程序在各种环境中一致运行所需的所有必要依赖项、库和配置文件</p> <p>前言 第三方映像是预构建的 Docker 容器映像,可在 Docker Hub 或其他容器注册表上使用。这些映像由个人或组织创建和维护,可用作容器化应用程序的起点</p>
</div> </div>
<div> <div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji --> <!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.ink/docker-learn-1/"> <a class="read-more button" href="https://blog.dich.ink/docker-learn-5/">
<span class="button__text">Read more</span>&nbsp; <span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span> <span class="button__icon">&#8617;&#xFE0E;</span>
</a> </a>
@ -112,11 +112,11 @@
<div class="post on-list"> <div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.ink/junk-cleanup/">垃圾清理的艺术</a></h1> <h1 class="post-title"><a href="https://blog.dich.ink/docker-learn-4/">Docker学习笔记(四)</a></h1>
<div class="post-meta-inline"> <div class="post-meta-inline">
<span class="post-date"> <span class="post-date">
2024-03-19 2024-03-28
</span> </span>
</div> </div>
@ -124,18 +124,18 @@
<span class="post-tags-inline"> <span class="post-tags-inline">
:: tags:&nbsp; :: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/junk-cleanup/">#Junk-cleanup</a></span> <a class="post-tag" href="https://blog.dich.ink/tags/docker/">#Docker</a></span>
<div class="post-content"> <div class="post-content">
<p>前言 在从前的机械硬盘时代,由于硬盘空间小,且没有时常清理垃圾文件,常常导致硬盘空间严重不足;特别是在以 Windows 平台为代表的 C/D盘 体系下。那么,我们常说的垃圾清理,释放硬盘空间,到底是在清理什么?哪些文件可以被清理?</p> <p>前言 Docker 使您能够运行与主机操作系统分离的隔离代码段包括应用程序及其依赖项的容器。默认情况下容器是临时的这意味着容器中存储的任何数据一旦终止就会丢失。为了克服这个问题并跨容器生命周期保留数据Docker 提供了多种数据持久化方法。</p>
</div> </div>
<div> <div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji --> <!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.ink/junk-cleanup/"> <a class="read-more button" href="https://blog.dich.ink/docker-learn-4/">
<span class="button__text">Read more</span>&nbsp; <span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span> <span class="button__icon">&#8617;&#xFE0E;</span>
</a> </a>
@ -146,11 +146,11 @@
<div class="post on-list"> <div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.ink/git/">Git使用简明手册</a></h1> <h1 class="post-title"><a href="https://blog.dich.ink/docker-learn-3/">Docker学习笔记(三)</a></h1>
<div class="post-meta-inline"> <div class="post-meta-inline">
<span class="post-date"> <span class="post-date">
2024-03-15 2024-03-27
</span> </span>
</div> </div>
@ -158,18 +158,18 @@
<span class="post-tags-inline"> <span class="post-tags-inline">
:: tags:&nbsp; :: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/git/">#Git</a></span> <a class="post-tag" href="https://blog.dich.ink/tags/docker/">#Docker</a></span>
<div class="post-content"> <div class="post-content">
<p>前言 Git作为现代软件开发中不可或缺的版本控制工具常常让初学者感到困惑。本文旨在介绍 Git 的全流程安装和基本使用,希望能够帮助新手更轻松地理解和掌握 Git 的基本概念和操作</p> <p>前言 Docker 是一个平台,可简化在轻量级、可移植容器中构建、打包和部署应用程序的过程。在本节中,我们将介绍 Docker 的基础知识、其组件以及入门所需的关键命令</p>
</div> </div>
<div> <div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji --> <!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.ink/git/"> <a class="read-more button" href="https://blog.dich.ink/docker-learn-3/">
<span class="button__text">Read more</span>&nbsp; <span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span> <span class="button__icon">&#8617;&#xFE0E;</span>
</a> </a>
@ -180,11 +180,11 @@
<div class="post on-list"> <div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.ink/talk-bios-uefi-mbr-gpt-grub/">BIOS-UEFI-MBR-GPT-GRUB</a></h1> <h1 class="post-title"><a href="https://blog.dich.ink/docker-learn-2/">Docker学习笔记(二)</a></h1>
<div class="post-meta-inline"> <div class="post-meta-inline">
<span class="post-date"> <span class="post-date">
2024-03-15 2024-03-26
</span> </span>
</div> </div>
@ -192,20 +192,18 @@
<span class="post-tags-inline"> <span class="post-tags-inline">
:: tags:&nbsp; :: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/bios/">#BIOS</a>&nbsp; <a class="post-tag" href="https://blog.dich.ink/tags/docker/">#Docker</a></span>
<a class="post-tag" href="https://blog.dich.ink/tags/grub/">#GRUB</a>&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/uefi/">#UEFI</a></span>
<div class="post-content"> <div class="post-content">
<p>前言 在计算机领域系统引导和磁盘分区是至关重要的。本文将介绍BIOS与UEFIMBR与GPT以及它们之间的异同点。此外我们还会讨论与这些概念密切相关的引导加载程序——GRUB</p> <p>前言 了解支持 Docker 的核心技术将有助于更深入地了解 Docker 的工作原理,并更有效地使用该平台</p>
</div> </div>
<div> <div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji --> <!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.ink/talk-bios-uefi-mbr-gpt-grub/"> <a class="read-more button" href="https://blog.dich.ink/docker-learn-2/">
<span class="button__text">Read more</span>&nbsp; <span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span> <span class="button__icon">&#8617;&#xFE0E;</span>
</a> </a>

View File

@ -78,11 +78,11 @@
<div class="posts"> <div class="posts">
<div class="post on-list"> <div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.ink/terminal-console-shell/">TerminalConsole and Shell</a></h1> <h1 class="post-title"><a href="https://blog.dich.ink/docker-learn-1/">Docker学习笔记(一)</a></h1>
<div class="post-meta-inline"> <div class="post-meta-inline">
<span class="post-date"> <span class="post-date">
2024-03-12 2024-03-25
</span> </span>
</div> </div>
@ -90,18 +90,18 @@
<span class="post-tags-inline"> <span class="post-tags-inline">
:: tags:&nbsp; :: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/linux/">#linux</a></span> <a class="post-tag" href="https://blog.dich.ink/tags/docker/">#Docker</a></span>
<div class="post-content"> <div class="post-content">
<p>前言 在linux的学习过程中我们常常遇到诸如 TerminalConsolebash,zsh,shell,tty 等概念,这些概念常常被混淆,似乎都和命令行相关。本文从历史角度出发介绍它们的前世今生</p> <p>前言 Docker 是一个开源平台,通过将应用程序隔离到轻量级、可移植的容器中,自动执行应用程序的部署、扩展和管理。容器是独立的可执行单元,它封装了应用程序在各种环境中一致运行所需的所有必要依赖项、库和配置文件</p>
</div> </div>
<div> <div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji --> <!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.ink/terminal-console-shell/"> <a class="read-more button" href="https://blog.dich.ink/docker-learn-1/">
<span class="button__text">Read more</span>&nbsp; <span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span> <span class="button__icon">&#8617;&#xFE0E;</span>
</a> </a>
@ -112,11 +112,11 @@
<div class="post on-list"> <div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.ink/zola-blog/">Personal Blog</a></h1> <h1 class="post-title"><a href="https://blog.dich.ink/junk-cleanup/">垃圾清理的艺术</a></h1>
<div class="post-meta-inline"> <div class="post-meta-inline">
<span class="post-date"> <span class="post-date">
2024-03-12 2024-03-19
</span> </span>
</div> </div>
@ -124,19 +124,18 @@
<span class="post-tags-inline"> <span class="post-tags-inline">
:: tags:&nbsp; :: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/blog/">#Blog</a>&nbsp; <a class="post-tag" href="https://blog.dich.ink/tags/junk-cleanup/">#Junk-cleanup</a></span>
<a class="post-tag" href="https://blog.dich.ink/tags/zola/">#Zola</a></span>
<div class="post-content"> <div class="post-content">
<p>前言 个人博客的搭建有诸多框架的选择。本文以Zola框架为例介绍如何部署该静态站点并将其托管到Paas平台上。</p> <p>前言 在从前的机械硬盘时代,由于硬盘空间小,且没有时常清理垃圾文件,常常导致硬盘空间严重不足;特别是在以 Windows 平台为代表的 C/D盘 体系下。那么,我们常说的垃圾清理,释放硬盘空间,到底是在清理什么?哪些文件可以被清理?</p>
</div> </div>
<div> <div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji --> <!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.ink/zola-blog/"> <a class="read-more button" href="https://blog.dich.ink/junk-cleanup/">
<span class="button__text">Read more</span>&nbsp; <span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span> <span class="button__icon">&#8617;&#xFE0E;</span>
</a> </a>
@ -147,11 +146,11 @@
<div class="post on-list"> <div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.ink/opensourcesoftware-licenses/">开源软件与协议</a></h1> <h1 class="post-title"><a href="https://blog.dich.ink/git/">Git使用简明手册</a></h1>
<div class="post-meta-inline"> <div class="post-meta-inline">
<span class="post-date"> <span class="post-date">
2024-03-04 2024-03-15
</span> </span>
</div> </div>
@ -159,20 +158,18 @@
<span class="post-tags-inline"> <span class="post-tags-inline">
:: tags:&nbsp; :: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/licenses/">#licenses</a>&nbsp; <a class="post-tag" href="https://blog.dich.ink/tags/git/">#Git</a></span>
<a class="post-tag" href="https://blog.dich.ink/tags/open/">#open</a>&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/software/">#software</a></span>
<div class="post-content"> <div class="post-content">
<p>前言 本文旨在介绍开源软件许可证,这些许可证规定了使用、修改和分发开源软件的条件。通过了解不同类型的开源许可证及其特点,读者将能够更好地理解在开发和使用开源软件时的法律和道德责任</p> <p>前言 Git作为现代软件开发中不可或缺的版本控制工具常常让初学者感到困惑。本文旨在介绍 Git 的全流程安装和基本使用,希望能够帮助新手更轻松地理解和掌握 Git 的基本概念和操作</p>
</div> </div>
<div> <div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji --> <!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.ink/opensourcesoftware-licenses/"> <a class="read-more button" href="https://blog.dich.ink/git/">
<span class="button__text">Read more</span>&nbsp; <span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span> <span class="button__icon">&#8617;&#xFE0E;</span>
</a> </a>
@ -183,11 +180,11 @@
<div class="post on-list"> <div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.ink/routing/">路由器原理与组网</a></h1> <h1 class="post-title"><a href="https://blog.dich.ink/talk-bios-uefi-mbr-gpt-grub/">BIOS-UEFI-MBR-GPT-GRUB</a></h1>
<div class="post-meta-inline"> <div class="post-meta-inline">
<span class="post-date"> <span class="post-date">
2024-02-19 2024-03-15
</span> </span>
</div> </div>
@ -195,19 +192,20 @@
<span class="post-tags-inline"> <span class="post-tags-inline">
:: tags:&nbsp; :: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/wifi/">#Wifi</a>&nbsp; <a class="post-tag" href="https://blog.dich.ink/tags/bios/">#BIOS</a>&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/route/">#route</a></span> <a class="post-tag" href="https://blog.dich.ink/tags/grub/">#GRUB</a>&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/uefi/">#UEFI</a></span>
<div class="post-content"> <div class="post-content">
<p>前言 所谓无线路由,就是具备无线覆盖的路由器,即我们常用的有天线的家用路由器。而家庭组网中,除了选择一个最合适的上网方案,一部好的路由器也是非常重要;那么,如何科学的选购路由器呢?</p> <p>前言 在计算机领域系统引导和磁盘分区是至关重要的。本文将介绍BIOS与UEFIMBR与GPT以及它们之间的异同点。此外我们还会讨论与这些概念密切相关的引导加载程序——GRUB。</p>
</div> </div>
<div> <div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji --> <!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.ink/routing/"> <a class="read-more button" href="https://blog.dich.ink/talk-bios-uefi-mbr-gpt-grub/">
<span class="button__text">Read more</span>&nbsp; <span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span> <span class="button__icon">&#8617;&#xFE0E;</span>
</a> </a>

View File

@ -78,11 +78,11 @@
<div class="posts"> <div class="posts">
<div class="post on-list"> <div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.ink/local-isps-to-cn-report/">MJJ入门国内至国际骨干ISP线路整理</a></h1> <h1 class="post-title"><a href="https://blog.dich.ink/terminal-console-shell/">TerminalConsole and Shell</a></h1>
<div class="post-meta-inline"> <div class="post-meta-inline">
<span class="post-date"> <span class="post-date">
2024-02-10 2024-03-12
</span> </span>
</div> </div>
@ -90,19 +90,18 @@
<span class="post-tags-inline"> <span class="post-tags-inline">
:: tags:&nbsp; :: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/isp/">#ISP</a>&nbsp; <a class="post-tag" href="https://blog.dich.ink/tags/linux/">#linux</a></span>
<a class="post-tag" href="https://blog.dich.ink/tags/net/">#Net</a></span>
<div class="post-content"> <div class="post-content">
<p>前言 本文主要探讨的是IPv4网络国际出口线路的质量分析以及各大ISP的介绍</p> <p>前言 在linux的学习过程中我们常常遇到诸如 TerminalConsolebash,zsh,shell,tty 等概念,这些概念常常被混淆,似乎都和命令行相关。本文从历史角度出发介绍它们的前世今生</p>
</div> </div>
<div> <div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji --> <!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.ink/local-isps-to-cn-report/"> <a class="read-more button" href="https://blog.dich.ink/terminal-console-shell/">
<span class="button__text">Read more</span>&nbsp; <span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span> <span class="button__icon">&#8617;&#xFE0E;</span>
</a> </a>
@ -113,11 +112,11 @@
<div class="post on-list"> <div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.ink/podcast-use/">播客收听指北</a></h1> <h1 class="post-title"><a href="https://blog.dich.ink/zola-blog/">Personal Blog</a></h1>
<div class="post-meta-inline"> <div class="post-meta-inline">
<span class="post-date"> <span class="post-date">
2024-01-20 2024-03-12
</span> </span>
</div> </div>
@ -125,18 +124,19 @@
<span class="post-tags-inline"> <span class="post-tags-inline">
:: tags:&nbsp; :: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/podcast/">#Podcast</a></span> <a class="post-tag" href="https://blog.dich.ink/tags/blog/">#Blog</a>&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/zola/">#Zola</a></span>
<div class="post-content"> <div class="post-content">
<p>前言 讲起播客,许多人第一反应是喜马拉雅,但其实播客的订阅和收听有许多种方式。本文带你了解订阅播客的各种方式,并告诉你市面上有哪些不错的播客客户端可供选择</p> <p>前言 个人博客的搭建有诸多框架的选择。本文以Zola框架为例介绍如何部署该静态站点并将其托管到Paas平台上</p>
</div> </div>
<div> <div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji --> <!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.ink/podcast-use/"> <a class="read-more button" href="https://blog.dich.ink/zola-blog/">
<span class="button__text">Read more</span>&nbsp; <span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span> <span class="button__icon">&#8617;&#xFE0E;</span>
</a> </a>
@ -147,11 +147,11 @@
<div class="post on-list"> <div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.ink/rss-read/">RSS阅读指南</a></h1> <h1 class="post-title"><a href="https://blog.dich.ink/opensourcesoftware-licenses/">开源软件与协议</a></h1>
<div class="post-meta-inline"> <div class="post-meta-inline">
<span class="post-date"> <span class="post-date">
2024-01-20 2024-03-04
</span> </span>
</div> </div>
@ -159,18 +159,20 @@
<span class="post-tags-inline"> <span class="post-tags-inline">
:: tags:&nbsp; :: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/rss/">#RSS</a></span> <a class="post-tag" href="https://blog.dich.ink/tags/licenses/">#licenses</a>&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/open/">#open</a>&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/software/">#software</a></span>
<div class="post-content"> <div class="post-content">
<p>前言 RSS 提供了一种数据格式,以 XML可扩展标记语言的形式组织信息包括文章标题、摘要、链接和发布日期等。这些信息形成了所谓的“订阅源”Feed用户可以使用RSS阅读器Feed Reader来订阅这些源</p> <p>前言 本文旨在介绍开源软件许可证,这些许可证规定了使用、修改和分发开源软件的条件。通过了解不同类型的开源许可证及其特点,读者将能够更好地理解在开发和使用开源软件时的法律和道德责任</p>
</div> </div>
<div> <div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji --> <!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.ink/rss-read/"> <a class="read-more button" href="https://blog.dich.ink/opensourcesoftware-licenses/">
<span class="button__text">Read more</span>&nbsp; <span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span> <span class="button__icon">&#8617;&#xFE0E;</span>
</a> </a>
@ -181,11 +183,11 @@
<div class="post on-list"> <div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.ink/chatogpt/">如何高效地向 ChatGPT 提问</a></h1> <h1 class="post-title"><a href="https://blog.dich.ink/routing/">路由器原理与组网</a></h1>
<div class="post-meta-inline"> <div class="post-meta-inline">
<span class="post-date"> <span class="post-date">
2024-01-07 2024-02-19
</span> </span>
</div> </div>
@ -193,18 +195,19 @@
<span class="post-tags-inline"> <span class="post-tags-inline">
:: tags:&nbsp; :: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/prompt/">#Prompt</a></span> <a class="post-tag" href="https://blog.dich.ink/tags/wifi/">#Wifi</a>&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/route/">#route</a></span>
<div class="post-content"> <div class="post-content">
<p>前言 本文翻译自《The Art of Asking ChatGPT for High-Quality Answers A Complete Guide to Prompt Engineering Techniques》</p> <p>前言 所谓无线路由,就是具备无线覆盖的路由器,即我们常用的有天线的家用路由器。而家庭组网中,除了选择一个最合适的上网方案,一部好的路由器也是非常重要;那么,如何科学的选购路由器呢?</p>
</div> </div>
<div> <div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji --> <!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.ink/chatogpt/"> <a class="read-more button" href="https://blog.dich.ink/routing/">
<span class="button__text">Read more</span>&nbsp; <span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span> <span class="button__icon">&#8617;&#xFE0E;</span>
</a> </a>

View File

@ -78,7 +78,110 @@
<div class="posts"> <div class="posts">
<div class="post on-list"> <div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.ink/searching/">搜索引擎与爬虫</a></h1> <h1 class="post-title"><a href="https://blog.dich.ink/local-isps-to-cn-report/">MJJ入门国内至国际骨干ISP线路整理</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2024-02-10
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/isp/">#ISP</a>&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/net/">#Net</a></span>
<div class="post-content">
<p>前言 本文主要探讨的是IPv4网络国际出口线路的质量分析以及各大ISP的介绍。</p>
</div>
<div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.ink/local-isps-to-cn-report/">
<span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span>
</a>
</div>
</div>
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.ink/podcast-use/">播客收听指北</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2024-01-20
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/podcast/">#Podcast</a></span>
<div class="post-content">
<p>前言 讲起播客,许多人第一反应是喜马拉雅,但其实播客的订阅和收听有许多种方式。本文带你了解订阅播客的各种方式,并告诉你市面上有哪些不错的播客客户端可供选择。</p>
</div>
<div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.ink/podcast-use/">
<span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span>
</a>
</div>
</div>
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.ink/rss-read/">RSS阅读指南</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2024-01-20
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/rss/">#RSS</a></span>
<div class="post-content">
<p>前言 RSS 提供了一种数据格式,以 XML可扩展标记语言的形式组织信息包括文章标题、摘要、链接和发布日期等。这些信息形成了所谓的“订阅源”Feed用户可以使用RSS阅读器Feed Reader来订阅这些源。</p>
</div>
<div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.ink/rss-read/">
<span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span>
</a>
</div>
</div>
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.ink/chatogpt/">如何高效地向 ChatGPT 提问</a></h1>
<div class="post-meta-inline"> <div class="post-meta-inline">
<span class="post-date"> <span class="post-date">
@ -90,122 +193,18 @@
<span class="post-tags-inline"> <span class="post-tags-inline">
:: tags:&nbsp; :: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/searching/">#Searching</a></span> <a class="post-tag" href="https://blog.dich.ink/tags/prompt/">#Prompt</a></span>
<div class="post-content"> <div class="post-content">
<p>前言 搜索引擎原理可以简单分为三个过程:爬行,索引,排名。</p> <p>前言 本文翻译自《The Art of Asking ChatGPT for High-Quality Answers A Complete Guide to Prompt Engineering Techniques》</p>
</div> </div>
<div> <div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji --> <!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.ink/searching/"> <a class="read-more button" href="https://blog.dich.ink/chatogpt/">
<span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span>
</a>
</div>
</div>
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.ink/open-source-cross-platform-softs/">常用跨平台开源软件</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2023-12-25
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/open-source/">#Open-Source</a>&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/soft/">#soft</a></span>
<div class="post-content">
<p>前言 本文旨在介绍一些常用的跨平台开源软件,涵盖了多个领域,包括办公、开发工具、多媒体处理等。这些软件不仅在功能上具有优势,而且秉承着开放、自由的精神,是上上之选。</p>
</div>
<div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.ink/open-source-cross-platform-softs/">
<span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span>
</a>
</div>
</div>
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.ink/about-working/">应届生工作指南</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2023-12-24
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/working/">#working</a></span>
<div class="post-content">
<p>前言 什么是“五险一金”?工资到底由那些部分组成?劳动合同怎么签?不仅仅是应届生,很多工作了几年的职场人,也不十分清楚。因此,在这里笔者打算帮助大家彻底把这些事情搞明白。</p>
</div>
<div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.ink/about-working/">
<span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span>
</a>
</div>
</div>
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.ink/how-email-works/">电子邮件是如何工作的</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2023-12-24
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/mail/">#Mail</a>&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/smtp/">#SMTP</a></span>
<div class="post-content">
<p>前言 在互联网的日常使用中,电子邮件作为一项基础服务扮演着重要的角色。尽管在过去几十年里出现了各种新型的通讯方式,但电子邮件仍然保持着其不可替代的地位。了解电子邮件的工作原理,有助于更好地理解这一基础服务是如何运作的。</p>
</div>
<div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.ink/how-email-works/">
<span class="button__text">Read more</span>&nbsp; <span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span> <span class="button__icon">&#8617;&#xFE0E;</span>
</a> </a>

View File

@ -78,11 +78,11 @@
<div class="posts"> <div class="posts">
<div class="post on-list"> <div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.ink/mechrev-keyboard/">机械革命键盘失灵拯救记</a></h1> <h1 class="post-title"><a href="https://blog.dich.ink/searching/">搜索引擎与爬虫</a></h1>
<div class="post-meta-inline"> <div class="post-meta-inline">
<span class="post-date"> <span class="post-date">
2023-09-04 2024-01-07
</span> </span>
</div> </div>
@ -90,18 +90,18 @@
<span class="post-tags-inline"> <span class="post-tags-inline">
:: tags:&nbsp; :: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/keyboard/">#keyboard</a></span> <a class="post-tag" href="https://blog.dich.ink/tags/searching/">#Searching</a></span>
<div class="post-content"> <div class="post-content">
<p>前言 机械革命作为一款极高性价比的笔记本,其优惠的力度和问题不断的故障让玩家们爱恨交织;作者在其上安装 Linux 时遇到了键盘失灵的问题,为了避免更多人踩坑,故写本文</p> <p>前言 搜索引擎原理可以简单分为三个过程:爬行,索引,排名</p>
</div> </div>
<div> <div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji --> <!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.ink/mechrev-keyboard/"> <a class="read-more button" href="https://blog.dich.ink/searching/">
<span class="button__text">Read more</span>&nbsp; <span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span> <span class="button__icon">&#8617;&#xFE0E;</span>
</a> </a>
@ -112,11 +112,11 @@
<div class="post on-list"> <div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.ink/windows-secondary-menu-recovery-and-settings-boot-startup/">Windows二级菜单恢复及设置开机启动及彻底关闭更新</a></h1> <h1 class="post-title"><a href="https://blog.dich.ink/open-source-cross-platform-softs/">常用跨平台开源软件</a></h1>
<div class="post-meta-inline"> <div class="post-meta-inline">
<span class="post-date"> <span class="post-date">
2023-08-26 2023-12-25
</span> </span>
</div> </div>
@ -124,18 +124,19 @@
<span class="post-tags-inline"> <span class="post-tags-inline">
:: tags:&nbsp; :: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/windows11/">#Windows11</a></span> <a class="post-tag" href="https://blog.dich.ink/tags/open-source/">#Open-Source</a>&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/soft/">#soft</a></span>
<div class="post-content"> <div class="post-content">
<p>前言 Windows操作系统作为全球最为普及的桌面操作系统之一其用户界面的设计非常经典而win11中的二级菜单令人感到无语本文教你回到一级菜单</p> <p>前言 本文旨在介绍一些常用的跨平台开源软件,涵盖了多个领域,包括办公、开发工具、多媒体处理等。这些软件不仅在功能上具有优势,而且秉承着开放、自由的精神,是上上之选</p>
</div> </div>
<div> <div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji --> <!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.ink/windows-secondary-menu-recovery-and-settings-boot-startup/"> <a class="read-more button" href="https://blog.dich.ink/open-source-cross-platform-softs/">
<span class="button__text">Read more</span>&nbsp; <span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span> <span class="button__icon">&#8617;&#xFE0E;</span>
</a> </a>
@ -146,11 +147,11 @@
<div class="post on-list"> <div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.ink/accurate-pronunciation/">常见发音错误术语集合</a></h1> <h1 class="post-title"><a href="https://blog.dich.ink/about-working/">应届生工作指南</a></h1>
<div class="post-meta-inline"> <div class="post-meta-inline">
<span class="post-date"> <span class="post-date">
2023-08-25 2023-12-24
</span> </span>
</div> </div>
@ -158,18 +159,18 @@
<span class="post-tags-inline"> <span class="post-tags-inline">
:: tags:&nbsp; :: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/pronunciation/">#pronunciation</a></span> <a class="post-tag" href="https://blog.dich.ink/tags/working/">#working</a></span>
<div class="post-content"> <div class="post-content">
<p>前言 中文和英语发音习惯不同,容易引起误解。本文旨在帮助您准确发音常见的科技术语,欢迎随时补充</p> <p>前言 什么是“五险一金”?工资到底由那些部分组成?劳动合同怎么签?不仅仅是应届生,很多工作了几年的职场人,也不十分清楚。因此,在这里笔者打算帮助大家彻底把这些事情搞明白</p>
</div> </div>
<div> <div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji --> <!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.ink/accurate-pronunciation/"> <a class="read-more button" href="https://blog.dich.ink/about-working/">
<span class="button__text">Read more</span>&nbsp; <span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span> <span class="button__icon">&#8617;&#xFE0E;</span>
</a> </a>
@ -180,11 +181,11 @@
<div class="post on-list"> <div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.ink/calling-cards/">流量卡购买与套路</a></h1> <h1 class="post-title"><a href="https://blog.dich.ink/how-email-works/">电子邮件是如何工作的</a></h1>
<div class="post-meta-inline"> <div class="post-meta-inline">
<span class="post-date"> <span class="post-date">
2023-08-24 2023-12-24
</span> </span>
</div> </div>
@ -192,18 +193,19 @@
<span class="post-tags-inline"> <span class="post-tags-inline">
:: tags:&nbsp; :: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/calling-cards/">#Calling-cards</a></span> <a class="post-tag" href="https://blog.dich.ink/tags/mail/">#Mail</a>&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/smtp/">#SMTP</a></span>
<div class="post-content"> <div class="post-content">
<p>前言 由于临近升学,校园网不尽人意,因此许多小伙伴有了买一张流量卡的计划。本文以三大运营商为例,说明常见流量卡的套路与选择</p> <p>前言 在互联网的日常使用中,电子邮件作为一项基础服务扮演着重要的角色。尽管在过去几十年里出现了各种新型的通讯方式,但电子邮件仍然保持着其不可替代的地位。了解电子邮件的工作原理,有助于更好地理解这一基础服务是如何运作的</p>
</div> </div>
<div> <div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji --> <!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.ink/calling-cards/"> <a class="read-more button" href="https://blog.dich.ink/how-email-works/">
<span class="button__text">Read more</span>&nbsp; <span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span> <span class="button__icon">&#8617;&#xFE0E;</span>
</a> </a>

View File

@ -78,11 +78,11 @@
<div class="posts"> <div class="posts">
<div class="post on-list"> <div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.ink/kgnl/">快过年了笑话大全</a></h1> <h1 class="post-title"><a href="https://blog.dich.ink/mechrev-keyboard/">机械革命键盘失灵拯救记</a></h1>
<div class="post-meta-inline"> <div class="post-meta-inline">
<span class="post-date"> <span class="post-date">
2023-08-23 2023-09-04
</span> </span>
</div> </div>
@ -90,18 +90,120 @@
<span class="post-tags-inline"> <span class="post-tags-inline">
:: tags:&nbsp; :: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/kgnl/">#KGNL</a></span> <a class="post-tag" href="https://blog.dich.ink/tags/keyboard/">#keyboard</a></span>
<div class="post-content"> <div class="post-content">
<p>前言 快过年了系列笑话常常于过年期间在各大平台传播反应了各技术人士的爱好与工作。本文收集了24个该系列的笑话欢迎补充</p> <p>前言 机械革命作为一款极高性价比的笔记本,其优惠的力度和问题不断的故障让玩家们爱恨交织;作者在其上安装 Linux 时遇到了键盘失灵的问题,为了避免更多人踩坑,故写本文</p>
</div> </div>
<div> <div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji --> <!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.ink/kgnl/"> <a class="read-more button" href="https://blog.dich.ink/mechrev-keyboard/">
<span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span>
</a>
</div>
</div>
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.ink/windows-secondary-menu-recovery-and-settings-boot-startup/">Windows二级菜单恢复及设置开机启动及彻底关闭更新</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2023-08-26
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/windows11/">#Windows11</a></span>
<div class="post-content">
<p>前言 Windows操作系统作为全球最为普及的桌面操作系统之一其用户界面的设计非常经典而win11中的二级菜单令人感到无语本文教你回到一级菜单。</p>
</div>
<div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.ink/windows-secondary-menu-recovery-and-settings-boot-startup/">
<span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span>
</a>
</div>
</div>
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.ink/accurate-pronunciation/">常见发音错误术语集合</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2023-08-25
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/pronunciation/">#pronunciation</a></span>
<div class="post-content">
<p>前言 中文和英语发音习惯不同,容易引起误解。本文旨在帮助您准确发音常见的科技术语,欢迎随时补充。</p>
</div>
<div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.ink/accurate-pronunciation/">
<span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span>
</a>
</div>
</div>
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.ink/calling-cards/">流量卡购买与套路</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2023-08-24
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/calling-cards/">#Calling-cards</a></span>
<div class="post-content">
<p>前言 由于临近升学,校园网不尽人意,因此许多小伙伴有了买一张流量卡的计划。本文以三大运营商为例,说明常见流量卡的套路与选择。</p>
</div>
<div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.ink/calling-cards/">
<span class="button__text">Read more</span>&nbsp; <span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span> <span class="button__icon">&#8617;&#xFE0E;</span>
</a> </a>
@ -117,6 +219,13 @@
<span class="button__text">Newer posts</span> <span class="button__text">Newer posts</span>
</a> </a>
</span> </span>
<span class="button next">
<a href="https://blog.dich.ink/page/8/">
<span class="button__text">Older posts</span>&nbsp;
<span class="button__icon"></span>
</a>
</span>
</div> </div>
</div> </div>
</div> </div>

145
public/page/8/index.html Normal file
View File

@ -0,0 +1,145 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Dich&#x27;blog</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=5">
<meta name="robots" content="noodp"/>
<link rel="stylesheet" href="https://blog.dich.ink/style.css">
<link rel="stylesheet" href="https://blog.dich.ink/color/blue.css">
<link rel="stylesheet" href="https://blog.dich.ink/color/background_dark.css">
<link rel="stylesheet" href="https://blog.dich.ink/font-hack-subset.css">
<meta name="description" content="用电子罗盘,转赛博核桃,勘电磁风水,寻网络龙脉">
<meta property="og:description" content="用电子罗盘,转赛博核桃,勘电磁风水,寻网络龙脉">
<meta property="og:title" content="Dich'blog">
<meta property="og:type" content="website">
<meta property="og:url" content="https://blog.dich.ink/">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:description" content="用电子罗盘,转赛博核桃,勘电磁风水,寻网络龙脉">
<meta name="twitter:title" content="Dich'blog">
<meta property="twitter:domain" content="blog.dich.ink">
<meta property="twitter:url" content="https://blog.dich.ink/">
<link rel="alternate" type="application/atom+xml" title="RSS" href="https://blog.dich.ink/atom.xml">
</head>
<body class="">
<div class="container">
<header class="header">
<div class="header__inner">
<div class="header__logo">
<a href="https://blog.dich.ink" style="text-decoration: none;">
<div class="logo">
Dich&#x27;blog
</div>
</a>
</div>
</div>
<nav class="menu">
<ul class="menu__inner">
<li class="active"><a href="https://blog.dich.ink">blog</a></li>
<li><a href="https://blog.dich.ink/tags">tags</a></li>
<li><a href="https://blog.dich.ink/archive">archive</a></li>
<li><a href="https://blog.dich.ink/about">about me</a></li>
<li><a href="https://blog.dich.ink/links">links</a></li>
<li><a href="https://github.com/Dichgrem" target="_blank" rel="noopener noreferrer">github</a></li>
</ul>
</nav>
</header>
<div class="content">
<div class="posts">
<div class="post on-list">
<h1 class="post-title"><a href="https://blog.dich.ink/kgnl/">快过年了笑话大全</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2023-08-23
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.ink/tags/kgnl/">#KGNL</a></span>
<div class="post-content">
<p>前言 快过年了系列笑话常常于过年期间在各大平台传播反应了各技术人士的爱好与工作。本文收集了24个该系列的笑话欢迎补充。</p>
</div>
<div>
<!-- &#xFE0E; -- force text style - some devices render this as emoji -->
<a class="read-more button" href="https://blog.dich.ink/kgnl/">
<span class="button__text">Read more</span>&nbsp;
<span class="button__icon">&#8617;&#xFE0E;</span>
</a>
</div>
</div>
<div class="pagination">
<div class="pagination__buttons">
<span class="button previous">
<a href="https://blog.dich.ink/page/7/">
<span class="button__icon"></span>&nbsp;
<span class="button__text">Newer posts</span>
</a>
</span>
</div>
</div>
</div>
</div>
<footer class="footer">
<div class="footer__inner">
<div class="copyright">
<span>©
2024
Dichgrem</span>
<span class="copyright-theme">
<span class="copyright-theme-sep">:: </span>
Theme: <a href="https://github.com/pawroman/zola-theme-terminimal/">Terminimal</a> by pawroman
</span>
</div>
</div>
</footer>
<script async defer src="http://173.249.208.93:12345/tracker.js" data-website-id="cluckwxwg0005qf4n55m737sz"></script>
</div>
</body>
</html>

View File

@ -45,6 +45,22 @@
<loc>https://blog.dich.ink/docker-learn-5/</loc> <loc>https://blog.dich.ink/docker-learn-5/</loc>
<lastmod>2024-03-29</lastmod> <lastmod>2024-03-29</lastmod>
</url> </url>
<url>
<loc>https://blog.dich.ink/docker-learn-6/</loc>
<lastmod>2024-03-30</lastmod>
</url>
<url>
<loc>https://blog.dich.ink/docker-learn-7/</loc>
<lastmod>2024-03-31</lastmod>
</url>
<url>
<loc>https://blog.dich.ink/docker-learn-8/</loc>
<lastmod>2024-04-01</lastmod>
</url>
<url>
<loc>https://blog.dich.ink/docker-learn-9/</loc>
<lastmod>2024-04-02</lastmod>
</url>
<url> <url>
<loc>https://blog.dich.ink/git/</loc> <loc>https://blog.dich.ink/git/</loc>
<lastmod>2024-03-15</lastmod> <lastmod>2024-03-15</lastmod>
@ -119,6 +135,9 @@
<url> <url>
<loc>https://blog.dich.ink/page/7/</loc> <loc>https://blog.dich.ink/page/7/</loc>
</url> </url>
<url>
<loc>https://blog.dich.ink/page/8/</loc>
</url>
<url> <url>
<loc>https://blog.dich.ink/podcast-use/</loc> <loc>https://blog.dich.ink/podcast-use/</loc>
<lastmod>2024-01-20</lastmod> <lastmod>2024-01-20</lastmod>

View File

@ -81,7 +81,7 @@ Dich&#x27;blog</title>
<div class="post"> <div class="post">
<h1 class="post-title"> <h1 class="post-title">
tag: #Docker tag: #Docker
(5 posts) (9 posts)
</h1> </h1>
<a href="https://blog.dich.ink/tags"> <a href="https://blog.dich.ink/tags">
@ -90,6 +90,46 @@ Dich&#x27;blog</title>
<ul><li class="post-list"> <ul><li class="post-list">
<a href="https://blog.dich.ink/docker-learn-9/">
<span class="post-date">2024-04-02</span>
:: <span class="post-list-title">Docker学习笔记(九)</span></a>
<span class="post-tags-inline">
::
<a class="post-tag" href="https://blog.dich.ink/tags/docker/">#Docker</a></span>
</li>
<li class="post-list">
<a href="https://blog.dich.ink/docker-learn-8/">
<span class="post-date">2024-04-01</span>
:: <span class="post-list-title">Docker学习笔记(八)</span></a>
<span class="post-tags-inline">
::
<a class="post-tag" href="https://blog.dich.ink/tags/docker/">#Docker</a></span>
</li>
<li class="post-list">
<a href="https://blog.dich.ink/docker-learn-7/">
<span class="post-date">2024-03-31</span>
:: <span class="post-list-title">Docker学习笔记(七)</span></a>
<span class="post-tags-inline">
::
<a class="post-tag" href="https://blog.dich.ink/tags/docker/">#Docker</a></span>
</li>
<li class="post-list">
<a href="https://blog.dich.ink/docker-learn-6/">
<span class="post-date">2024-03-30</span>
:: <span class="post-list-title">Docker学习笔记(六)</span></a>
<span class="post-tags-inline">
::
<a class="post-tag" href="https://blog.dich.ink/tags/docker/">#Docker</a></span>
</li>
<li class="post-list">
<a href="https://blog.dich.ink/docker-learn-5/"> <a href="https://blog.dich.ink/docker-learn-5/">
<span class="post-date">2024-03-29</span> <span class="post-date">2024-03-29</span>
:: <span class="post-list-title">Docker学习笔记(五)</span></a> :: <span class="post-list-title">Docker学习笔记(五)</span></a>

View File

@ -102,7 +102,7 @@
<li class="tag-list"> <li class="tag-list">
<a href="https://blog.dich.ink/tags/docker/"> <a href="https://blog.dich.ink/tags/docker/">
Docker (5 posts) Docker (9 posts)
</a> </a>
</li> </li>