欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > Docker笔记

Docker笔记

2024/10/27 12:55:00 来源:https://blog.csdn.net/weixin_50848244/article/details/143200345  浏览:    关键词:Docker笔记

Docker笔记

一、底层原理

1. 容器与虚拟机的区别
  • 虚拟机(VM):
    • 定义:虚拟机是通过虚拟化技术在物理硬件上创建的完整操作系统实例,运行在 Hypervisor 之上。
    • 资源开销:每个虚拟机都有自己的操作系统和内核,因此资源消耗大,启动时间较长(几分钟)。
    • 隔离性:虚拟机之间完全隔离,各自拥有独立的内核和资源,安全性高。
    • 管理:通常需要更多的管理开销,如监控和配置。
  • 容器:
    • 定义:容器是运行在共享操作系统内核上的轻量级执行环境,通常使用 Linux 命名空间和控制组(cgroups)来实现隔离。
    • 资源开销:容器共享主机内核,相比虚拟机启动速度快(通常在几秒内),资源开销小。
    • 隔离性:容器之间共享主机内核,但可以使用命名空间进行资源隔离(如进程、网络、文件系统)。
    • 管理:容器管理相对简单,易于自动化和编排。
2. Docker 架构
  • Docker Daemon:
    • 功能:Docker Daemon 是 Docker 的核心组件,负责处理容器的创建、启动、停止和删除等操作。
    • API:Docker Daemon 提供了 REST API,Docker Client 通过这些 API 进行通信。
    • 后台运行:Docker Daemon 通常在后台运行,监听来自 Docker Client 的请求。
  • Docker Client:
    • 功能:Docker Client 是用户与 Docker 系统交互的命令行工具,通过命令执行操作。
    • 常用命令:
      • docker run:创建并启动一个新容器。
      • docker ps:列出正在运行的容器。
      • docker images:列出本地镜像。
  • Docker Registry:
    • 定义:Docker Registry 是一个存储和分发 Docker 镜像的地方。
    • 默认:Docker Hub 是 Docker 的默认公共镜像仓库,用户可以从中拉取或推送镜像。
    • 私有 Registry:用户也可以搭建自己的私有镜像仓库,以满足安全和网络的需求。
3. 镜像与容器
  • 镜像:
    • 只读层:镜像由一系列只读层组成,底层是基础镜像,上层是应用及其依赖。
    • 构建过程:使用 Dockerfile 构建镜像,通过 docker build 命令创建。
    • 存储:镜像在本地存储,每次创建新容器时会从镜像创建出可写层。
  • 容器:
    • 可写层:容器是在镜像的基础上创建的实例,具有可写层,可以在其中修改文件。
    • 运行状态:每个容器都有自己的运行状态,包括进程、网络配置和文件系统。
    • 生命周期:容器的生命周期可以通过 Docker 命令控制,包括创建、启动、停止和删除。
4. 分层文件系统
  • 分层结构:
    • Docker 镜像采用分层文件系统(如 OverlayFS、AUFS)进行管理,每一层只保存相对于上层的改动。
    • 这种设计允许多个镜像共享相同的底层层,节省存储空间。
  • 合并:
    • 当容器启动时,Docker 会将镜像的各个层合并为一个单一的可写文件系统,容器的所有操作都在这个可写层中进行。
5. 网络与存储
  • 网络:
    • Docker 默认创建一个桥接网络(bridge),允许容器之间通信。
    • 用户可以创建自定义网络(如 overlay 网络)以支持跨主机的容器通信。
  • 存储:
    • 卷(Volumes):Docker 提供的持久化存储解决方案,适用于需要持久化数据的场景。使用 docker volume 命令管理。
    • 绑定挂载(Bind Mounts):将主机文件系统中的路径挂载到容器中,适用于需要直接访问主机文件的场景。
6. 安全性
  • 命名空间:Docker 使用 Linux 命名空间来实现资源的隔离,包括进程(PID)、网络、文件系统等。
  • 控制组(cgroups):用于限制和监控容器的资源使用(如 CPU、内存)。
  • 用户命名空间:提供额外的安全层,允许容器以非特权用户身份运行。

二、Docker 命令与参数

1. 基本命令
  • 查看 Docker 版本
 docker --version
  • 显示当前安装的 Docker 版本信息。
  • 获取 Docker 系统信息
 docker info
  • 显示有关 Docker 的系统信息,包括已安装的镜像、容器、存储驱动等。

2. 镜像相关命令
  • 拉取镜像
 docker pull [OPTIONS] <image>
  • -a, --all-tags:拉取所有标签的镜像。
  • -q, --quiet:只输出镜像 ID。

示例:

 docker pull ubuntu:latest
  • 列出镜像
 docker images [OPTIONS]
  • -a, --all:显示所有镜像,包括中间层。
  • -q, --quiet:只显示镜像 ID。

示例:

 docker images
  • 删除镜像
 docker rmi [OPTIONS] <image>
  • -f, --force:强制删除。
  • --no-prune:不删除未使用的父镜像。

示例:

 docker rmi ubuntu:latest
  • 构建镜像
 docker build [OPTIONS] <path>
  • -t <name>:<tag>:给镜像打标签。
  • --no-cache:不使用缓存构建镜像。
  • -f <file>:指定 Dockerfile 文件。

示例:

 docker build -t myapp:1.0 .
  • 给镜像打标签
 docker tag <source_image> <target_image>

示例:

 docker tag myapp:1.0 myapp:latest

3. 容器相关命令
  • 运行容器
 docker run [OPTIONS] <image>
  • -d:后台运行(detached)。
  • -p <host_port>:<container_port>:端口映射。
  • --name <container_name>:指定容器名称。
  • -e <key>=<value>:设置环境变量。
  • -v <host_path>:<container_path>:挂载卷。

示例:

 docker run -d -p 80:80 --name mynginx nginx
  • 列出正在运行的容器
 docker ps [OPTIONS]
  • -a, --all:显示所有容器,包括已停止的。
  • -q, --quiet:只显示容器 ID。

示例:

 docker ps
  • 停止容器
 docker stop [OPTIONS] <container>
  • -t <seconds>:设置停止容器的超时时间(默认 10 秒)。

示例:

 docker stop mynginx
  • 删除容器
 docker rm [OPTIONS] <container>
  • -f, --force:强制删除正在运行的容器。
  • -v:删除挂载的卷。

示例:

 docker rm mynginx
  • 查看容器日志
 docker logs [OPTIONS] <container>
  • -f:实时输出日志。
  • --tail <number>:只显示最新的 行日志。

示例:

 docker logs -f mynginx
  • 执行命令
 docker exec [OPTIONS] <container> <command>
  • -it:分配伪终端并保持标准输入打开。

示例:

 docker exec -it mynginx /bin/bash

4. 网络相关命令
  • 列出网络
 docker network ls
  • 显示所有 Docker 网络。
  • 创建网络
 docker network create [OPTIONS] <network_name>
  • --driver <driver>:指定网络驱动(如 bridge, overlay)。

示例:

 docker network create my_network
  • 连接容器到网络
 docker network connect <network> <container>

示例:

 docker network connect my_network mynginx
  • 断开容器与网络的连接
 docker network disconnect <network> <container>

5. 卷相关命令
  • 创建卷
 docker volume create [OPTIONS] <volume_name>

示例:

 docker volume create my_volume
  • 列出卷
 docker volume ls
  • 删除卷
 docker volume rm <volume_name>

示例:

 docker volume rm my_volume

三、Dockerfile 和 Docker Compose 相关命令与示例

一、Dockerfile

Dockerfile 是一个文本文件,包含了创建 Docker 镜像所需的所有命令。以下是 Dockerfile 中常用的指令及其详细描述。

  1. FROM
dockerfile  FROM <image>[:<tag>]
  • 功能:指定基础镜像。
  • 示例:
  • RUN
dockerfile  RUN <command>
  • 功能:在镜像构建时执行命令。
  • 示例:
  • COPY
dockerfile  COPY <src> <dest>
  • 功能:将文件从上下文目录复制到镜像中。
  • 示例:
  • ADD
dockerfile  ADD <src> <dest>
  • 功能:与 COPY 类似,但可以自动解压 tar 文件。
  • 示例:
  • CMD
dockerfile  CMD ["executable", "param1", "param2"]
  • 功能:容器启动时执行的命令,可以被 docker run 命令的参数覆盖。
  • 示例:
  • ENTRYPOINT
dockerfile  ENTRYPOINT ["executable", "param1", "param2"]
  • 功能:指定容器启动时的默认执行命令,通常用于设置主命令。
  • 示例:
  • ENV
dockerfile  ENV <key>=<value>
  • 功能:设置环境变量。
  • 示例:
  • WORKDIR
dockerfile  WORKDIR /path/to/workdir
  • 功能:设置后续命令的工作目录。
  • 示例:
  • EXPOSE
dockerfile  EXPOSE <port>
  • 功能:声明容器在运行时监听的端口。
  • 示例:
  • VOLUME
dockerfile  VOLUME ["/data"]
  • 功能:创建一个可挂载的卷,用于持久化数据。
  • 示例:
Dockerfile 示例
dockerfile  # 基础镜像
FROM python:3.9-slim# 设置工作目录
WORKDIR /app#   文件
COPY requirements.txt ./
RUN pip install -r requirements.txt# 复制应用代码
COPY . .# 声明端口
EXPOSE 5000# 启动命令
CMD ["python", "app.py"]

二、Docker Compose

Docker Compose 是一个工具,用于定义和运行多容器 Docker 应用。使用 YAML 文件来配置应用的服务、网络和卷。

  1. docker-compose.yml 文件基本结构
yaml  version: '3.8'  # 版本号
services:       # 定义服务app:          # 服务名称build: .    # 指定 Dockerfile 路径ports:- "5000:5000"  # 端口映射environment:- APP_ENV=production  # 环境变量volumes:- mydata:/app/data    # 挂载卷volumes:  # 定义卷mydata: {}
  1. 常用 Docker Compose 命令
  • 启动服务
 docker-compose up [OPTIONS]
  • -d:在后台运行。
  • --build:在启动前构建镜像。

示例:

 docker-compose up -d
  • 停止服务
 docker-compose down [OPTIONS]
  • -v:同时删除挂载的卷。

示例:

 docker-compose down
  • 查看服务状态
 docker-compose ps
  • 重启服务
 docker-compose restart [OPTIONS] [SERVICE...]
  • 构建镜像
 docker-compose build [OPTIONS]
  • --no-cache:不使用缓存构建镜像。

示例:

 docker-compose build
  • 执行命令
 docker-compose exec <service> <command>

示例:

 docker-compose exec app /bin/bash

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com