Docker:4、数据管理(volume数据卷、挂载主机目录bind mounts、tmpfs)、docker-compose(相关命令)、原理(namespace和cgroup)

1.数据管理

在容器中管理数据主要有三种方式:

  • 数据卷(Volumes):
    • 完全在Docker中实现和管理。数据存储在宿主机上由Docker控制的位置。
    • 可以用于容器之间的数据共享。
    • 对数据卷的修改会立马生效。对数据卷的更新,不会影响镜像。
    • 即使容器被删除,数据卷仍然存在。
  • 挂载主机目录(Bind Mounts):
    • 允许用户指定宿主机上的任意目录或文件作为数据源。
    • 可以用于在宿主机和容器之间共享配置文件、日志文件等。
    • 挂载主机目录的默认权限是读写,用户可以通过 readonly指定为只读。
    • 即使容器被删除,数据卷仍然存在。
  • 内存文件系统(tmpfs):
    • tmpfs是一种基于内存的文件系统,数据存储在宿主机的内存中。
    • 适用于存储临时文件,如应用程序的缓存等。
    • I/O操作很快。
    • 一旦容器停止或系统重启,数据就会丢失。

Docker:4、数据管理(volume数据卷、挂载主机目录bind mounts、tmpfs)、docker-compose(相关命令)、原理(namespace和cgroup)_第1张图片

1.1.数据卷的常见命令

# 创建一个数据卷
docker volume create my-vol
# 查看所有的数据卷
docker volume ls
# 查看数据卷的具体信息
docker inspect web
# 删除指定的数据卷
docker volume rm my-vol
#在用 docker run 命令的时候,使用 --mount 标记来将一个或多个数据卷挂载到容器里。
docker run -dp 80:5000 -v yourImageName:/xxx/xxx yourImageName
# `-v` 后面跟着的`yourImageName:/xxx/xxx` 是数据卷挂在的容器的路径。
# 最后的`yourImageName` 是数据卷要挂载到哪个容器上。

2.docker-compose

2.1.概述

一个项目往往涉及到前端、后端、缓存、数据库等多个服务,这些服务相互独立,又彼此关联。

docker compose的出现就是为了通过一个单独的docker-compose.yaml的配置文件来管理这些服务。使得开发人员只需要一条命令$ docker compose up就可以实现启动、停止、重构这些服务。

特别是项目交接时,只需要这条命令启动就可以自动安装整个项目所需要的各种依赖和配置。

Docker Compose 是基于 Python 编写的开源项目,地址在https://github.com/docker/compose

其核心功能为:

  • 多容器管理:允许用户在一个 YAML 文件中定义和管理多个容器。
  • 服务编排:配置容器间的网络和依赖关系。
  • 一键部署:docker-compose up/down,可以轻松地启动和停止整个应用程序。

2.2.docker-compose.yml文件基本结构与示例

Docker Compose 文件基本结构如下:

  • 版本(version): 指定 Compose 文件格式的版本。版本决定了可用的配置选项
  • 服务(services): 定义了应用中的每个容器(服务)。每个服务可以使用不同的镜像、环境设置和依赖关系。
    • 镜像(image): 从指定的镜像中启动容器,可以是存储仓库、标签以及镜像 ID。
    • 命令(command): 可选,覆盖容器启动后默认执行的命令。在启动服务时运行特定的命令或脚本,常用于启动应用程序、执行初始化脚本等。
    • 端口(ports): 可选,映射容器和宿主机的端口。
    • 依赖(depends_on): 依赖配置的选项,意思是如果服务启动是如果有依赖于其他服务的,先启动被依赖的服务,启动完成后在启动该服务。
    • 环境变量(environment): 可选,设置服务运行所需的环境变量。
    • 重启(restart): 可选,控制容器的重启策略。在容器退出时,根据指定的策略自动重启容器。
    • 服务卷(volumes): 可选,定义服务使用的卷,用于数据持久化或在容器之间共享数据。
    • 构建(build): 指定构建镜像的 dockerfile 的上下文路径,或者详细配置对象。
  • 网络(networks): 定义了容器间的网络连接。
  • 卷(volumes): 用于数据持久化和共享的数据卷定义。常用于数据库存储、配置文件、日志等数据的持久化。

一个完整的示例:

version: "3.8" # 定义版本, 表示当前使用的 docker-compose 语法的版本
services: # 服务,可以存在多个
    servicename1: # 服务名字,它也是内部 bridge 网络可以使用的 DNS name,如果不是集群模式相当于 docker run 的时候指定的一个名称,
   #集群(Swarm)模式是多个容器的逻辑抽象
        image: # 镜像的名字
        command: # 可选,如果设置,则会覆盖默认镜像里的 CMD 命令
        environment: # 可选,等价于 docker container run 里的 --env 选项设置环境变量
        volumes: # 可选,等价于 docker container run 里的 -v 选项 绑定数据卷
        networks: # 可选,等价于 docker container run 里的 --network 选项指定网络
        ports: # 可选,等价于 docker container run 里的 -p 选项指定端口映射
        restart: # 可选,控制容器的重启策略
        build: #构建目录
        depends_on: #服务依赖配置
    servicename2:
        image:
        command:
        networks:
    	ports:
    servicename3:
    #...
volumes: # 可选,需要创建的数据卷,类似 docker volume create
  db_data:
networks: # 可选,等价于 docker network create

一个常见的简单示例:

version: 3
services:
    web:
        build:
        ports:
            - "80:5000"
    db:
        image:  "mysql"
        environment:
            MYSQL_DATABASE: yourSQLname
            MYSQL_ROOT_PASSWORD: yourSQLpassword

2.3.docker-compose相关命令

2.3.1.docker-compose up相关启动命令

# 在当前目录下寻找 docker-compose.yml 文件,并根据其中定义的服务启动应用程序
docker-compose up
# 如果文件名称不是 docker-compose.yml ,可以通过 -f 参数指定。
docker-compose -f docker-compose-prod.yml up
# 后台启动
docker-compose up -d
# 强制重新创建所有容器,即使它们已经存在
docker-compose up --force-recreate
# 重新构建镜像
docker-compose up --build
# 指定要启动的服务名称,而不是启动所有服务
# 可以同时指定多个服务,用空格分隔。
docker-compose up service_name

2.3.2.docker-compose down相关暂停命令

# 在当前目录下寻找 docker-compose.yml 文件
# 根据其中定义移除启动的所有容器,网络和卷。
docker-compose down
# 停止容器但不移除
docker-compose down --stop
# 指定要停止和移除的特定服务,而不是停止和移除所有服务
# 可以同时指定多个服务,用空格分隔。
docker-compose down service_name

2.3.3.docker-compose ps相关查看命令

# 查看所有容器的状态信息
docker-compose ps
# 只显示服务名称
docker-compose ps --services
# 查看指定服务的容器
docker-compose ps service_name
# 停止并删除所有容器和数据卷
docker compose down --volumes

2.3.4.其他命令

命令 介绍
docker-compose version 查看版本
docker-compose images 列出所有容器使用的镜像
docker-compose kill 强制停止服务的容器
docker-compose exec 在容器中执行命令
docker-compose logs 查看日志
docker-compose pause 暂停服务
docker-compose unpause 恢复服务
docker-compose push 推送服务镜像
docker-compose start 启动当前停止的某个容器
docker-compose stop 停止当前运行的某个容器
docker-compose rm 删除服务停止的容器
docker-compose top 查看进程

3.namespace和cgroup

Docker 使用 Google 公司推出的 Go 语言 进行开发实现,是基于Linux 内核提供的 CGroupnamespace功能 来实现的。

两者都是将进程进行分组,但是两者的作用还是有本质区别。namespace 是为了隔离进程组之间的资源,而 cgroup 是为了对一组进程进行统一的资源监控和限制。

你可能感兴趣的:(docker,docker,容器,运维,数据卷)