docker liunx的底层逻辑是什么,docker 的原理是什么?怎么部署及应用,Docker的来龙去脉

Docker 是一种用于开发、交付和运行应用程序的开源平台。它使应用程序能够在容器中运行,提供了轻量级的虚拟化环境。以下是 Docker 的底层逻辑、原理以及部署和应用的方法。

Docker 的底层逻辑

Docker 的核心是利用 Linux 内核的几个特性来实现轻量级的虚拟化:

  1. Namespaces(命名空间)

    • 提供进程隔离。不同的命名空间类型包括 PID(进程ID)、NET(网络)、IPC(进程间通信)、MNT(挂载点)、UTS(主机名和域名)等。
    • 每个容器都有自己独立的命名空间,从而实现资源隔离。
  2. Control Groups(cgroups)

    • 提供资源限制和控制。可以限制容器的 CPU、内存、磁盘 I/O 等资源的使用。
    • 确保各个容器之间的资源使用是独立且可控的。
  3. Union File Systems(联合文件系统)

    • 提供文件系统的分层机制。常见的实现包括 AUFS、OverlayFS 等。
    • 使得容器镜像可以分层构建和共享,从而减少存储空间和加速部署。

Docker 的原理

Docker 的工作主要分为以下几个部分:

  1. 镜像(Image)

    • Docker 镜像是一个包含了应用程序及其运行时环境的只读模板。可以通过 Dockerfile 来定义和构建镜像。
  2. 容器(Container)

    • 容器是镜像的一个实例,是一个轻量级、独立的运行环境。容器可以启动、停止、移动和删除。
    • 容器启动时,Docker 会利用镜像创建一个写时复制(Copy-on-Write)的层,所有对文件系统的更改都在这个层中进行。
  3. 仓库(Registry)

    • Docker 镜像存储在仓库中。Docker Hub 是一个公共的仓库,用户可以从中下载或上传镜像。
    • 企业可以搭建私有仓库来存储和管理自己的镜像。
  4. Docker 引擎(Engine)

    • Docker 引擎是 Docker 的核心组件,负责镜像的创建、容器的管理以及镜像和容器之间的交互。

Docker 的部署及应用

安装 Docker

在不同的操作系统上安装 Docker 的方法略有不同。以下是一些常见的安装步骤:

在 Ubuntu 上安装 Docker:

# 更新包索引
sudo apt-get update

# 安装必要的依赖
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common

# 添加 Docker 的官方 GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

# 添加 Docker 的 APT 仓库
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

# 更新包索引
sudo apt-get update

# 安装 Docker CE
sudo apt-get install -y docker-ce

# 启动 Docker 服务
sudo systemctl start docker

# 设置 Docker 服务开机启动
sudo systemctl enable docker
使用 Docker 部署应用
  1. 拉取镜像:
# 例如拉取官方的 nginx 镜像
docker pull nginx
  1. 运行容器:
# 运行一个 nginx 容器,并将本地的 80 端口映射到容器的 80 端口
docker run -d -p 80:80 --name mynginx nginx
  1. 构建自定义镜像:
# 创建一个 Dockerfile 文件
FROM nginx
COPY . /usr/share/nginx/html
# 构建镜像
docker build -t mycustomnginx .

# 运行自定义镜像的容器
docker run -d -p 80:80 mycustomnginx
  1. 管理容器:
# 查看运行中的容器
docker ps

# 停止容器
docker stop mynginx

# 删除容器
docker rm mynginx

# 查看所有镜像
docker images

# 删除镜像
docker rmi nginx

当然,可以深入了解更多关于 Docker 的内容,包括进阶概念、网络配置、数据存储、以及一些实际应用案例。

进阶概念

Docker Compose

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过一个 docker-compose.yml 文件,可以描述应用程序的服务、网络和卷。

示例 docker-compose.yml 文件:

version: '3'
services:
  web:
    image: nginx
    ports:
      - "80:80"
  db:
    image: mysql
    environment:
      MYSQL_ROOT_PASSWORD: example

使用 Docker Compose:

# 启动服务
docker-compose up

# 以后台模式启动
docker-compose up -d

# 停止服务
docker-compose down
Docker Swarm

Docker Swarm 是 Docker 的原生集群管理工具,使 Docker 主机可以组成一个集群,并在集群中运行容器,使其具有高可用性和可扩展性。

初始化 Swarm:

docker swarm init

添加节点到 Swarm:

docker swarm join --token <token> <manager_ip>:<port>

部署服务到 Swarm:

docker service create --name myservice --replicas 3 nginx

网络配置

Docker 提供了多种网络模式以满足不同的需求:

  1. Bridge(默认):

    • 独立的网络,容器可以通过桥接网络进行通信。
    • 示例: docker run -d --name mynginx --network bridge nginx
  2. Host:

    • 容器共享主机的网络栈。
    • 示例: docker run -d --name mynginx --network host nginx
  3. None:

    • 容器没有网络接口。
    • 示例: docker run -d --name mynginx --network none nginx
  4. Overlay:

    • 用于 Swarm 集群中的跨主机网络。
    • 示例: docker network create -d overlay my_overlay_network

数据存储

Docker 提供了几种数据持久化的方式:

  1. Volumes(卷):

    • 独立于容器的存储,数据持久化的最佳方式。
    • 创建卷: docker volume create myvolume
    • 使用卷: docker run -d -v myvolume:/data --name mynginx nginx
  2. Bind Mounts(绑定挂载):

    • 将主机的文件或目录挂载到容器中。
    • 示例: docker run -d -v /host/path:/container/path --name mynginx nginx

实际应用案例

部署一个多容器应用

假设我们有一个需要 Nginx 和 MySQL 组成的 Web 应用,可以使用 Docker Compose 进行部署。

创建 docker-compose.yml:

version: '3.8'
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
    depends_on:
      - db

  db:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: root_password
      MYSQL_DATABASE: my_database
      MYSQL_USER: user
      MYSQL_PASSWORD: user_password
    volumes:
      - db_data:/var/lib/mysql

volumes:
  db_data:

启动应用:

docker-compose up -d
部署一个 CI/CD 流水线

可以使用 Jenkins 来设置一个简单的 CI/CD 流水线。

Dockerfile for Jenkins:

FROM jenkins/jenkins:lts
USER root
RUN apt-get update && apt-get install -y docker.io
USER jenkins

启动 Jenkins 容器:

docker build -t myjenkins .
docker run -d -p 8080:8080 -v jenkins_home:/var/jenkins_home myjenkins

在 Jenkins 中配置 GitHub、Docker 和其他插件,可以实现自动化构建与部署。

监控与日志

Docker Logs

查看容器日志:

docker logs mycontainer

实时查看容器日志:

docker logs -f mycontainer
Docker Stats

查看容器资源使用情况:

docker stats
使用 Prometheus 和 Grafana

可以使用 Prometheus 和 Grafana 进行容器监控:

  1. Prometheus: 收集并存储时间序列数据。
  2. **当然,可以更深入地探讨 Docker 的更多高级功能和实际应用,包括安全性、调试、最佳实践以及一些高级的集成和工具。

安全性

Docker 提供了多种安全性措施和最佳实践来保护容器化应用。

用户命名空间(User Namespaces)

用户命名空间允许在容器内的用户映射到主机上的不同用户,减少容器对主机的潜在影响。

启用用户命名空间:

编辑 Docker 配置文件(通常在 /etc/docker/daemon.json):

{
   
   
  "userns-remap": "default"
}

然后重启 Docker 服务:

sudo systemctl restart docker
最小化镜像

使用最小化的基础镜像可以减少攻击面。例如,使用 alpine 镜像代替 ubuntudebian

示例:

FROM alpine:latest
RUN apk --no-cache add curl
镜像签名(Docker Content Trust)

Docker Content Trust (DCT) 提供了镜像签名和验证功能,确保镜像的来源和完整性。

启用 DCT:

export DOCKER_CONTENT_TRUST=1
只读文件系统

将容器的文件系统设置为只读,可以减少攻击者对容器内文件的修改。

运行容器时设置只读:

docker run -d --read-only nginx

调试

进入运行中的容器

使用 docker exec 命令可以进入运行中的容器进行调试。

docker exec -it mycontainer /bin/bash
查看容器资源使用情况

使用 docker stats 命令可以实时查看容器的资源使用情况。

docker stats mycontainer
查看容器事件

使用 docker events 命令可以实时查看 Docker 的事件流。

docker events

最佳实践

构建高效的 Docker 镜像
  1. 减少镜像层数:每个 RUNCOPYADD 指令都会创建一个新的镜像层。可以通过合并指令来减少层数。

  2. 使用多阶段构建:在一个 Dockerfile 中使用多个 FROM 指令,可以在构建阶段用一个较大的镜像,最终生成一个较小的运行时镜像。

示例:

# 构建阶段
FROM golang:alpine AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp

# 运行阶段
FROM alpine:latest
WORKDIR /app
COPY --from=builder /app/myapp .
CMD ["./myapp"]
  1. 缓存依赖:将不常变化的部分放在 Dockerfile 的前面,以充分利用缓存。

示例:

FROM node:alpine
WORKDIR /app
COPY package.json ./
RUN npm install
COPY . .
CMD ["npm", "start"]
使用 Docker Compose 管理多容器应用

Docker Compose 是管理多容器应用的利器,可以用一个简单的 YAML 文件定义所有服务。

示例:

version: '3'
services:
  web:
    image: nginx
    ports:
      - "80:80"
  app:
    image: myapp
    
### 如何在Linux上使用Docker部署或管理DeepSeek知识库 #### 设置Docker环境 为了确保能够顺利部署DeepSeek知识库,首先需要准备一个合适的Docker环境。这涉及到安装Docker以及配置国内镜像源来加速下载速度。 对于Ubuntu系统而言,可以通过如下命令设置Docker的官方稳定版存储库并更新软件包列表: ```bash echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update ``` 接着执行一系列操作完成Docker及其相关工具(如docker-compose)的安装[^1]: ```bash curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun systemctl enable --now docker curl -L https://github.com/docker/compose/releases/download/v2.20.3/docker-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose ``` 验证安装是否成功可通过查看版本号确认: ```bash docker -v docker-compose -v ``` #### 获取并调整项目文件 获取必要的项目资源是下一步骤的关键所在。这里以[RAGFlow](https://github.com/infiniflow/RAGFlow)为例说明具体做法。通过Git克隆仓库至本地后,需特别注意`.env`文件内的配置项,尤其是关于镜像的选择部分。默认情况下可能会指向较轻量化的版本;然而,为了获得完整的功能体验,则应切换成全量版本,并考虑选用更稳定的国内镜像源作为替代选项之一[^3]。 假设已经位于项目的根目录下,那么接下来的操作将是编辑`ragflow/.env`文件中的`RAGFLOW_IMAGE`参数值为指定的全量版本标签,之后保存更改。 #### 启动服务容器 一切准备工作就绪以后,就可以利用预先定义好的`docker-compose.yml`文件一键启动所需的服务组件了。此过程通常会在后台运行,因此不会占用当前终端窗口。如果有任何网络连接方面的问题阻碍了镜像拉取进度的话,记得参照之前提到的方法尝试更换其他可用的镜像地址。 ```bash cd ragflow/docker docker compose -f docker/docker-compose.yml up -d ``` #### 访问应用界面 一旦所有依赖都被正确加载完毕并且各个微服务之间建立了良好的通信关系,便可以直接访问由DeepSeek所提供的Web UI页面来进行后续的人机对话交流活动了。假如浏览器未能自动跳转过去,请手动输入对应的URL路径加以访问[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九张算数

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值